Technical

Cómo Automatizar la Extracción de Datos de Facturas con Make, OpenAI y Airtable

Deja de pagarle a humanos para que lean PDFs. Aquí tienes el paso a paso exacto para extraer datos de facturas usando OpenAI y Make, y registrarlos directamente en Airtable.

KytoAI & Automation Firm
·
March 17, 2026
·
4 min read

Key Takeaways

  • 1Configura un webhook en Make.com para vigilar los correos entrantes que traigan archivos adjuntos.
  • 2Convierte los PDFs a imágenes dinámicamente para que OpenAI Vision pueda procesarlos.
  • 3Usa Structured Outputs de OpenAI para obligar al modelo a devolverte un JSON predecible.
  • 4Mapea los datos del JSON anidado directamente en los campos de Airtable de forma automática.
  • 5Construye una ruta de error de respaldo para avisarle a tu equipo cuando falle una extracción.

Pasar datos de un PDF a una base de datos es un desperdicio colosal de inteligencia humana. Un equipo de operaciones en Ciudad de México o Buenos Aires pierde fácilmente 15 horas a la semana solo copiando montos de facturas a un excel.

Las viejas herramientas de OCR están muertas. Se rompen en el segundo en que un proveedor mueve un logo o cambia la tipografía. Modelos como GPT-4o leen documentos desordenados sin problema, pero solo si los obligas a escupir datos estructurados.

Al final de esta guía, vas a armar un flujo automatizado que atrapa las facturas por correo, extrae el proveedor y los precios exactos, y lo registra en Airtable sin tocar el teclado una sola vez.

[@portabletext/react] Unknown block type "mermaidDiagram", specify a component for it in the `components.types` prop

Fase 1: Configura la Base de Datos

Tu base de datos tiene que ser un espejo exacto del esquema JSON que le pides a OpenAI. Si los nombres no coinciden, la automatización se va a romper en el último paso.

  1. Paso 1. Crea la base en Airtable: Arma una nueva tabla llamada "Facturas". Agrega tres campos exactos: "ID de Factura" (Texto de una línea), "Nombre del Proveedor" (Texto de una línea) y "Monto Total" (Moneda).

Fase 2: Arma el Disparador y Convierte el Archivo

Arrancamos el flujo en Make.com. El objetivo es filtrar el ruido, aislar los correos con facturas y convertir los PDFs a un formato que la IA realmente pueda leer.

  1. Paso 2. Configura el vigilante de Gmail: Agrega el módulo "Watch Emails" de Gmail. Selecciona la carpeta "INBOX". En el campo "Filter", escribe exactamente: `has:attachment filename:pdf`. Pon "Mark as read" en Yes.
  2. Paso 3. Itera los adjuntos: Conecta el módulo "Iterate Attachments" de Gmail al vigilante. Mapea el array "Attachments[]" del Paso 2 en este módulo. Esto aísla los datos del archivo PDF.

Los PDFs crudos rompen la API de Vision

El endpoint estándar gpt-4o de OpenAI acepta imágenes, no PDFs. Si mandas un buffer de PDF crudo, te va a tirar un error 400 Bad Request. Conviértelo primero.

  1. Paso 4. Convierte de PDF a PNG: Agrega un módulo "Convert a File" de CloudConvert. Mapea el buffer del archivo desde el Iterador. Configura el Input Format como `pdf` y el Output Format como `png`.

Fase 3: La Extracción Estructurada con OpenAI

Este es el cerebro de la operación. No uses los módulos prefabricados de Make para OpenAI. Vamos a llamar a la API directamente para usar Structured Outputs, lo que nos garantiza una respuesta JSON impecable.

  1. Paso 5. Configura la petición HTTP: Agrega el módulo "HTTP - Make a request" en Make. Pon la URL `https://api.openai.com/v1/chat/completions`. Pon el Method en `POST`. Agrega un header de Authorization con `Bearer TU_API_KEY`.
  2. Paso 6. Arma el cuerpo de la petición: Cambia el tipo de Body a "Raw" y el Content type a "JSON (application/json)". Pega la configuración de abajo, mapeando los datos de la imagen en base64 de CloudConvert en el `image_url`.
openai-payload.json
{
  "model": "gpt-4o-2024-08-06",
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "Extrae los datos de la factura."},
        {
          "type": "image_url",
          "image_url": {"url": "data:image/png;base64,{{1.data}}"}
        }
      ]
    }
  ],
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "name": "invoice_extraction",
      "strict": true,
      "schema": {
        "type": "object",
        "properties": {
          "vendor_name": {"type": "string"},
          "invoice_id": {"type": "string"},
          "total_amount": {"type": "number"}
        },
        "additionalProperties": false,
        "required": ["vendor_name", "invoice_id", "total_amount"]
      }
    }
  }
}

El requisito del esquema estricto

Poner `"strict": true` es tu seguro de vida. Obliga al modelo a conformarse perfectamente a las propiedades que le pediste. Sin llaves faltantes. Sin mapeos rotos más adelante.

Fase 4: Parsea y Sincroniza

La API te devuelve un objeto JSON en forma de texto (string) enterrado dentro del array `choices`. Tienes que parsearlo para convertirlo de nuevo en variables que Airtable pueda entender.

  1. Paso 7. Parsea el resultado: Agrega un módulo "Parse JSON". Mapea el texto `choices[1].message.content` del módulo HTTP en el campo de JSON string.
  2. Paso 8. Crea el registro en Airtable: Agrega el módulo "Create a Record" de Airtable. Selecciona tu base y tabla de "Facturas". Mapea las variables parseadas `vendor_name`, `invoice_id` y `total_amount` directamente en los campos correspondientes de la base de datos.
  3. Paso 9. Configura el manejo de errores: Las máquinas fallan. Haz clic derecho en el módulo de Airtable y selecciona "Add error route". Conecta un módulo "Create a Message" de Slack a tu canal de operaciones, y mapea el enlace del mensaje de Gmail para que un humano lo revise.

¿Procesas más de 500 facturas al mes?

Deja de pelearte con la documentación de las APIs. Diseñamos y desplegamos flujos de IA a la medida para tu empresa en Ciudad de México, Medellín o Buenos Aires en semanas, no en meses.

Agenda una llamada de descubrimiento

Preguntas Frecuentes

¿OpenAI soporta archivos PDF directamente para tareas de visión?

No. La API estándar de Chat Completions necesita imágenes (como PNG o JPEG) para 'ver'. Tienes que convertir esos PDFs a imágenes en tu flujo antes de pasárselos al modelo.

¿Qué pasa si OpenAI se inventa (alucina) el nombre de un campo?

Lo evitamos usando la función de Structured Outputs (salidas estructuradas) de OpenAI. Al poner "strict": true en la llamada a la API, obligas al modelo a respetar al pie de la letra el esquema exacto que definiste.

Automatización con IAMake.comAPI de OpenAIAirtableFlujos Operativos
Compartir artículo

Kyto

AI & Automation Firm

We design and build AI automations and business operating systems. Agency results + Academy sovereignty.

¿Listo para automatizar?

Construyamos Tu Sistema Operativo.

Reserva una demo gratis para ver cómo la automatización con IA puede transformar tus operaciones.

Reservar Demo Gratis