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

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.
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.

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

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 Automationscon una tabla llamadaZUGFeRD 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 llamadoDocument. - 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.
El Zap de un vistazo
- New Record (Airtable) se activa con cada nueva fila en
ZUGFeRD Requests. - Filter conditions (Filter by Zapier) continúan solo cuando Status es exactamente
New. - Create ZUGFeRD Invoice (PDF4me) convierte el JSON en un PDF híbrido.
- Update Record (Airtable) escribe el archivo, el estado y un enlace de vuelta a la fila.
- Send Email (Gmail) entrega la factura electrónica al comprador.
Descripción general completa de Zap

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.
- Crea un Zap y selecciona Airtable > New Record.
- Seleccione las
PDF4me Live AutomationsBase PDF4me y las solicitudes de la TableZUGFeRD Requests. - 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.
- Agregar Filter by Zapier > Only continue if...
- Construye una regla: 1. Status / (Texto) Exactly matches /
New. - Pruébalo.
Configuración Filter conditions

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.
- Agregar PDF4me > Create ZUGFeRD Invoice.
- 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.
- File Name:
- 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

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
| Campo | Valor aquí | Lo que controla |
|---|---|---|
| Input Format | JSON | Que proporcione un objeto estructurado en lugar de un XML predefinido o una fila CSV. |
| Output Mode | XmlWithPdf | Devuelve un archivo híbrido. XmlOnly devuelve únicamente el XML de la factura. |
| Zugferd Version | 2+ | 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 Level | EN16931 | El perfil que la factura afirma cumplir y, por lo tanto, qué claves debe proporcionar el JSON. |
| Render Invoice On Pdf | True | Dibuja 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. |
| Archivo | vacío | Dó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.
- Agregar Airtable > Update Record.
- Configurar:
- Base
PDF4me Live Automations, MesaZUGFeRD Requests - Record: el ID del disparador
- Append attachments:
False - Document: la File Url del paso 3
- Status:
Generated
- Base
- Deje vacíos todos los campos alternos para que no se sobrescriba nada.
Update Record

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.
- Agregar Gmail > Send Email.
- Configurar:
- To: la columna Email del desencadenador
- Subject:
Your e-invoicemá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

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
- Publish el Zap.
- Agregue una fila a
ZUGFeRD Requestscon un vendedor, un comprador, un artículo de línea, ambas fechas y StatusNew. - Esperen la encuesta. Los cinco pasos deben estar en verde.
- Abra la fila:
Documentdebe contener un PDF con el nombre del número de factura, yStatusdebe indicarGenerated. - 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.
- Agregue una fila con Status
Generatedy 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
¿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 datos | Lo que mantienes |
|---|---|---|---|
| Plataforma de facturación electrónica frente a este Zap | Finanzas, a través de un portal | Cargas o una integración | Un contrato por documento y una conexión con el mismo. |
| Módulo ERP frente a este Zap | Finanzas, dentro del ERP | El libro mayor del propio ERP | Licencias y una migración para transferir sus datos. |
| Biblioteca para desarrolladores frente a este Zap | Un desarrollador, dentro de una aplicación | Tu base de datos, a través del código | El código, las actualizaciones del esquema y las versiones |
| Este Zap | Cualquiera que pueda editar un Zap | La base Airtable que el equipo ya mantiene | Cinco 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
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.
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.
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.
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.