Flujo 09: Facturación y Seguimiento de Pagos
El problema
Las facturas vencidas sin cobrar son el problema de tesorería más común en autónomos y pymes. El ciclo es siempre el mismo: se emite la factura, pasa la fecha de vencimiento, nadie la reclama porque se olvida o "da apuro", y al final algunas facturas se cobran con 60-90 días de retraso. Este flujo implementa una secuencia de recuperación (dunning) de 3 contactos automáticos para facturas impagadas, activada directamente por Stripe cuando detecta un pago fallido.
Herramientas necesarias
| Nodo n8n | Función |
|---|---|
| Stripe Trigger | Detecta el evento invoice.payment_failed en tiempo real |
| Set | Normaliza los datos de la factura fallida |
| Gmail | Envía el primer email de notificación (día 0) |
| Wait | Pausa 3 días antes del segundo intento |
| Gmail | Envía el segundo email (día 3) |
| Wait | Pausa 4 días más |
| Gmail | Envía el tercer email firme (día 7) |
| Google Sheets | Registra cada evento del dunning para seguimiento |
Servicios externos:
- Cuenta Stripe con Webhook configurado
- Cuenta Gmail con OAuth2
- Google Sheets para el log de seguimiento
Configuración paso a paso
Nodo 1: Stripe Trigger
Añade el nodo Stripe Trigger:
- Credentials: conecta tu cuenta Stripe (API Key en n8n Credentials)
- Events: selecciona
invoice.payment_failed
n8n registra automáticamente el webhook en Stripe. Comprueba en tu dashboard de Stripe (Developers → Webhooks) que aparece la URL de n8n.
Campos disponibles del evento:
{{ $json.customer_email }} → email del cliente
{{ $json.customer_name }} → nombre del cliente
{{ $json.amount_due }} → importe en céntimos (dividir entre 100)
{{ $json.currency }} → moneda
{{ $json.number }} → número de factura
{{ $json.hosted_invoice_url }} → URL de la factura en Stripe
{{ $json.due_date }} → fecha de vencimiento (Unix timestamp)
{{ $json.attempt_count }} → número de intento fallido
Nodo 2: Set — Normalizar datos
Añade un nodo Set para preparar los datos:
cliente_nombre:={{ $json.customer_name || 'Cliente' }}cliente_email:={{ $json.customer_email }}importe:={{ ($json.amount_due / 100).toFixed(2) }}moneda:={{ $json.currency.toUpperCase() }}numero_factura:={{ $json.number }}url_factura:={{ $json.hosted_invoice_url }}fecha_vencimiento:={{ new Date($json.due_date * 1000).toLocaleDateString('es-ES') }}intento:={{ $json.attempt_count }}
Nodo 3: Google Sheets — Registrar evento inicial
Añade el nodo Google Sheets:
- Operation: Append Row
- Sheet:
Seguimiento_Pagos - Columns:
Fecha_Evento:={{ $now.toISO() }}Numero_Factura:={{ $json.numero_factura }}Cliente:={{ $json.cliente_nombre }}Email:={{ $json.cliente_email }}Importe:={{ $json.importe }}Intento_Nro:={{ $json.intento }}Estado:Pago fallido — Dunning iniciado
Nodo 4: Gmail — Email día 0 (notificación inmediata)
Añade el nodo Gmail:
- To:
={{ $json.cliente_email }} - Subject:
=Problema con el pago de la factura {{ $json.numero_factura }} - Message:
Hola {{ $json.cliente_nombre }},
Hemos detectado un problema al procesar el pago de la factura {{ $json.numero_factura }}
por importe de {{ $json.importe }} {{ $json.moneda }}.
Esto puede ocurrir por fondos insuficientes, tarjeta caducada o un problema
temporal con tu banco. No se trata de un problema de seguridad.
Para resolverlo, accede a tu factura y actualiza el método de pago:
{{ $json.url_factura }}
Si el problema persiste, responde a este email y te ayudamos en menos de 24 horas.
Un saludo,
[Tu nombre]
[EMPRESA]
Nodo 5: Wait — 3 días
Añade el nodo Wait:
- Wait For: Specific Amount of Time
- Amount: 3
- Unit: Days
Nodo 6: Gmail — Email día 3 (recordatorio)
- Subject:
=Recordatorio: Factura {{ $('Set').item.json.numero_factura }} pendiente de pago - Message:
Hola {{ $('Set').item.json.cliente_nombre }},
Te escribimos porque la factura {{ $('Set').item.json.numero_factura }}
({{ $('Set').item.json.importe }} {{ $('Set').item.json.moneda }})
sigue pendiente de pago.
Si ya lo has solucionado, ignora este mensaje — el sistema lo detectará automáticamente.
Si no, actualiza tu método de pago aquí:
{{ $('Set').item.json.url_factura }}
¿Necesitas ayuda o quieres aplazar el pago? Responde a este email.
[Tu nombre] — [EMPRESA]
Nodo 7: Google Sheets — Actualizar estado (día 3)
- Operation: Update Row (busca por
Numero_Factura) - Actualiza el campo
Estado:Recordatorio día 3 enviado
Nodo 8: Wait — 4 días más
- Amount: 4 días (total acumulado: 7 días desde el evento original)
Nodo 9: Gmail — Email día 7 (aviso firme)
- Subject:
=Último aviso: Factura {{ $('Set').item.json.numero_factura }} — Acción requerida - Message:
Estimado/a {{ $('Set').item.json.cliente_nombre }},
Han transcurrido 7 días desde que intentamos procesar el pago
de la factura {{ $('Set').item.json.numero_factura }}
por {{ $('Set').item.json.importe }} {{ $('Set').item.json.moneda }}.
A partir del próximo lunes, el acceso a [TU SERVICIO] quedará suspendido
temporalmente hasta regularizar el pago.
Para evitarlo, actualiza tu método de pago ahora:
{{ $('Set').item.json.url_factura }}
Si necesitas un plan de pago o tienes alguna incidencia excepcional,
contacta con nosotros antes del lunes en admin@tuempresa.com
o llama al [TELÉFONO].
Atentamente,
Departamento de Administración
[EMPRESA]
Nodo 10: Google Sheets — Registrar cierre del dunning
- Actualiza
Estado:Dunning completo — Intervención manual requerida si sigue impagada - Añade columna
Fecha_Fin_Dunning:={{ $now.toISO() }}
Ejemplo de prompt IA
Este flujo no requiere IA generativa porque los emails de dunning son más efectivos cuando son directos y no parecen generados por máquina. Sin embargo, puedes añadir un nodo OpenAI para personalizar el primer email según el historial del cliente:
Eres el gestor de cobros de [EMPRESA]. Redacta un email de notificación
de pago fallido para este cliente.
Contexto:
- Cliente: {{ $json.cliente_nombre }}
- Importe: {{ $json.importe }}€
- Número de factura: {{ $json.numero_factura }}
- Es el intento número: {{ $json.intento }}
- Si intento > 1, el tono debe ser más firme pero siempre profesional
Reglas:
- Máximo 100 palabras
- No usar palabras como "desafortunadamente" o "lamentablemente"
- Incluir siempre el enlace: {{ $json.url_factura }}
- Ofrecer ayuda si hay algún problema excepcional
Ahorro estimado
| Métrica | Antes | Con automatización |
|---|---|---|
| Seguimiento manual de impagados | 2 h/semana | 5 min (revisar Sheets) |
| Emails de recordatorio individuales | 3-5 min/factura | 0 min |
| Facturas cobradas en primeros 30 días | ~60% | ~80-85% |
| Periodo medio de cobro | 35-45 días | ~20 días |
Ahorro neto: ~1,75 horas/semana + reducción del periodo medio de cobro en 15-20 días. Para una empresa con 20 facturas mensuales a €1.000 de media, reducir el periodo de cobro de 40 a 20 días equivale a €40.000 menos en financiación externa del circulante.