n8n con Stripe: Automatiza Pagos, Facturas y Suscripciones

N8n con Stripe pagos es uno de los usos más prácticos de n8n. n8n con Stripe permite automatizar todo el ciclo de vida de los pagos: desde enviar un email cuando se completa un pago hasta gestionar cancelaciones de suscripción y crear facturas personalizadas. En esta guía aprenderás a conectar n8n con Stripe y los casos de uso más habituales.

Configurar la integración n8n — Stripe

API Key de Stripe

  1. En el Dashboard de Stripe, ve a DevelopersAPI Keys
  2. Copia la Secret Key (empieza por sk_live_... en producción o sk_test_... para pruebas)
  3. En n8n: CredentialsStripe API → pega la clave

Importante: Siempre empieza con la clave de test (sk_test_...) para probar los workflows sin hacer cargos reales.

Configurar webhooks de Stripe

Los webhooks son esenciales para reaccionar a eventos de Stripe en tiempo real:

  1. En Stripe: DevelopersWebhooksAdd endpoint
  2. Endpoint URL: la URL de tu nodo Webhook de n8n
  3. Events: selecciona los que necesitas (ej: payment_intent.succeeded, customer.subscription.deleted)
  4. Copia el Webhook Signing Secret (whsec_...)

En n8n, añade el nodo Stripe Trigger que verifica la firma del webhook automáticamente.

Caso de uso 1: Email de bienvenida tras el pago

Cuando un cliente completa un pago, envía un email de bienvenida con instrucciones:

Stripe Trigger (payment_intent.succeeded)
  → Gmail — Send Email (bienvenida con instrucciones)
  → HubSpot — Create Contact (si no existe)
  → Slack — Notificar al equipo (#ventas)

Configuración del Stripe Trigger:

  • Event: payment_intent.succeeded

Email de bienvenida con datos del cliente:

Asunto: ¡Gracias por tu compra, {{ $json.data.object.shipping.name }}!

Hola {{ $json.data.object.shipping.name }},

Tu pago de {{ ($json.data.object.amount / 100).toFixed(2) }}€ ha sido confirmado.
Número de pedido: {{ $json.data.object.id }}

[Instrucciones de acceso o entrega]

Caso de uso 2: Gestión de suscripciones canceladas

Cuando un cliente cancela su suscripción, actualiza su estado en CRM y envía un email de retención:

Stripe Trigger (customer.subscription.deleted)
  → HubSpot — Update Contact (propiedad "Estado" = "Cancelado")
  → Delay (2 horas)
  → Gmail — Email de retención con oferta
  → Slack — Alerta al equipo de Customer Success

Email de retención:

Asunto: Lamentamos que te vayas, [nombre]

Hemos procesado tu cancelación, pero queremos darte una oportunidad más.

Como cliente valioso, te ofrecemos un 30% de descuento durante 3 meses
si reactivas tu cuenta en las próximas 48 horas.

[Enlace de reactivación con cupón]

Caso de uso 3: Factura personalizada en PDF

Stripe genera facturas pero a veces necesitas un formato personalizado con tu logo y datos fiscales:

Stripe Trigger (invoice.payment_succeeded)
  → HTTP Request (obtener detalles del cliente desde Stripe)
  → Code (generar HTML de la factura)
  → HTTP Request (PDF.co o similar para convertir HTML a PDF)
  → Gmail — Enviar factura al cliente
  → Google Drive — Guardar copia

Estructura del HTML de factura:

// Nodo Code: genera el HTML
const invoice = $input.first().json.data.object;
const html = `
<html>
<body>
  <h1>FACTURA #${invoice.number}</h1>
  <p>Fecha: ${new Date(invoice.created * 1000).toLocaleDateString('es-ES')}</p>
  <p>Cliente: ${invoice.customer_email}</p>
  <table>
    ${invoice.lines.data.map(line => `
      <tr>
        <td>${line.description}</td>
        <td>${(line.amount / 100).toFixed(2)}€</td>
      </tr>
    `).join('')}
  </table>
  <p><strong>Total: ${(invoice.amount_paid / 100).toFixed(2)}€</strong></p>
</body>
</html>`;
return [{ html }];

Caso de uso 4: Reporte semanal de ingresos

Cada lunes, genera un resumen de los ingresos de la semana anterior:

Schedule Trigger (lunes 8:00) →

  1. Stripe — List Charges (filtrado por fecha de la última semana)
  2. Code — suma y agrupa los datos
  3. Slack o Gmail — envía el resumen al equipo directivo

Nodo Code para el resumen:

const charges = $input.all();
const total = charges.reduce((sum, c) => sum + c.json.amount, 0) / 100;
const count = charges.length;
const avgTicket = count > 0 ? (total / count).toFixed(2) : 0;

return [{
  total_ingresos: total.toFixed(2),
  numero_pagos: count,
  ticket_medio: avgTicket
}];

Caso de uso 5: Reintento de pagos fallidos

Cuando un pago falla, intenta cobrarlo de nuevo y notifica al cliente:

Stripe Trigger (payment_intent.payment_failed)
  → Gmail — Aviso al cliente (actualiza método de pago)
  → Delay (24 horas)
  → Stripe — Confirm PaymentIntent (intento de reintento)
  → IF (éxito) → Email de confirmación
  → IF (fallo) → Slack — Alerta para gestión manual

Datos útiles de los webhooks de Stripe

Los eventos de Stripe tienen una estructura consistente:

  • $json.data.object — el objeto afectado (pago, suscripción, etc.)
  • $json.data.object.customer — ID del cliente de Stripe
  • $json.data.object.amount — importe en centavos (dividir entre 100 para euros)
  • $json.data.object.metadata — metadatos personalizados que puedas haber añadido

Conclusión

La integración n8n con Stripe automatiza el proceso post-pago completo: emails de bienvenida, facturas personalizadas, gestión de cancelaciones y reportes financieros. Al conectar Stripe con tu CRM, herramientas de comunicación y sistemas internos a través de n8n, cada evento de pago desencadena las acciones correctas sin intervención manual.