Gabriel Neuman
Gabriel Neuman
Herramientas

Docuseal: cómo dejé de cobrar con cotizaciones aprobadas por correo y monté un sistema de firma open source

Gabriel Neuman·

Llevo años cobrándole a clientes con un flujo que ya no aguanta: mando la cotización por correo, el cliente responde "aprobado" o "ok adelante", y con eso le facturo el 50% inicial. Funciona porque hay confianza, pero no es legal. Si un cliente se echa para atrás a mitad del proyecto, mi único respaldo es un thread de Gmail. Eso para deals de $30,000 MXN está bien. Para deals de $300,000 MXN ya no.

La solución obvia era DocuSign. La pagué dos meses, la odié, la cancelé. Cobra $25 USD/mes por usuario, te limita los envíos por plan, y el editor está pensado para enterprises que mandan 500 contratos al mes. Para alguien que firma 5-10 documentos al mes está sobreestructurado.

Por eso me clavé con Docuseal. Es la alternativa open source — corre gratis self-hosted o en su plan cloud free de 10 firmas/mes — y tiene la única feature que me importa: API + webhooks que se conectan al sistema de propuestas que ya tengo en gabrielneuman.com/propuesta/[trackingId].

En este post te cuento por qué la elegí, cómo está pensada para integrarse, y el plan exacto que voy a seguir para meterla al flujo de GNB Labs.

El problema real: tres documentos que pasan por cada deal

Cuando cierro un proyecto de servicios, hay tres momentos donde necesito firma:

  1. Antes de cobrar. El cliente acepta la cotización con alcance, precio, timeline y términos de pago. Hoy esto pasa por correo y es legalmente débil.
  2. Antes de empezar. Contrato de servicios con cláusulas de IP, confidencialidad, propiedad intelectual del código entregado y forma de pago. Hoy esto a veces se firma, a veces no — depende del cliente.
  3. Antes de cerrar. Acuse de entrega que dice "recibí los entregables descritos". Esto desbloquea el último 50% y me deja el material que necesito para case studies. Hoy esto no existe — el cierre se hace por mensaje de Slack.

Cada uno de estos documentos vale dinero real. Si en un deal de $300,000 MXN el cliente decide a mitad del proyecto que el alcance era otro, sin contrato firmado pierdo. Si entrego y el cliente desaparece sin pagar el cierre, sin acuse pierdo.

Necesito firma electrónica integrada al flujo. No un sistema aparte que viva en un dashboard de DocuSign que abro 4 veces al año.

Por qué Docuseal y no otra cosa

Comparé cuatro opciones reales antes de decidirme:

DocuSign / HelloSign / Adobe Sign. Caras, sobrediseñadas para enterprise, branding ajeno. El cliente recibe un correo de "DocuSign envelope from Gabriel" que se siente impersonal. Descartadas.

Better Proposals / Proposify. Mezclan editor de propuestas + firma + analytics en un solo producto. Cobran $25-49 USD/mes. El problema: yo ya tengo el editor en mi sitio, lo construí en MongoDB con renderizado en Next.js. Pagar por un editor que no voy a usar para tener una feature de firma es absurdo.

Self-hosted con jsPDF + algo de Node. Construir la firma yo mismo. Lo descarté rápido — eIDAS y ESIGN no son cosas que quieras improvisar. Necesitas audit trail, hash del documento, timestamp criptográfico, IP del firmante, y ganas de defender eso en tribunales si pasa algo.

Docuseal. Open source (AGPLv3), API + webhooks, plan free de 10 firmas/mes para validar, $20 USD/mes Pro cuando escale, opción self-hosted gratis si me da la gana mantenerla. El audit trail es comparable a DocuSign. Tiene SDKs oficiales para React, Vue, Angular y JavaScript — se embebe directo en mi app.

Decisión: empezar con plan free para validar el flujo manual con 2-3 clientes reales. Cuando ya esté integrado vía API y la 10va firma del mes me bloquee, upgrade a Pro $20 USD/mes. La regla que sigo desde hace tiempo: no integro APIs sin antes haber validado que el flujo manual funciona. Si después de 5 clientes nadie firma porque "está raro", la integración no resuelve nada.

Cómo está pensada la integración con mi sitio

El sistema de propuestas que tengo hoy en gabrielneuman.com funciona así:

  • Cuando cierro un deal, corre el skill /cotizar y se crea un documento en MongoDB en la colección deals con un trackingId UUID.
  • El cliente recibe un link a gabrielneuman.com/propuesta/[trackingId] — una página privada (no indexable) con la propuesta completa: resultado prometido, automatizaciones numeradas, stack, timeline, precio, link de pago Stripe.
  • Hoy: el cliente ve la propuesta, responde por correo "ok adelante", yo le mando el link de pago.
  • Mañana con Docuseal: el cliente ve la propuesta, hace click en "Firmar y proceder al pago", se abre el componente de Docuseal embebido, firma con su nombre y dispositivo, y cuando Docuseal me manda el webhook submission.completed mi backend automáticamente desbloquea el link de pago Stripe y avanza el deal a stage: aprobada.

Esa es la diferencia entre un sistema de firma colgado y uno integrado. El cliente no sale de mi dominio, no recibe un correo de DocuSign con branding ajeno, y el estado del deal en mi base de datos avanza automático cuando firma. La firma deja de ser un trámite separado y se vuelve parte del flujo de venta.

Para los otros dos documentos —contrato de servicios y acuse de entrega— la lógica es la misma. El contrato se firma una vez por cliente y queda guardado en su organización en mi CRM (crm_organizations.contractSigned: true). El acuse de entrega se dispara automático cuando el deal pasa a stage: entregado y desbloquea el último 50% del pago cuando vuelve firmado.

Lo que aprendí leyendo la documentación

Tres cosas que no esperaba y que cambian cómo voy a implementar esto:

El plan free no incluye API access. Esto es el detalle que casi me hace cambiar de plan. Si quieres validar el flujo manual primero (que es lo correcto), el plan free te da 10 firmas/mes, sí — pero las firmas las disparas desde el dashboard de Docuseal, no desde tu app. Para integrar vía API necesitas el plan Pro de $20 USD/mes desde el día uno. La estrategia de "free para validar" funciona solo si aceptas que la fase de validación es 100% manual.

Los webhooks llegan en tres eventos distintos. submission.created cuando se manda, form.viewed cuando el cliente abre el documento, submission.completed cuando todos los firmantes terminan. El segundo es oro puro para ventas — me dice si el cliente abrió la propuesta o si se quedó en su inbox. Más útil que los pixel trackers de Mailchimp.

Multi-firmante con orden controlado. Puedo configurar que el cliente firme primero y yo firme automático después. Esto importa porque mi audit trail necesita que la firma del cliente tenga timestamp anterior a la mía. Si yo firmo primero y el cliente no firma nunca, el documento queda en limbo legal.

El plan de implementación

No voy a escribir el código en este post. Está documentado completo en mi repo en docs/planes/2026-05-09-docuseal-firma-propuestas.md y separado en 5 fases con sus subissues en Linear:

  1. Fase 0 — Cuenta y flujo manual. Crear cuenta gratis, subir 3 plantillas (cotización, contrato, acuse), mandar 2-3 firmas reales a clientes reales sin tocar código.
  2. Fase 1 — Modelo de datos. Agregar signing y contract al schema de deals y crm_organizations en MongoDB. Sin integración todavía, solo el campo donde va a vivir el submissionId cuando llegue.
  3. Fase 2 — API + webhooks. Upgrade a Pro $20/mes. Wrapper en lib/docuseal.ts con métodos createSubmission, getSubmission, downloadPdf. Endpoint /api/webhooks/docuseal que actualiza el deal cuando llegue submission.completed.
  4. Fase 3 — UI en /propuesta/[trackingId]. Botón "Firmar propuesta" que llama al endpoint y abre el componente embebido de Docuseal. Cuando firma, redirect al link de pago Stripe.
  5. Fase 4 — Skill /cotizar actualizado. Cuando el skill genera el deal, automáticamente crea la submission de Docuseal con la cotización pre-llenada. Cero pasos manuales adicionales.

La meta es: en 3 semanas, ningún deal de GNB Labs se factura sin firma electrónica previa. Y el skill /cotizar debería ser referencia para cualquier sistema futuro donde mande documentos a firma — clientes nuevos, renovaciones de retainer, cambios de alcance.

Para quién tiene sentido

Si vendes servicios y cierras menos de 3 propuestas al mes, el plan free te alcanza y vale la pena migrar de "ok adelante por correo" a firma real. El upgrade es opcional.

Si cierras más de 3 propuestas al mes y tienes un sitio o CRM propio, el plan Pro a $20 USD/mes con integración vía API te ahorra horas de tramitología y te da tracking de cuándo el cliente abre la propuesta. Es la mejor relación costo-beneficio que vi en la categoría.

Si vendes productos digitales o suscripciones (no servicios custom), probablemente no necesitas firma electrónica formal. Stripe Checkout + términos legales en el sitio te alcanzan.

Si tu cliente es enterprise grande con compliance estricto y exige DocuSign, paga DocuSign. Esa pelea no la vas a ganar.


¿Estás cobrando proyectos sin contrato firmado?

En el programa Tu Primer Empleado de IA te enseño a montar el sistema de ventas completo: cotización pública con /propuesta/[trackingId], firma electrónica con Docuseal, link de pago Stripe automático, y CRM en MongoDB que avanza el deal solo cuando el cliente firma. El stack que uso para no volver a cobrar con un thread de Gmail.

Gabriel Neuman

Gabriel Neuman

Consultor en Automatización e IA con más de 15 años de experiencia. Ayudo a dueños de negocios a recuperar su tiempo mediante sistemas que trabajan solos. Fundador de GNB Labs y apasionado por el NoCode.

¿Listo para automatizar tu negocio?

Ayudo a empresas a escalar mediante automatización inteligente y estrategias de IA. Sin fricción, sin complicaciones, resultados en semanas.

También te puede interesar...