Saltar al contenido principal

Factura electrónica ZUGFeRD desde Airtable en Zapier: Filtrar filas, generar JSON, enviar el PDF híbrido por correo electrónico

· 24 min de lectura
SEO and Content Writer

PDF4me Create ZUGFeRD Invoice es una acción Zapier que convierte datos de facturas estructuradas en una factura electrónica híbrida PDF/A-3. Tras leer una fila Airtable, transforma un objeto JSON en XML EN 16931 incrustado en un PDF legible, guarda el archivo en el registro y lo envía por correo electrónico al comprador.

Las exigencias de facturación electrónica se presentan como un problema de formato de archivo y se resuelven como un problema de compras: elegir una plataforma, pagar por documento y migrar los datos. Esta solución es razonable a gran escala, pero absurda para un equipo que emite veinte facturas al mes desde una base de datos que ya utiliza. La alternativa no es escribir XML manualmente, sino describir la factura en formato JSON y dejar que otro sistema genere el archivo compatible.

El Zap de un vistazo
1. New Record
Airtable, que realiza sondeos cada 2 minutos. Detecta cada fila que se añade a la tabla.
2. Filter conditions
Filter by Zapier. Continúa solo cuando Status sea exactamente New.
3. Create ZUGFeRD Invoice
PDF4me. Entrada JSON, salida PDF/A-3 con XML EN 16931 incrustado.
4. Update Record
Airtable. Escribe el archivo, el estado y un enlace a la misma fila.
5. Send Email
Gmail. Envía la factura electrónica al comprador en la fila.
La versión corta

Una fila Airtable contiene la factura: vendedor, comprador, un detalle y el total. Al establecer Status en New, Zap la procesa, verifica ese campo y le entrega PDF4me un objeto JSON. El resultado es un PDF/A-3 legible para personas y analizado por máquinas, que se adjunta al registro y se envía al comprador. No requiere suscripción a ninguna plataforma, ni XML, y los datos permanecen siempre en la base de datos.

Preguntas y respuestas basadas en el porqué​

Why describe the invoice as JSON rather than XML?Debido a que la sintaxis de la factura intersectorial es extensa, profundamente anidada y estricta en cuanto a la ubicación de cada código, el objeto JSON expresa lo mismo en mucho menos espacio, con claves que se leen como términos comerciales, y PDF4me genera el XML conforme a partir de él. La parte más propensa a errores es la que no requiere mantenimiento.

Why does the hybrid file matter?Porque una factura tiene dos destinatarios. El sistema del comprador lee el XML incrustado y lo registra sin que nadie introduzca nada; la persona de cuentas por pagar abre el mismo archivo y ve una página. Un solo artefacto satisface a ambos, por esoFeRD Se especificó un sistema híbrido en lugar de solo XML.

Why put a Filter in front of the invoice step?Porque emitir una factura no es una acción reversible. Un Zap que se ejecuta con cada nueva fila terminará por ejecutarse con una fila a medio terminar y enviará al cliente un documento con una línea en blanco. El filtro convierte la emisión en un acto deliberado: una persona establece Status en New y esa es la instrucción.

Why keep the invoice data in Airtable at all?Porque suele ser un subproducto del trabajo ya registrado: el proyecto, el cliente, la tarifa acordada. Trasladarlo a un producto de facturación para cumplir con un formato de archivo implica mantener al mismo cliente en dos sistemas indefinidamente, y el requisito del formato no exige que se haga eso.


Lo que obtendrás​

Entrada: una fila Airtable con el número de factura, las fechas, un bloque de vendedor con un NIF, un bloque de comprador, una línea de artículo y los totales, con Status establecido en New. Salida: un PDF/A-3 ZUGFeRD sobre ese registro y en la bandeja de entrada del comprador.

Airtable base PDF4me Live Automations with the ZUGFeRD Requests table open, showing rows RE-2026-0007 to RE-2026-0011 with Currency EUR, SellerName Muster GmbH at Hauptstrasse 1, 10115 Berlin DE with SellerVATID DE123456789, BuyerName Test Kunde AG at Bahnhofstrasse 5, 80331 Muenchen DE, ItemDescription Consulting, Quantity 10.00, UnitPrice 100.50, VATRate 19.00 and a Status column reading Generated

Una fila por factura. Cada columna se convierte en una clave en el JSON que envía Zap.

Gmail showing the received message with subject Your e-invoice RE-2026-0011, a body greeting Test Kunde AG and stating a total of 1195.95 EUR, and one PDF attachment whose thumbnail shows the rendered German invoice

El comprador ve una factura. Su sistema contable ve el XML que contiene.


Lo que necesitas​

  • A Zapier accounten un plan que permite Zaps de varios pasos.Filter by Zapier Está integrado y cuenta como un paso.
  • Clave API PDF4me. Obtén tu clave API.
  • An Airtable base. La base capturada es PDF4me Live Automations con una tabla llamada ZUGFeRD Requests, que contiene el encabezado de la factura, el bloque del vendedor que incluye un ID de IVA, el bloque del comprador, los campos de la línea de artículo, NetTotal, VATAmount y GrossTotal, una columna Email, un campo Status y un campo adjunto llamado Document.
  • A Gmail accountconectado a Zapier.
  • Your seller details including a VAT ID. Provienen de columnas, por lo que una base puede facturar a varias entidades legales.
Lea primero el artículo completo.
Este es el archivo exacto que generó Zap para la fila RE-2026-0011. Ábralo con un lector para ver la página y con un validador ZUGFeRD para ver el XML incrustado.
Descargar sample-output-zugferd-re-2026-0011.pdf

El Zap de un vistazo​

  1. New Record (Airtable) se activa con cada nueva fila en ZUGFeRD Requests.
  2. Filter conditions (Filter by Zapier) continúan solo cuando Status es exactamente New.
  3. Create ZUGFeRD Invoice (PDF4me) convierte el JSON en un PDF híbrido.
  4. Update Record (Airtable) escribe el archivo, el estado y un enlace de vuelta a la fila.
  5. Send Email (Gmail) entrega la factura electrónica al comprador.

Descripción general completa de Zap​

Zapier run detail showing version 1 and a successful run on Oct 24 2026 at 12:09:01 am, with five steps each marked with a green tick: Airtable New Record on a 2 min schedule reporting Found 1 new Record, Filter by Zapier reporting the run passed the rules, PDF4me Create ZUGFeRD Invoice reporting Sent 1 new Create ZUGFeRD Invoice, Airtable Update Record reporting Sent 1 new Record, and Gmail Send Email reporting Sent 1 new Message

Tiene la misma estructura de cinco pasos que el Swiss QR Zap. Solo difiere el paso PDF4me del medio.


Paso 1: ¿Cómo se activa un Zap desde una nueva fila Airtable?​

Flujo hasta ahora: nada todavía, este es el detonante.

  1. Crea un Zap y selecciona Airtable > New Record.
  2. Seleccione las PDF4me Live Automations Base PDF4me y las solicitudes de la Table ZUGFeRD Requests.
  3. Prueba. Zapier informa que se encontró 1 nuevo registro en Airtable y las columnas estarán disponibles posteriormente.

La insignia de votación indica 2 min, lo cual proviene del plan y no de este paso.


Paso 2: ¿Cómo se evita que Zap facture una fila a medio terminar?​

Flujo hasta ahora: el activador de Airtable.

  1. Agregar Filter by Zapier > Only continue if...
  2. Construye una regla: 1. Status / (Texto) Exactly matches / New.
  3. Pruébalo.

Configuración Filter conditions​

Filter by Zapier step 2 Configure and test panel showing the rule Only continue if 1. Status Text Exactly matches New, and below it a green result box reading Your zap would have continued, with a test record created 2026-10-23 20:38:52 and Matched items listing Status: New

El recuadro verde indica el campo que permitió el paso del registro. El recuadro amarillo equivalente indica el que lo impidió.

Tip.Exactly matches es sensible a mayúsculas y minúsculas y espacios en blanco, por lo quenew yNew Con un espacio al final, ambos fallan silenciosamente en cada fila. Make Status en una selección única en lugar de texto libre, el problema no se produce.


Paso 3: ¿Cómo se convierte la fila en una factura ZUGFeRD?​

Flujo hasta ahora: el disparador y el filtro.

  1. Agregar PDF4me > Create ZUGFeRD Invoice.
  2. Configure las opciones de salida:
    • File Name: ZUGFeRD_ más el Invoice Number más .pdf
    • Input Format: JSON
    • Output Mode: XmlWithPdf
    • Zugferd Version: 2+
    • Conformance Level: EN16931
    • Render Invoice On Pdf: True
    • Deje File vacío a menos que vaya a proporcionar su propia página de membrete.
  3. Pegue el objeto en Invoice Json Data y asigne cada campo Airtable a él:
{
"InvoiceId": "{{Invoice Number}}",
"TypeCode": "380",
"InvoiceType": "RECHNUNG",
"IssueDate": "{{Invoice Date}}T00:00:00",
"DeliveryDate": "{{Invoice Date}}T00:00:00",
"IsTest": false,
"Seller": {
"Name": "{{Seller Name}}",
"VatId": "{{Seller VATID}}",
"Address": {
"Street": "{{Seller Street}}",
"PostalCode": "{{Seller Postal Code}}",
"City": "{{Seller City}}",
"Country": "{{Seller Country}}"
}
},
"Buyer": {
"Name": "{{Buyer Name}}",
"Address": {
"Street": "{{Buyer Street}}",
"PostalCode": "{{Buyer Postal Code}}",
"City": "{{Buyer City}}",
"Country": "{{Buyer Country}}"
}
},
"LineItems": [
{
"ProductName": "{{Item Description}}",
"Quantity": {{Quantity}},
"UnitCode": "C62",
"UnitPrice": {{Unit Price}},
"LineTotal": {{Net Total}}
}
],
"Totals": {
"Currency": "{{Currency}}",
"LineTotal": {{Net Total}},
"TaxBasisTotal": {{Net Total}},
"TaxPercent": {{VAT Rate}},
"TaxTotal": {{VAT Amount}},
"GrandTotal": {{Gross Total}},
"ChargeTotal": 0,
"AllowanceTotal": 0
},
"Payment": {
"Currency": "{{Currency}}",
"PaymentReference": "{{Invoice Number}}",
"DueDate": "{{Due Date}}T00:00:00"
}
}

Hay tres aspectos que merecen atención. El código TypeCode 380 corresponde a una factura comercial y es fijo. UnitCode C62 es el código UN/ECE para "una unidad", que es lo que se utiliza para horas o unidades de servicio. Y PaymentReference en el bloque Payment es el texto que el comprador indica al realizar el pago, que en este caso es simplemente el número de factura.

Create ZUGFeRD Invoice​

PDF4me Create ZUGFeRD Invoice step showing an empty File field, File Name ZUGFeRD_ plus the Invoice Number RE-2026-0011 plus .pdf, Input Format JSON, an Invoice Json Data block with Airtable tokens mapped into every key including Seller Muster GmbH, Buyer Test Kunde AG, Quantity 10, Unit Price 100.5, Net Total 1005, VAT Rate 19, VAT Amount 190.95 and Gross Total 1195.95, then Output Mode XmlWithPdf, Zugferd Version 2 plus, Conformance Level EN16931 and Render Invoice On Pdf set to True

Cada valor es un token Airtable. Tenga en cuenta VAT Amount (190,95) y Gross Total (1195,95), aunque la tabla los muestre como 191 y 1196.

Lo que decide cada configuración​

CampoValor aquíLo que controla
Input FormatJSONQue proporcione un objeto estructurado en lugar de un XML predefinido o una fila CSV.
Output ModeXmlWithPdfDevuelve un archivo híbrido. XmlOnly devuelve únicamente el XML de la factura.
Zugferd Version2+La generación 2.x, que es la que se ajusta a la EN 16931 La versión anterior 1.0 no lo es.
Conformance LevelEN16931El perfil que la factura afirma cumplir y, por lo tanto, qué claves debe proporcionar el JSON.
Render Invoice On PdfTrueDibuja una página legible a partir de los mismos datos. Sin ningún archivo proporcionado, esto es lo que le da al archivo su mitad humana.
ArchivovacíoDónde se colocaría un PDF base con su membrete.

Do not trust the grid for decimals.Airtable muestra VATAmount 191 y GrossTotal 1196 debido a la configuración de precisión del campo numérico, pero los tokens contienen 190.95 y 1195.95, que es lo que aparece en la factura. Amplíe la precisión antes de intentar conciliar una columna con un documento emitido.


Paso 4: ¿Cómo se registra la factura en el libro de contabilidad?​

Flujo hasta ahora: todo hasta el paso PDF4me.

  1. Agregar Airtable > Update Record.
  2. Configurar:
    • Base PDF4me Live Automations, Mesa ZUGFeRD Requests
    • Record: el ID del disparador
    • Append attachments: False
    • Document: la File Url del paso 3
    • Status: Generated
  3. Deje vacíos todos los campos alternos para que no se sobrescriba nada.

Update Record​

Airtable Update Record step showing a yellow warning banner reading Possible Zap loop detected, this step may cause a loop in your Zap because it acts similarly to the trigger event, above Base PDF4me Live Automations, Table ZUGFeRD Requests, Record mapped to the trigger ID, Append attachments set to False, and a list of empty optional fields beginning with Title, InvoiceNumber, InvoiceDate, DueDate and Currency

La advertencia que aparece al principio es la que merece la pena leer. Todo lo que está debajo está vacío a propósito.

"Possible Zap loop detected" is a real warning, not noise.Este paso escribe en la tabla que activa Zap, por lo que su propia actualización podría reactivarlo. En este caso no sucede, ya que la actualización establece Status en Generated y el filtro del paso 2 solo permite New. El filtro y esta actualización son un mismo mecanismo; modifique uno de ellos y vuelva a comprobar ambos.


Paso 5: ¿Cómo se envía la factura electrónica al comprador?​

Flujo hasta ahora: todo hasta la actualización del registro.

  1. Agregar Gmail > Send Email.
  2. Configurar:
    • To: la columna Email del desencadenador
    • Subject: Your e-invoice más el Invoice Number
    • Body type: Html
    • Body: un breve saludo que indique el nombre del comprador, el número de factura y el total.
    • Attachments: la File Url del paso 3

Configuración Send Email​

Gmail Send Email step showing the To field holding a mapped Email value from the Airtable trigger

El File Url que se escribió en Airtable en el paso 4, por lo que el registro y el correo electrónico siempre contienen el mismo archivo.


Ejecuta el Zap y verifica​

  1. Publish el Zap.
  2. Agregue una fila a ZUGFeRD Requests con un vendedor, un comprador, un artículo de línea, ambas fechas y Status New.
  3. Esperen la encuesta. Los cinco pasos deben estar en verde.
  4. Abra la fila: Document debe contener un PDF con el nombre del número de factura, y Status debe indicar Generated.
  5. Abra el archivo adjunto. Debería ver una página de factura legible, y un validador ZUGFeRD debería encontrar el XML EN 16931 dentro del mismo archivo.
  6. Agregue una fila con Status Generated y confirme que el Zap se detiene en el paso 2.

En la ejecución capturada, la versión 1 se completó con éxito el 24 de octubre de 2026 a las 00:09:01, generando el ZUGFeRD_RE-2026-0011.pdf para una factura de Muster GmbH en Berlin a Test Kunde AG en Muenchen, diez unidades de Consulting a 100,50, por un total de 1195,95 EUR.

What did you actually build?Facturación electrónica compatible con la base de datos que ya utilizas, por el precio de cinco pasos de Zap. El sistema del comprador recibe datos estructurados, tu registro conserva el documento generado y un campo Status decide qué se envía.


Variaciones comunes que puedes agregar sin reconstruir​

Facturar más de una línea
LineItems es una matriz. Mantén las líneas en una tabla vinculada, obténlas con un paso Find Records y crea la matriz con Formatter o Code by Zapier antes del paso 3.
Ponlo en tu membrete
El campo Archivo acepta un PDF base. Introdúzcale una página con su marca y Render Invoice On Pdf dibujará la factura en ella en lugar de en una página en blanco.
Mantén el XML separado también.
Algunos compradores desean el archivo estructurado por separado. Ejecute la acción nuevamente con Output Mode configurado en XmlOnly y adjunte ese resultado junto con el PDF.
Cambiar formato por comprador
Agregue una columna de formato y un paso de Rutas. Los compradores del sector público alemán suelen preferir XRechnung en lugar de un archivo híbrido, y esa es una decisión de enrutamiento, no una reconstrucción.

¿Cómo se compara esto con otras formas de emitir una factura electrónica?​

Cada fila describe la alternativa. La última fila es este Zap.

Comparación¿Quién lo dirige?De dónde provienen los datosLo que mantienes
Plataforma de facturación electrónica frente a este ZapFinanzas, a través de un portalCargas o una integraciónUn contrato por documento y una conexión con el mismo.
Módulo ERP frente a este ZapFinanzas, dentro del ERPEl libro mayor del propio ERPLicencias y una migración para transferir sus datos.
Biblioteca para desarrolladores frente a este ZapUn desarrollador, dentro de una aplicaciónTu base de datos, a través del códigoEl código, las actualizaciones del esquema y las versiones
Este ZapCualquiera que pueda editar un ZapLa base Airtable que el equipo ya mantieneCinco pasos y un objeto JSON

También construimosthe identical flow in Make Las diferencias son pequeñas pero reales: Make filtra dentro del disparador de forma gratuita, mientras que Zapier gasta un paso; Make necesita parseNumber alrededor de cada valor monetario, mientras que Zapier los mapea directamente; y Make sube el archivo como bytes, mientras que Zapier le entrega Airtable una URL.


Preguntas frecuentes​

¿Qué es la facturación electrónica?​

La facturación electrónica consiste en emitir una factura como datos estructurados que una máquina puede leer, en lugar de como una imagen de una página. El sistema contable del comprador la procesa y la registra sin que nadie tenga que volver a escribirla, que es precisamente la ventaja: el ahorro lo obtiene el cliente, no usted.

Un número creciente de jurisdicciones ahora lo exige para el comercio empresarial y del sector público.European standard EN 16931 Define el conjunto básico de campos, y formatos como ZUGFeRD lo implementan.

¿Qué es la facturación electrónica?​

Es lo mismo. En la legislación, se suele usar el término "facturación electrónica" y en el marketing de productos, "e-facturación", y ambos se refieren a datos de factura estructurados y legibles por máquina, en lugar de un PDF adjunto a un correo electrónico.

Conviene aclarar qué no se considera facturación electrónica: una factura en papel escaneada no lo es, ni tampoco un PDF común. Sin datos estructurados integrados, el destinatario aún tiene que leerla.

¿Puede Airtable crear facturas?​

No cumplen con la normativa. Airtable almacena los datos y puede presentarlos en una interfaz o en una vista imprimible, pero no puede generar un PDF/A-3 con XML conforme a la norma EN 16931, que es lo que exige la normativa.

La división que utiliza este Zap es la práctica: Airtable es el registro, PDF4me produce el artefacto y este se devuelve al registro como un archivo adjunto.

¿Cómo funciona la automatización de las cuentas por pagar?​

Consta de tres partes: recepción, extracción y contabilización. La recepción centraliza los documentos, la extracción los convierte en campos y la contabilización registra esos campos en el libro mayor, pasando por un proceso de aprobación.

Las facturas electrónicas híbridas eliminan la parte intermedia. Cuando el XML ya está dentro del archivo, la extracción se realiza mediante análisis sintáctico en lugar de reconocimiento, y por eso las normativas siguen impulsando esta opción. Esta aplicación Zap representa la parte de envío de ese sistema.


Solución de problemas​

La acción rechaza la factura JSON

Abre la entrada del paso en la ejecución de Zap y léela como JSON. Una columna vacía Airtable deja una clave vacía, y un valor monetario que terminó entre comillas llega como texto donde se espera un número. Ambos producen un objeto que parece correcto, pero aun así falla la conversión.

Un validador rechaza el nivel de conformidad

Conformance Level determina qué campos requiere el perfil. Si se declara la conformidad con la EN16931 pero el JSON omite claves que el perfil espera, la validación fallará, aunque el archivo se abra correctamente. Proporcione las claves que faltan o utilice un perfil de menor nivel.

La misma factura se emite dos veces.

El paso 4 no establece Status, o establece un valor que el filtro aún permite. Este es también el bucle sobre el que Zapier advierte en el paso 4: el Zap reprocesa su propia salida. Verifique el filtro y la actualización en conjunto.

El comprador dice que no hay XML en el archivo.

Compruebe Output Mode.XmlWithPdf y que los pasos 4 y 5 toman la File Url del paso 3. Adjuntar cualquier otra cosa envía una página que parece correcta pero que no contiene nada que su software pueda leer.


Próximos pasos​

Un mandato parece un problema de formato, pero en realidad es un problema de datos. Si la factura ya existe como filas, la mayor parte del trabajo está hecho.