Casos de uso

Cómo automatizamos el procesamiento de facturas con n8n y OpenAI

Un pipeline real que procesa más de 1.000 facturas al mes sin intervención manual. Arquitectura, decisiones clave y los errores que encontramos en el camino.

Juan Segundo Olveira6 min read

La mayoría de las PyMEs argentinas que procesan facturas lo hacen del mismo modo: alguien abre el mail, descarga el PDF, copia los datos a una planilla, verifica contra el sistema contable, aprueba o marca excepción. Para un volumen chico es tolerable. Para 800 facturas por mes es un trabajo de tiempo completo que nadie quiere hacer.

Este post describe cómo armamos un pipeline que resolvió ese problema para un cliente. No es teoría: está corriendo en producción y procesando facturas reales todos los días. Cambiamos algunos detalles para proteger datos del negocio pero la arquitectura es exactamente la que deployamos.

El punto de partida

El equipo recibía entre 800 y 1.200 facturas por mes, la mayoría en PDF, algunas en imágenes escaneadas, algunas como cuerpo del mail. Venían de 60 proveedores distintos, cada uno con su propio formato. Una persona dedicaba alrededor de 10 horas semanales a descargarlas, extraer los datos, cargarlos al sistema contable y archivar los originales.

El pedido fue claro: automatizar la parte mecánica, dejar al humano solo para las excepciones.

Arquitectura del pipeline

Decidimos armar todo en n8n self-hosted sobre un VPS chico. n8n permite visualizar el flujo entero, mezclar lógica condicional con llamadas a APIs, y no depende de nadie externo corriéndolo.

El flujo, a grandes rasgos, tiene estas etapas:

  1. Trigger de email: un nodo que revisa cada cinco minutos una casilla dedicada (facturas@…) y baja los adjuntos.
  2. Pre-procesamiento: separa PDFs nativos de imágenes. A los PDFs les extrae el texto directamente; a las imágenes les pasa un OCR.
  3. Extracción con LLM: el texto extraído se le pasa a un modelo de OpenAI con un prompt muy específico y un schema de validación. El modelo devuelve JSON estructurado con CUIT, número de factura, fecha, detalle, monto neto, IVA, total.
  4. Validación: un nodo de n8n corre validaciones: que el CUIT exista en el padrón de proveedores conocidos, que la suma de neto más IVA coincida con el total, que la fecha sea razonable.
  5. Ruta feliz: si todo valida, la factura se carga al sistema contable vía API y el PDF original se mueve a una carpeta de Drive organizada por mes.
  6. Ruta de excepción: si algo falla, la factura se marca como "requiere revisión" y aparece en una planilla que el equipo revisa una vez al día.

Por qué OpenAI y no un OCR tradicional

Probamos un par de OCRs dedicados antes de decidir. Lo que nos frenaba no era leer el texto (eso lo hacen bien) sino entender la estructura. Cada proveedor pone los datos en lugares distintos, usa etiquetas diferentes, mezcla campos. Un OCR te devuelve texto plano; después hay que adivinar qué pedazo es el CUIT, qué pedazo es el total, qué pedazo es detalle.

Un LLM con un prompt bueno hace ese mapping sin que uno tenga que escribir reglas por proveedor. Le pasamos el texto completo, le decimos exactamente qué campos queremos y en qué formato, y devuelve JSON. Cuando aparece un proveedor nuevo, no hay que tocar nada.

La parte crítica es obligar al modelo a devolver JSON estructurado. Sin eso, los outputs son inconsistentes y la validación siguiente rompe. Usamos la opción de response format con schema, que fuerza al modelo a respetar la forma que queremos.

Los errores que nos llevaron tiempo

Facturas en el cuerpo del mail. El 15% de los proveedores no adjunta nada, escribe los datos directo en el cuerpo del email. Al principio los ignorábamos y se acumulaban como excepciones. Agregamos una rama que detecta ese caso y pasa el cuerpo del mail al LLM como si fuera texto de una factura.

Fechas ambiguas. Los formatos de fecha en Argentina son un caos. Una factura decía "03/04/26" y podía ser 3 de abril o 4 de marzo. Terminamos agregando al prompt una instrucción explícita: "Usá formato DD/MM/YYYY, el estándar argentino". Mejoró notablemente.

Moneda implícita. Las facturas internas asumen pesos argentinos pero no lo aclaran. Un par de proveedores facturaba en dólares sin ponerlo en grande y lo estábamos cargando como pesos. Agregamos una validación que, si el monto supera cierto umbral, marca la factura para revisión humana.

Llegaba la misma factura dos veces. Cuando un proveedor reenvía o hay confusión con CC, la misma factura puede llegar varias veces. Armamos una tabla de duplicados con CUIT + número de factura + fecha como clave única y la consultamos antes de cargar.

Resultados concretos

Después de dos semanas de ajuste fino el pipeline estaba estable. Los números que registramos los primeros dos meses:

  • Entre el 85% y el 90% de las facturas pasan por la ruta feliz sin intervención humana.
  • El tiempo que el equipo dedica a facturación bajó de 10 horas semanales a menos de 1 hora, casi todo revisando excepciones.
  • Cero errores de carga que hayan llegado al balance (antes había entre 3 y 5 por mes por fatiga humana).
  • Las excepciones se detectan en el momento, no al final del mes cuando es más caro corregirlas.

El costo operativo del pipeline (VPS, llamadas a OpenAI, almacenamiento) es menos del 10% de lo que costaba la parte humana que reemplazó.

Qué no hace el pipeline

Quiero ser claro con lo que queda afuera. El pipeline no decide si una factura se paga; eso sigue requiriendo aprobación humana. No concilia contra órdenes de compra (eso es otro proyecto). No maneja notas de crédito ni ajustes, que todavía van por flujo manual porque son infrecuentes y complejas.

Lo importante es haber separado lo mecánico de lo cognitivo. El equipo sigue decidiendo, pero sobre un 10% del volumen, no sobre el 100%.

Lo que aprendimos para proyectos siguientes

Tres cosas que nos sirvieron y aplicamos ahora en otros clientes:

Empezar por el volumen, no por la complejidad. El ROI más grande está en los procesos que tu equipo hace muchas veces igual, no en los difíciles. Facturas encaja perfecto.

Validar contra reglas duras, no confiar ciegamente en el LLM. El modelo puede alucinar un CUIT o sumar mal; por eso toda salida pasa por validaciones algorítmicas antes de llegar al sistema real.

Diseñar la ruta de excepción primero. Antes de festejar que el 90% funciona, asegurate de que el 10% restante tenga un camino claro. Si no, las excepciones se acumulan hasta anular el ahorro.


Si tu equipo está procesando facturas a mano todos los días, este tipo de pipeline es relativamente rápido de implementar (días, no meses) y el ROI se ve al primer mes. Si querés charlar sobre si aplica a tu caso, contactanos.

Hablemos

Contanos qué proceso te roba el día.

Una conversación de 20 minutos. Te decimos si podemos ayudarte o no — y si no, te orientamos hacia algo que sí lo haga.

  • Respuesta en menos de 24 hs.

    Te contestamos personalmente, no un bot.

  • Sin compromiso, sin contratos.

    La consulta es gratuita y termina cuando vos quieras.

  • Conversación honesta.

    Si tu caso no se resuelve con IA, te lo decimos.

juan@byleonardi.comBuenos Aires, Argentina
Consulta gratuita · 20 min

Al enviar este formulario aceptás que te contacte por email o WhatsApp con la respuesta a tu consulta. No vamos a usar tus datos para nada más.