Ir al contenido principal
Javadex

Automatización de Documentos con n8n: Genera PDFs, Contratos y Facturas [2026]

Actualizado el
18 min

Automatiza la generación de documentos con n8n: PDFs, contratos, facturas e informes. Tutorial completo con workflows listos para usar. Sin programar.

Índice del artículo12 secciones

Automatización de Documentos con n8n: Genera PDFs, Contratos y Facturas [2026]

🎓 ¿Quieres automatizar tu oficina con IA? En La Escuela de IA te enseño a crear automatizaciones como esta que ahorran horas de trabajo. Únete gratis y sígueme en YouTube. Conecta en LinkedIn de Javier Santos.

TL;DR - Resumen Rápido#

  • Automatiza documentos con n8n sin escribir código: contratos, facturas, informes, presupuestos
  • Conecta con Google Docs, Word, plantillas HTML y genera PDFs automáticamente
  • Casos de uso: facturación automática, contratos dinámicos, informes periódicos
  • Ahorra 5-10 horas semanales en tareas repetitivas de documentación
  • Workflows listos para copiar y adaptar a tu negocio

¿Por qué Automatizar la Generación de Documentos?#

La generación manual de documentos es una de las tareas más repetitivas en cualquier negocio:

ProblemaImpacto
Copiar/pegar datos30+ min por documento
Errores humanosDatos incorrectos, typos
InconsistenciaCada documento es diferente
Seguimiento manual¿Se envió? ¿Se firmó?

Con automatización de documentos en n8n puedes:

  • Generar documentos en segundos, no minutos
  • Eliminar errores humanos
  • Mantener consistencia de marca
  • Enviar y hacer seguimiento automático

Tipos de Documentos que Puedes Automatizar#

1. Facturas#

code
1┌─────────────┐ ┌─────────────┐ ┌─────────────┐
2│ Nuevo pedido│────►│ Generar │────►│ Enviar por │
3│ en CRM/Shop │ │ factura PDF │ │ email │
4└─────────────┘ └─────────────┘ └─────────────┘

Trigger: Nuevo pedido en Shopify, WooCommerce, CRM Output: Factura PDF personalizada enviada al cliente

2. Contratos#

code
1┌─────────────┐ ┌─────────────┐ ┌─────────────┐
2│ Formulario │────►│ Rellenar │────►│ Enviar para │
3│ de cliente │ │ contrato │ │ firma │
4└─────────────┘ └─────────────┘ └─────────────┘

Trigger: Formulario web, nuevo cliente en CRM Output: Contrato personalizado listo para firma digital

3. Informes Periódicos#

code
1┌─────────────┐ ┌─────────────┐ ┌─────────────┐
2│ Schedule │────►│ Extraer │────►│ Generar │
3│ (lunes 9am) │ │ datos │ │ informe PDF │
4└─────────────┘ └─────────────┘ └─────────────┘

Trigger: Programado (semanal, mensual) Output: Informe con métricas actualizadas

4. Presupuestos#

code
1┌─────────────┐ ┌─────────────┐ ┌─────────────┐
2│ Solicitud │────►│ Calcular │────►│ Presupuesto │
3│ de precio │ │ precios │ │ PDF │
4└─────────────┘ └─────────────┘ └─────────────┘

Trigger: Formulario de solicitud, email Output: Presupuesto profesional con cálculos automáticos


Nodos de n8n para Documentos#

Nodos Nativos#

NodoUso
Google DocsCrear/editar documentos desde plantillas
Google DriveGuardar y organizar archivos
Microsoft ExcelGenerar hojas de cálculo
HTMLCrear documentos HTML personalizados
Send EmailEnviar documentos adjuntos

Nodos para PDFs#

NodoDescripción
HTTP RequestConectar con servicios como Gotenberg
PDF Generator (community)Convertir HTML a PDF
MergeCombinar múltiples documentos

Integraciones Externas#

  • Gotenberg: Servicio self-hosted para generar PDFs
  • DocuSign/PandaDoc: Firma electrónica
  • Notion: Documentación colaborativa

Tutorial: Automatizar Facturas con n8n#

Vamos a crear un workflow completo para generar facturas automáticamente.

Paso 1: Crear la Plantilla#

Primero, crea una plantilla en Google Docs con marcadores:

code
1FACTURA Nº {{numero_factura}}
2 
3Fecha: {{fecha}}
4 
5CLIENTE:
6{{nombre_cliente}}
7{{direccion_cliente}}
8{{nif_cliente}}
9 
10CONCEPTO CANTIDAD PRECIO TOTAL
11{{lineas_factura}}
12 
13 SUBTOTAL: {{subtotal}}€
14 IVA (21%): {{iva}}€
15 TOTAL: {{total}}€
16 
17Forma de pago: {{forma_pago}}

Paso 2: Configurar el Workflow en n8n#

json
1{
2 "nodes": [
3 {
4 "name": "Webhook - Nuevo Pedido",
5 "type": "n8n-nodes-base.webhook",
6 "parameters": {
7 "path": "nueva-factura",
8 "method": "POST"
9 }
10 },
11 {
12 "name": "Generar Número Factura",
13 "type": "n8n-nodes-base.function",
14 "parameters": {
15 "functionCode": "const fecha = new Date();\nconst numero = `FAC-${fecha.getFullYear()}-${String(items[0].json.id).padStart(5, '0')}`;\nitems[0].json.numero_factura = numero;\nreturn items;"
16 }
17 },
18 {
19 "name": "Calcular Totales",
20 "type": "n8n-nodes-base.function",
21 "parameters": {
22 "functionCode": "const subtotal = items[0].json.lineas.reduce((sum, l) => sum + l.total, 0);\nconst iva = subtotal * 0.21;\nitems[0].json.subtotal = subtotal.toFixed(2);\nitems[0].json.iva = iva.toFixed(2);\nitems[0].json.total = (subtotal + iva).toFixed(2);\nreturn items;"
23 }
24 },
25 {
26 "name": "Google Docs - Copiar Plantilla",
27 "type": "n8n-nodes-base.googleDocs",
28 "parameters": {
29 "operation": "create",
30 "documentId": "ID_DE_TU_PLANTILLA"
31 }
32 },
33 {
34 "name": "Reemplazar Variables",
35 "type": "n8n-nodes-base.googleDocs",
36 "parameters": {
37 "operation": "update",
38 "content": "{{numero_factura}},{{fecha}},{{nombre_cliente}}..."
39 }
40 },
41 {
42 "name": "Exportar a PDF",
43 "type": "n8n-nodes-base.googleDrive",
44 "parameters": {
45 "operation": "download",
46 "fileId": "={{ $node['Google Docs'].json.documentId }}",
47 "options": {
48 "mimeType": "application/pdf"
49 }
50 }
51 },
52 {
53 "name": "Enviar por Email",
54 "type": "n8n-nodes-base.emailSend",
55 "parameters": {
56 "toEmail": "={{ $node['Webhook'].json.email_cliente }}",
57 "subject": "Factura {{ $node['Generar Número'].json.numero_factura }}",
58 "attachments": "={{ $node['Exportar PDF'].binary }}"
59 }
60 }
61 ]
62}

Paso 3: Probar el Workflow#

Envía un POST al webhook:

bash
1curl -X POST https://tu-n8n.com/webhook/nueva-factura \
2 -H "Content-Type: application/json" \
3 -d '{
4 "id": 1234,
5 "nombre_cliente": "Empresa XYZ",
6 "direccion_cliente": "Calle Mayor 1, Madrid",
7 "nif_cliente": "B12345678",
8 "email_cliente": "facturacion@xyz.com",
9 "lineas": [
10 {"concepto": "Servicio A", "cantidad": 1, "precio": 100, "total": 100},
11 {"concepto": "Servicio B", "cantidad": 2, "precio": 50, "total": 100}
12 ],
13 "forma_pago": "Transferencia bancaria"
14 }'


Tutorial: Generar Contratos Dinámicos#

Arquitectura#

code
1┌──────────────┐ ┌──────────────┐ ┌──────────────┐
2│ Typeform/ │────►│ n8n Workflow │────►│ DocuSign/ │
3│ Formulario │ │ │ │ PandaDoc │
4└──────────────┘ └──────────────┘ └──────────────┘
5
6 ┌──────▼──────┐
7 │ Google Docs │
8 │ Plantilla │
9 └─────────────┘

Workflow para Contratos#

javascript
1// Nodo Function: Preparar datos del contrato
2const hoy = new Date();
3const datos = {
4 fecha: hoy.toLocaleDateString('es-ES'),
5 fecha_inicio: items[0].json.fecha_inicio,
6 fecha_fin: items[0].json.fecha_fin,
7 nombre_cliente: items[0].json.nombre,
8 nif: items[0].json.nif,
9 direccion: items[0].json.direccion,
10 servicio: items[0].json.servicio,
11 precio_mensual: items[0].json.precio,
12 duracion_meses: items[0].json.duracion,
13 precio_total: items[0].json.precio * items[0].json.duracion
14};
15 
16// Generar cláusulas dinámicas según el servicio
17if (datos.servicio === 'Premium') {
18 datos.clausulas_extra = `
19 - Soporte 24/7
20 - SLA de 99.9%
21 - Acceso prioritario a nuevas features
22 `;
23} else {
24 datos.clausulas_extra = '- Soporte en horario laboral';
25}
26 
27return [{ json: datos }];


Generar PDFs con Gotenberg (Self-Hosted)#

Si necesitas más control sobre la generación de PDFs, Gotenberg es excelente:

Instalar Gotenberg con Docker#

bash
1docker run -d -p 3000:3000 gotenberg/gotenberg:8

Nodo HTTP Request en n8n#

json
1{
2 "method": "POST",
3 "url": "http://localhost:3000/forms/chromium/convert/html",
4 "sendBody": true,
5 "bodyContentType": "multipartFormData",
6 "bodyParameters": {
7 "files": {
8 "value": "={{ $node['HTML Generator'].json.html }}",
9 "filename": "documento.html"
10 }
11 },
12 "options": {
13 "response": {
14 "response": {
15 "responseFormat": "file"
16 }
17 }
18 }
19}

Ejemplo de HTML para PDF#

html
1<!DOCTYPE html>
2<html>
3<head>
4 <style>
5 body { font-family: Arial; margin: 40px; }
6 .header { border-bottom: 2px solid #333; padding-bottom: 20px; }
7 .logo { max-width: 150px; }
8 table { width: 100%; border-collapse: collapse; margin: 20px 0; }
9 th, td { border: 1px solid #ddd; padding: 10px; text-align: left; }
10 th { background: #f4f4f4; }
11 .total { font-size: 1.2em; font-weight: bold; text-align: right; }
12 </style>
13</head>
14<body>
15 <div class="header">
16 <img src="{{logo_url}}" class="logo" />
17 <h1>FACTURA {{numero}}</h1>
18 </div>
19 
20 <p><strong>Cliente:</strong> {{nombre_cliente}}</p>
21 <p><strong>Fecha:</strong> {{fecha}}</p>
22 
23 <table>
24 <thead>
25 <tr>
26 <th>Concepto</th>
27 <th>Cantidad</th>
28 <th>Precio</th>
29 <th>Total</th>
30 </tr>
31 </thead>
32 <tbody>
33 {{#each lineas}}
34 <tr>
35 <td>{{this.concepto}}</td>
36 <td>{{this.cantidad}}</td>
37 <td>{{this.precio}}€</td>
38 <td>{{this.total}}€</td>
39 </tr>
40 {{/each}}
41 </tbody>
42 </table>
43 
44 <p class="total">TOTAL: {{total}}€</p>
45</body>
46</html>


Casos de Uso por Industria#

Despachos de Abogados#

  • Contratos: Plantillas por tipo de servicio
  • Poderes: Generación automática con datos del cliente
  • Minutas: Resumen de reuniones con IA

Agencias de Marketing#

  • Propuestas: Presupuestos personalizados
  • Informes: Métricas de campañas automáticas
  • Contratos: Según tipo de servicio

Consultorías#

  • Informes de proyecto: Con métricas del CRM
  • Facturas por horas: Conectado a time tracking
  • Propuestas técnicas: Con estimaciones automáticas

Inmobiliarias#

  • Contratos de alquiler: Con datos del inmueble
  • Fichas de propiedad: Generadas desde la base de datos
  • Presupuestos de reforma: Con cálculos automáticos

Integración con ChatGPT para Documentos Inteligentes#

Puedes añadir ChatGPT a tu workflow para:

1. Resumir documentos#

javascript
1// Prompt para resumir
2const prompt = `Resume este documento en 3 bullet points:
3 
4${documento_original}
5 
6Mantén solo la información más importante.`;

2. Generar contenido dinámico#

javascript
1// Prompt para generar sección
2const prompt = `Genera una descripción profesional de 2 párrafos para este servicio:
3 
4Servicio: ${nombre_servicio}
5Precio: ${precio}
6Características: ${features.join(', ')}
7 
8Tono: profesional pero cercano.`;

3. Revisar y corregir#

javascript
1// Prompt para revisar
2const prompt = `Revisa este contrato y sugiere mejoras:
3 
4${contrato}
5 
6Busca: errores gramaticales, cláusulas ambiguas, términos legales incorrectos.`;


Mejores Prácticas#

1. Usa plantillas versionadas#

Guarda las plantillas en Google Drive con nombres versionados:

  • Contrato_v1.0.docx
  • Contrato_v1.1.docx

2. Valida datos antes de generar#

javascript
1// Validación
2if (!datos.nif || datos.nif.length !== 9) {
3 throw new Error('NIF inválido');
4}

3. Implementa logs#

Guarda un registro de cada documento generado para auditoría.

4. Backup de documentos#

Guarda una copia de cada documento generado en una carpeta de archivo.

5. Notifica errores#

Configura alertas para cuando un workflow falla.


Recursos Relacionados#


FAQ#

¿Puedo usar n8n gratis?#

Sí, n8n es open source. Puedes instalarlo gratis en tu servidor con Docker.

¿Qué pasa si Google Docs falla?#

Implementa reintentos automáticos y notificaciones de error en tu workflow.

¿Puedo generar documentos Word?#

Sí, usando Microsoft 365 o convertiendo desde Google Docs.

¿Cuántos documentos puedo generar al día?#

Depende de los límites de API de Google (2.500/día para Docs) y tu infraestructura.


¿Tienes dudas sobre automatización de documentos? Únete a La Escuela de IA o escríbeme en Twitter/X.

¿Te ha resultado útil este artículo?

Cada semana publico análisis prácticos sobre IA, modelos y herramientas. Si quieres seguir leyendo, en el blog tienes más de 400 artículos como este.

Ver más artículosjavi@javadex.es
Javier Santos - Especialista en IA & Machine Learning

Javier Santos

Consultor de IA para empresas. Comparto contenido sobre inteligencia artificial, automatización y desarrollo cada semana.