Automatizar Facturas con n8n: Guía Completa para PYMEs que Quieren Dejar de Perder Tiempo
Aprende a automatizar facturas en tu PYME con n8n. Workflows paso a paso para capturar, procesar y contabilizar facturas sin tocar Excel. Gratis y open source.
Automatizar Facturas con n8n: Guía Completa para PYMEs que Quieren Dejar de Perder Tiempo
Cada mes, la misma historia: facturas que llegan por email, otras por WhatsApp, alguna en papel que alguien escanea a medio resolver, y al final todo acaba en una hoja de Excel que nadie quiere mantener. Si gestionas una PYME y la facturación te consume horas que deberías dedicar a vender o producir, este artículo es para ti.
Vamos a montar un sistema para automatizar facturas con n8n desde cero. Sin pagar licencias de software carísimo, sin depender de Zapier ni de sus límites ridículos de ejecuciones, y con total control sobre tus datos. n8n es open source, lo ejecutas en tu propio servidor y no tiene límite de workflows ni de ejecuciones.
Al terminar esta guía tendrás tres workflows funcionales: uno que captura facturas automáticamente desde el email, otro que extrae los datos clave con IA y un tercero que registra todo en tu sistema contable. Si tu PYME procesa más de 20 facturas al mes, esto te va a ahorrar entre 5 y 15 horas mensuales de trabajo manual.
Por qué automatizar la facturación en una PYME
No hace falta que dirijas una empresa de 500 empleados para que la gestión de facturas sea un problema. De hecho, el dolor es proporcionalmente mayor en PYMEs porque normalmente quien lleva las facturas también lleva las compras, los presupuestos y hasta el café de la mañana.
Los números hablan solos:
- El 62% de las PYMEs españolas aún procesan facturas de forma manual o semi-manual, según datos del Observatorio Nacional de Tecnología y Sociedad (ONTSI, 2025).
- Entre 8 y 12 minutos tarda de media procesar una sola factura manualmente: recibirla, verificar datos, introducirla en el sistema y archivarla.
- Un 15-20% de las facturas contienen errores cuando se introducen a mano (duplicados, importes mal tecleados, NIF incorrectos).
- El coste medio de procesar una factura manualmente ronda los 4-6€ por documento. Automatizado, baja a menos de 0,50€.
Si tu empresa maneja 100 facturas al mes, estás quemando entre 400€ y 600€ solo en el proceso de gestión. Y eso sin contar los errores que luego hay que corregir, las facturas que se pierden o las que llegan tarde a contabilidad y desajustan el IVA trimestral.
La factura electrónica obligatoria (Ley Crea y Crece) ya está aquí para empresas que facturen más de 8 millones, y llegará a todas las PYMEs en 2027. Automatizar ahora no es una opción futurista: es prepararse para lo que viene.
Qué necesitas antes de empezar
Antes de lanzarte a montar workflows, asegúrate de que tienes esto:
Herramientas base:
- n8n instalado y funcionando. Si no lo tienes, consulta nuestra guía de instalación de n8n. La opción recomendada es Docker en un servidor propio o un VPS barato (desde 5€/mes en Hetzner o Contabo).
- Una cuenta de email donde recibes facturas de proveedores (Gmail, Outlook, cualquier IMAP).
- Un lugar donde almacenar datos: Google Sheets para empezar rápido, o PostgreSQL/MySQL si quieres algo serio. Más adelante conectaremos con software de contabilidad.
Opcional pero recomendado:
- API de tu software contable: Holded, Contasol, A3, Sage, Debitoor o similar. La mayoría tienen API o permiten importar CSV.
- OpenAI API (o un modelo local con Ollama): lo usaremos para extraer datos de facturas con IA. El coste con GPT-4o mini es irrisorio — menos de 1 céntimo por factura.
- Google Drive o similar: para archivar los PDFs originales.
Arquitectura del sistema: cómo encajan las piezas
El sistema completo tiene tres fases y cada una es un workflow independiente en n8n. Esto no es capricho — separar en workflows modulares te permite depurar, escalar y modificar cada parte sin romper las demás.
┌─────────────────────────────────────────────────────┐
│ FASE 1: CAPTURA │
│ Email/webhook → Detectar factura → Guardar PDF │
└───────────────────────┬─────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ FASE 2: EXTRACCIÓN │
│ PDF → OCR/IA → Datos estructurados (JSON) │
└───────────────────────┬─────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ FASE 3: CONTABILIZACIÓN │
│ JSON → Validación → ERP/Hoja de cálculo + Archivo │
└─────────────────────────────────────────────────────┘
Vamos fase por fase con el detalle de cada workflow.
Fase 1: Captura automática de facturas desde email
Este workflow se ejecuta cada 15 minutos (o en tiempo real con IMAP), busca emails que contengan facturas adjuntas y las descarga automáticamente.
Nodos del workflow
1. Trigger: Email Trigger (IMAP)
Configura el nodo IMAP Read con las credenciales de tu buzón de facturas:
{
"host": "imap.gmail.com",
"port": 993,
"secure": true,
"user": "facturas@tuempresa.com",
"password": "tu-app-password"
}
Si usas Gmail, necesitas generar una contraseña de aplicación desde la configuración de seguridad de tu cuenta de Google. No uses tu contraseña normal — Gmail la bloqueará.
Marca la opción “Download Attachments” y filtra por extensión: .pdf, .xml, .xlsx.
2. Nodo IF: ¿Tiene adjuntos?
No todos los emails traen facturas adjuntas. Algunos proveedores envían un enlace de descarga. Añade un nodo IF que compruebe si $binary tiene contenido:
// Condición: tiene al menos un adjunto
{{ $json.attachments.length > 0 }}
3. Nodo Function: Filtrar adjuntos relevantes
No quieres procesar la firma del email en PNG ni el logo corporativo. Filtra por tipo y tamaño:
const validExtensions = ['.pdf', '.xml', '.xlsx', '.csv'];
const attachments = items[0].json.attachments.filter(att => {
const ext = att.fileName.toLowerCase().slice(att.fileName.lastIndexOf('.'));
return validExtensions.includes(ext) && att.fileSize < 10 * 1024 * 1024;
});
return [{ json: { ...items[0].json, attachments } }];
4. Nodo Google Drive (o S3): Guardar el archivo
Sube el PDF a una carpeta organizada por año y mes. Esto es tu archivo digital y además sirve como input para la fase 2:
/Facturas/2026/07/factura-proveedor-20260703.pdf
Configura el nodo Google Drive con:
- Carpeta destino:
/Facturas/{{ $now.format('yyyy/MM') }} - Nombre archivo:
{{ $json.from }}-{{ $now.format('yyyyMMdd-HHmmss') }}.pdf
5. Nodo Set: Preparar metadatos
Antes de pasar a la fase 2, estructura los datos que ya conoces:
{
"source": "email",
"sender": "{{ $json.from }}",
"subject": "{{ $json.subject }}",
"received_at": "{{ $now.toISO() }}",
"file_url": "{{ $json.webViewLink }}",
"file_id": "{{ $json.id }}",
"status": "pending_extraction"
}
Variante: captura por webhook
Si algún proveedor usa una plataforma de facturación electrónica (Facturae, Peppol, o simplemente un portal web), puedes crear un webhook en n8n que reciba facturas directamente vía API:
POST https://tu-n8n.com/webhook/facturas-entrada
Content-Type: multipart/form-data
Esto es especialmente útil cuando montes la facturación electrónica obligatoria: configuras tu endpoint de recepción y n8n se encarga del resto.
Fase 2: Extracción de datos con IA
Aquí es donde se pone interesante. Tenemos un PDF y necesitamos convertirlo en datos estructurados: NIF del proveedor, fecha, importe base, IVA, total, concepto y número de factura.
Opción A: Extracción con GPT-4o mini (recomendada)
El nodo HTTP Request de n8n puede llamar a la API de OpenAI. GPT-4o mini es absurdamente barato y preciso para este tipo de tareas.
1. Nodo HTTP Request: Enviar PDF a OpenAI
Primero convierte el PDF a texto. Si tu PDF es nativo digital (no escaneado), puedes usar el nodo “Extract from File” de n8n. Si es un escaneo, necesitarás OCR — más adelante te doy alternativas.
{
"method": "POST",
"url": "https://api.openai.com/v1/chat/completions",
"headers": {
"Authorization": "Bearer {{ $credentials.openAiApi.apiKey }}",
"Content-Type": "application/json"
},
"body": {
"model": "gpt-4o-mini",
"messages": [
{
"role": "system",
"content": "Eres un extractor de datos de facturas. Extrae los campos solicitados y devuelve SOLO JSON válido, sin texto adicional."
},
{
"role": "user",
"content": "Extrae estos campos de la siguiente factura:\n- numero_factura\n- fecha_emision (formato YYYY-MM-DD)\n- nif_emisor\n- nombre_emisor\n- nif_receptor\n- base_imponible (número)\n- tipo_iva (porcentaje)\n- cuota_iva (número)\n- total (número)\n- concepto (resumen breve)\n\nFactura:\n{{ $json.text }}"
}
],
"temperature": 0
}
}
Coste: GPT-4o mini procesa una factura típica (500-1.000 tokens) por menos de 0,005€. Si procesas 200 facturas al mes, son menos de 1€.
2. Nodo Function: Parsear respuesta JSON
const response = JSON.parse(items[0].json.choices[0].message.content);
// Validaciones básicas
if (!response.numero_factura || !response.total) {
throw new Error('Extracción incompleta - revisar manualmente');
}
// Asegurar tipos numéricos
response.base_imponible = parseFloat(response.base_imponible);
response.cuota_iva = parseFloat(response.cuota_iva);
response.total = parseFloat(response.total);
response.tipo_iva = parseFloat(response.tipo_iva);
// Validar que base + IVA ≈ total (tolerancia 0.02€)
const calculado = response.base_imponible + response.cuota_iva;
if (Math.abs(calculado - response.total) > 0.02) {
response._warning = `Discrepancia: base(${response.base_imponible}) + iva(${response.cuota_iva}) = ${calculado}, total declarado: ${response.total}`;
}
return [{ json: response }];
Esa validación de base + IVA = total es crítica. Si los números no cuadran, algo se ha extraído mal o la factura tiene un error. En ambos casos, quieres saberlo antes de que llegue a contabilidad.
Opción B: Extracción local con Ollama (sin costes de API)
Si prefieres no depender de OpenAI, puedes usar Ollama con un modelo como Llama 3 o Mistral en tu propio servidor. El nodo es idéntico pero apuntando a tu instancia local:
{
"url": "http://localhost:11434/api/chat",
"body": {
"model": "llama3",
"messages": [...]
}
}
La precisión es algo menor que GPT-4o mini en extracción de datos estructurados, pero para facturas con formato estándar funciona bien. Necesitarás un servidor con al menos 8 GB de RAM.
Opción C: OCR para facturas escaneadas
Si recibes facturas escaneadas (fotos, PDFs de imagen), necesitas OCR antes de enviar el texto a la IA. Dos opciones:
- Google Cloud Vision OCR: precisión excelente, coste de 1,50€ por cada 1.000 páginas.
- Tesseract OCR (open source): gratuito, lo ejecutas en tu servidor con un nodo Execute Command en n8n.
# Nodo Execute Command para Tesseract
tesseract /tmp/factura.pdf /tmp/factura_texto -l spa --oem 1
cat /tmp/factura_texto.txt
En la práctica, cada vez más proveedores envían facturas digitales nativas, así que el OCR lo necesitarás para casos puntuales, no para el flujo principal.
Fase 3: Contabilización y registro
Ya tenemos los datos extraídos en formato JSON limpio. Ahora toca registrarlos donde corresponda.
Opción 1: Google Sheets (para empezar rápido)
Si tu contabilidad vive en hojas de cálculo (no juzgo, el 40% de las PYMEs españolas están igual), el nodo Google Sheets de n8n te permite añadir filas directamente:
{
"operation": "append",
"sheetId": "tu-sheet-id",
"range": "Facturas!A:K",
"values": [
"{{ $json.fecha_emision }}",
"{{ $json.numero_factura }}",
"{{ $json.nombre_emisor }}",
"{{ $json.nif_emisor }}",
"{{ $json.concepto }}",
"{{ $json.base_imponible }}",
"{{ $json.tipo_iva }}%",
"{{ $json.cuota_iva }}",
"{{ $json.total }}",
"{{ $json.file_url }}",
"Automática"
]
}
La columna “Automática” en la última posición te permite distinguir entre facturas procesadas por n8n y las que alguien metió a mano. Útil para auditorías.
Opción 2: PostgreSQL (la opción seria)
Si vas en serio, monta una tabla en PostgreSQL. Es gratis, escala bien y te permite hacer consultas que una hoja de cálculo no soporta:
CREATE TABLE facturas (
id SERIAL PRIMARY KEY,
numero_factura VARCHAR(50) NOT NULL,
fecha_emision DATE NOT NULL,
nif_emisor VARCHAR(15) NOT NULL,
nombre_emisor VARCHAR(200),
nif_receptor VARCHAR(15),
base_imponible DECIMAL(12,2) NOT NULL,
tipo_iva DECIMAL(5,2),
cuota_iva DECIMAL(12,2),
total DECIMAL(12,2) NOT NULL,
concepto TEXT,
archivo_url TEXT,
source VARCHAR(20) DEFAULT 'n8n',
created_at TIMESTAMP DEFAULT NOW(),
estado VARCHAR(20) DEFAULT 'pendiente'
);
-- Índice para buscar por proveedor y fecha
CREATE INDEX idx_facturas_emisor ON facturas(nif_emisor, fecha_emision);
-- Evitar duplicados
CREATE UNIQUE INDEX idx_facturas_unique ON facturas(numero_factura, nif_emisor);
El nodo PostgreSQL de n8n inserta directamente. Y con el índice único evitas que el mismo workflow procese una factura dos veces — un problema sorprendentemente común.
Opción 3: Conexión con software contable
Los principales programas de contabilidad para PYMEs en España tienen API o importación por CSV:
- Holded: API REST completa. n8n puede crear facturas recibidas directamente vía HTTP Request. Es la integración más limpia.
- Contasol / Contaplus: Importación por fichero CSV o XML. El workflow genera el fichero en el formato esperado y lo deja en una carpeta compartida.
- A3 / Sage: API disponible en versiones cloud. Requiere configurar credenciales OAuth.
- Debitoor (SumUp Invoices): API REST bien documentada, fácil de integrar con n8n.
El flujo típico con Holded sería:
{
"method": "POST",
"url": "https://api.holded.com/api/invoicing/v1/documents/bill",
"headers": {
"key": "{{ $credentials.holdedApi.apiKey }}"
},
"body": {
"contact": "{{ $json.nif_emisor }}",
"date": "{{ $json.fecha_emision }}",
"items": [{
"name": "{{ $json.concepto }}",
"units": 1,
"subtotal": {{ $json.base_imponible }},
"tax": {{ $json.tipo_iva }}
}]
}
}
Workflow extra: alertas y control de errores
Un sistema de facturación que falla en silencio es peor que no tener sistema. Añade un workflow de monitorización:
Alerta por factura con discrepancia
// Nodo IF: ¿Hay warning de discrepancia?
{{ $json._warning !== undefined }}
// Rama TRUE → Nodo Telegram/Email
// "⚠️ Factura {{ $json.numero_factura }} de {{ $json.nombre_emisor }}:
// {{ $json._warning }}
// Revisar manualmente."
Resumen diario por Telegram o email
Crea un workflow con trigger CRON a las 9:00 que consulte las facturas procesadas en las últimas 24 horas:
SELECT
COUNT(*) as total_facturas,
SUM(total) as importe_total,
COUNT(CASE WHEN estado = 'error' THEN 1 END) as errores
FROM facturas
WHERE created_at > NOW() - INTERVAL '24 hours';
Y envía un mensaje resumen:
📊 Resumen de facturación (últimas 24h):
- Facturas procesadas: 12
- Importe total: 8.450,30€
- Errores: 1 (revisar)
Esto te da visibilidad total sin tener que abrir ningún panel. Llegas por la mañana, ves el mensaje y sabes exactamente cómo está tu facturación.
Caso real: PYME de distribución con 150 facturas/mes
Para que esto no quede en teoría, veamos un ejemplo concreto. Una distribuidora de material eléctrico que recibe unas 150 facturas mensuales de 40 proveedores distintos.
Antes de automatizar:
- 1 persona dedicaba 3 horas diarias a procesar facturas
- Error medio del 8% en importes (tecleo manual)
- Facturas perdidas: 2-3 al mes (llegaban al email equivocado)
- Tiempo medio desde recepción hasta contabilización: 5 días
Después de automatizar con n8n:
- Procesamiento automático en menos de 2 minutos por factura
- Error reducido al 0,5% (solo facturas escaneadas con mala calidad)
- Cero facturas perdidas (todo pasa por el mismo flujo)
- Tiempo medio de contabilización: 15 minutos (el tiempo que tarda el cron)
- La persona que antes picaba facturas ahora gestiona cobros y tesorería
Coste de la automatización:
- VPS para n8n: 6€/mes (Hetzner CX22)
- OpenAI API: ~0,80€/mes (150 facturas × 0,005€)
- Tiempo de setup inicial: 8 horas
- Total: menos de 7€/mes vs ~600€/mes en tiempo de personal
El ROI es obsceno. En el primer mes ya se amortiza todo el tiempo de configuración.
Errores comunes y cómo evitarlos
Después de montar estos sistemas varias veces, estos son los fallos que más se repiten:
1. No gestionar los duplicados
Si el workflow se ejecuta dos veces sobre el mismo email (reconexión IMAP, reinicio del servidor), procesas la misma factura dos veces. Solución: el índice único en la base de datos y un check previo por número de factura + NIF emisor.
2. Confiar ciegamente en la IA
GPT-4o mini es bueno, pero no perfecto. Un 2-3% de las facturas necesitarán revisión humana, especialmente las que tienen formatos raros, tablas complejas o varias páginas. Implementa siempre la validación base + IVA = total y marca las discrepancias.
3. No archivar el PDF original
El dato extraído está bien para operar, pero Hacienda quiere el documento original. Guarda siempre el PDF en Google Drive, S3 o tu NAS con una estructura de carpetas coherente y un enlace desde el registro de la base de datos.
4. Ignorar la factura electrónica
El formato Facturae (XML) y el estándar europeo Peppol ya son una realidad. Si montas el sistema solo para PDFs, en 2027 tendrás que rehacerlo. Diseña el workflow para aceptar PDF, XML y Facturae desde el principio. El nodo XML de n8n parsea Facturae directamente.
5. No tener plan B
¿Qué pasa si n8n se cae un martes? Que las facturas se acumulan en el email. Configura monitorización (Uptime Kuma, por ejemplo) y un workflow de “catchup” que procese todo lo pendiente cuando el servicio se recupere.
Cumplimiento legal: lo que debes saber
Automatizar no te exime de cumplir la normativa. Estos son los puntos clave en España:
- Ley Crea y Crece: facturación electrónica obligatoria. Primero para empresas > 8M€ de facturación (ya en vigor), después para todas las PYMEs (previsto 2027). Tu sistema debe poder recibir y emitir en formato Facturae/Peppol.
- RGPD: las facturas contienen datos personales (nombres, NIF, direcciones). Si usas OpenAI para la extracción, esos datos salen de tu servidor. Revisa la política de datos de tu proveedor de IA o usa un modelo local con Ollama.
- Conservación de documentos: obligación de guardar facturas durante 4 años (Ley General Tributaria, art. 29). El archivado automático en Google Drive o S3 cumple siempre que garantices la integridad del documento.
- Firma electrónica: las facturas electrónicas en formato Facturae deben ir firmadas. n8n no firma documentos directamente, pero puedes integrar servicios como Viafirma o el propio sistema de firma de la AEAT.
Cómo escalar: de 50 a 5.000 facturas/mes
Si tu PYME crece (o si montas esto como servicio para varias empresas), el sistema escala bien:
- Hasta 500 facturas/mes: un solo servidor con n8n + PostgreSQL. Sin problemas.
- 500-2.000 facturas/mes: separa la base de datos en su propio servidor. Añade un worker de n8n para procesamiento paralelo.
- 2.000+ facturas/mes: n8n en modo queue con Redis, múltiples workers y PostgreSQL con réplica de lectura. También puedes usar n8n Cloud Enterprise si prefieres no gestionar infraestructura.
La arquitectura modular (tres workflows separados) facilita escalar cada fase independientemente. Si la extracción es el cuello de botella, añades más capacidad de IA. Si el problema es la contabilización, optimizas las inserciones en lote.
Próximos pasos: lleva tu facturación al siguiente nivel
Ya tienes las piezas. Ahora te toca montarlas. Mi recomendación:
- Semana 1: Instala n8n y monta la Fase 1 (captura de emails). Solo eso. Que funcione y capture facturas durante una semana sin tocar nada más.
- Semana 2: Añade la Fase 2 (extracción con IA). Prueba con 10-20 facturas reales y ajusta el prompt si es necesario.
- Semana 3: Conecta la Fase 3 con Google Sheets o tu base de datos. Compara los datos extraídos con los que tenías antes.
- Semana 4: Añade alertas, resumen diario y conecta con tu software contable.
En un mes tienes el sistema completo funcionando. Y a partir de ahí, cada factura se procesa sola.
¿Necesitas ayuda para montar la automatización de facturación en tu empresa? En automatizatodo.com diseñamos e implementamos sistemas de automatización para PYMEs industriales y de servicios. Desde workflows sencillos hasta integraciones completas con tu ERP. Contacta con nosotros y te hacemos una valoración sin compromiso.
Sigue leyendo
Cómo Usar n8n como CRM para Automatizar el Seguimiento de Clientes en tu PYME
Aprende a usar n8n como CRM automatizado para tu PYME. Configura seguimiento de clientes, recordatorios y pipelines de ventas sin pagar licencias caras.
Leer artículoCómo Automatizar tu Backend con n8n, Supabase y PostgreSQL: Guía Práctica
Aprende a automatizar tu backend con n8n y Supabase PostgreSQL. 4 workflows prácticos para gestionar datos, webhooks y lógica sin escribir servidor.
Leer artículo