n8n Facturación Automática: Genera y Envía Facturas sin Intervención

N8n facturación automática es uno de los usos más prácticos de n8n. La facturación automática con n8n elimina una de las tareas más tediosas de cualquier negocio: generar y enviar facturas manualmente. Con n8n puedes detectar pagos en Stripe, PayPal o tu plataforma de ventas, generar la factura en PDF y enviarla al cliente en segundos, sin intervención humana.

Por qué automatizar la facturación

  • Una factura manual tarda 5-10 minutos en generarse y enviarse
  • El error humano en datos fiscales puede causar problemas legales
  • Los clientes esperan recibir su factura inmediatamente tras el pago
  • La contabilidad manual es propensa a errores y difícil de auditar

Arquitectura del sistema de facturación automática

Evento de pago (Stripe, PayPal, WooCommerce)
  → Validar datos del cliente y fiscales
  → Generar número de factura correlativo
  → Crear PDF de la factura
  → Enviar por email al cliente
  → Guardar en Google Drive / Dropbox
  → Registrar en sistema contable

Paso 1: Capturar el evento de pago

Con Stripe

Stripe Trigger (invoice.payment_succeeded o payment_intent.succeeded)

Datos disponibles: customer_email, amount_paid, invoice_number, line_items

Con PayPal

Webhook Trigger → validar firma de PayPal

Con WooCommerce

WooCommerce Trigger (order.completed)

Paso 2: Obtener los datos fiscales del cliente

En muchos casos necesitas el NIF/CIF y nombre fiscal del cliente, que pueden no estar en el evento de pago. Búscalos en tu base de datos:

MySQL — SELECT datos_fiscales FROM clientes WHERE email = '{{ $json.customer_email }}'

O en HubSpot, Airtable, etc. según dónde guardes los datos de clientes.

Paso 3: Generar número de factura correlativo

Necesitas llevar un contador de facturas. La forma más sencilla es en Google Sheets:

Google Sheets — Read (lee el último número de factura)
  → Code — incrementa el número
  → Google Sheets — Update (guarda el nuevo número)

Formato recomendado: 2026-0001, 2026-0002, etc.

// Nodo Code: genera el siguiente número
const lastNumber = parseInt($json.ultimo_numero) || 0;
const year = new Date().getFullYear();
const newNumber = lastNumber + 1;
const formatted = `${year}-${String(newNumber).padStart(4, '0')}`;
return [{ numero_factura: formatted, nuevo_contador: newNumber }];

Paso 4: Generar el PDF de la factura

Opción A: HTML a PDF con API externa

Crea el HTML de la factura y conviértelo a PDF con una API como PDF.co, PDFShift o html2pdf.app:

// Nodo Code: genera HTML de la factura
const data = $input.first().json;
const html = `
<!DOCTYPE html>
<html>
<head>
<style>
  body { font-family: Arial, sans-serif; padding: 40px; }
  .header { display: flex; justify-content: space-between; }
  table { width: 100%; border-collapse: collapse; margin-top: 30px; }
  th, td { border: 1px solid #ddd; padding: 10px; text-align: left; }
  th { background: #f4f4f4; }
  .total { font-size: 1.2em; font-weight: bold; }
</style>
</head>
<body>
  <div class="header">
    <div>
      <h1>FACTURA</h1>
      <p><strong>Nº:</strong> ${data.numero_factura}</p>
      <p><strong>Fecha:</strong> ${new Date().toLocaleDateString('es-ES')}</p>
    </div>
    <div>
      <h2>Tu Empresa S.L.</h2>
      <p>CIF: B12345678</p>
      <p>Calle Ejemplo, 123, Madrid</p>
    </div>
  </div>

  <div style="margin-top: 30px;">
    <h3>Facturar a:</h3>
    <p>${data.cliente_nombre}<br>
    NIF: ${data.cliente_nif}<br>
    ${data.cliente_direccion}</p>
  </div>

  <table>
    <tr><th>Descripción</th><th>Cantidad</th><th>Precio</th><th>Total</th></tr>
    <tr>
      <td>${data.descripcion}</td>
      <td>1</td>
      <td>${(data.importe / 1.21).toFixed(2)}€</td>
      <td>${(data.importe / 1.21).toFixed(2)}€</td>
    </tr>
    <tr>
      <td colspan="3">IVA (21%)</td>
      <td>${(data.importe - data.importe / 1.21).toFixed(2)}€</td>
    </tr>
    <tr class="total">
      <td colspan="3"><strong>TOTAL</strong></td>
      <td><strong>${data.importe}€</strong></td>
    </tr>
  </table>
</body>
</html>`;

return [{ html }];

Nodo HTTP Request para convertir a PDF (usando PDFShift como ejemplo):

URL: https://api.pdfshift.io/v3/convert/pdf
Method: POST
Auth: Basic Auth (API key como usuario)
Body JSON: { "source": "{{ $json.html }}", "use_print": true }
Response: File (binary)

Opción B: Usar Factura Directa o FacturaE API

Si necesitas facturas legalmente válidas en España, usa la API de tu software de facturación (Holded, Billin, Factusol) directamente desde n8n con el nodo HTTP Request.

Paso 5: Enviar la factura al cliente

Gmail — Send Email:
  To: {{ $json.customer_email }}
  Subject: Factura {{ $json.numero_factura }} - Tu Empresa
  Body: <p>Estimado cliente,<br>Adjuntamos su factura correspondiente al pago realizado.</p>
  Attachment: el PDF generado (binary)

Paso 6: Guardar en Google Drive

Google Drive — Upload File:
  Folder: /Facturas/{{ $now.toFormat('yyyy') }}/{{ $now.toFormat('MM') }}
  File Name: Factura_{{ $json.numero_factura }}.pdf
  Binary: el PDF

Paso 7: Registrar en la contabilidad

Si usas una hoja de Google Sheets como libro de facturas:

Google Sheets — Append Row:
  Número: {{ $json.numero_factura }}
  Fecha: {{ $now.toFormat('dd/MM/yyyy') }}
  Cliente: {{ $json.cliente_nombre }}
  NIF: {{ $json.cliente_nif }}
  Base: {{ (importe / 1.21).toFixed(2) }}
  IVA: {{ (importe - importe/1.21).toFixed(2) }}
  Total: {{ $json.importe }}
  Estado: "Pagada"

Conclusión

La facturación automática con n8n transforma un proceso que puede tomar 10 minutos por factura en algo que ocurre instantáneamente sin ninguna intervención. La combinación de Stripe (o tu pasarela de pago), n8n para la lógica y una API de generación de PDF te da un sistema robusto y escalable que crece con tu negocio sin añadir trabajo administrativo.