ZUGFeRD E-Rechnung aus einer Airtable Basis: JSON erstellen und Hybrid-PDF per E-Mail Make mit PDF4me

PDF4me Create a ZUGFeRD invoice ist ein Make Modul, das strukturierte Rechnungsdaten in eine hybride PDF/A-3-E-Rechnung umwandelt. Es greift auf eine Airtable Datenbank zu, liest eine Zeile ein, konvertiert sie in EN 16931 XML, gibt eine lesbare und maschinenlesbare Datei zurück und fügt diese dem Datensatz wieder hinzu.
Sucht man nach Software für elektronische Rechnungen, erhält man einen Anbietervergleich: Plattformen, Suiten, Preise pro Dokument. Sucht man hingegen nach der Rechnungsstellungsfunktion Airtable, findet man lange Diskussionen, die dies verneinen. Zwischen diesen beiden Ergebnissen steht ein Team, das bereits mit Airtable arbeitet, nun die Anweisung erhalten hat, maschinenlesbare Rechnungen zu erstellen, und seine Prozesse nicht auf eine andere Rechnungsplattform umstellen möchte, nur um eine Formatvorgabe zu erfüllen. Dieses Szenario ist genau das Richtige für sie.
In einer Airtable Tabelle landet ein Datensatz mit Verkäufer, Käufer, einem Artikel und den Summen. Make erfasst diesen Datensatz, erstellt aus den Spalten ein kompaktes JSON-Objekt, und PDF4me wandelt dieses in eine PDF/A-3 Datei mit eingebettetem EN 16931-XML um. Die Datei wird dem Datensatz als Anhang hinzugefügt und dem Käufer per E-Mail zugesendet. Fünf Module – und niemand muss XML schreiben.
Warum-basierte Fragen und Antworten
Why run this from Airtable rather than an invoicing product?Da Rechnungsdaten üblicherweise ein Nebenprodukt bereits erfasster Arbeitsvorgänge sind, ist eine Datenbank, in der Projekt, Kunde und vereinbarter Stundensatz hinterlegt sind, die verlässlichste Informationsquelle. Die Übertragung dieser Daten in ein Produkt, um ein bestimmtes Dateiformat zu erfüllen, bedeutet, dass derselbe Kunde dauerhaft an zwei Stellen gespeichert wird.
Why describe the invoice as JSON instead of writing the XML?Da die Syntax für branchenübergreifende Rechnungen lang, tief verschachtelt und unnachgiebig hinsichtlich der Position einzelner Codeabschnitte ist, beschreibt das JSON-Objekt dieselben Informationen auf einem Bruchteil des Platzes mit Schlüsseln, die wie Geschäftsbegriffe klingen. PDF4me generiert daraus das konforme XML. Der Teil, der leicht Fehler verursachen kann, ist der, den Sie nicht pflegen.
Why does the hybrid file matter?Weil die Rechnung zwei Adressaten hat. Das Buchhaltungssystem des Käufers liest das eingebettete XML und bucht das Dokument automatisch; der Mitarbeiter in der Kreditorenbuchhaltung öffnet dieselbe Datei und sieht eine Seite. Ein einziges Dokument genügt beiden Zwecken, weshalbFeRD Das deutsche Forum, das hinter dem Format steht, hat es so entwickelt, anstatt nur XML vorzugeben.
Why attach the result back to the record?Denn eine später nicht mehr auffindbare E-Rechnung ist ein Problem, das Sie lediglich aufgeschoben haben. Indem Sie die PDF-Datei im Feld Document der entsprechenden Zeile ablegen, verknüpfen Sie das Dokument mit den Daten, aus denen es entstanden ist – genau das, was Sie benötigen, wenn ein Käufer 18 Monate später einen Betrag beanstandet.
Was Sie erhalten
Eingabe: Eine Airtable Zeile mit Rechnungsnummer, Datum, Verkäufer- und Käuferblock, einer Position und den Summen, Status: Neu. Ausgabe: Eine ZUGFeRD PDF/A-3 Datei, die diesem Datensatz beigefügt ist, und eine E-Mail mit derselben Datei an den Käufer.

Eine Zeile pro Rechnung. Jede Spalte hier wird zu einem Schlüssel im JSON-Objekt, das das Szenario erstellt.

Der Käufer sieht eine normale Rechnung. Seine Software liest den darin enthaltenen XML.
Was Sie benötigen
- A Make accountDieOpen Make Fünf Module zu Standardanwendungen.
- PDF4me API keyDieGet your API key Eine PDF4me-Verbindung deckt das Szenario ab.
- An Airtable baseDie erfasste Basis ist
PDF4me Live Automationsmit einer Tabelle namensZUGFeRD Requests, die den Rechnungskopf, den Verkäuferblock einschließlich einer Umsatzsteuer-Identifikationsnummer, den Käuferblock, die Positionsfelder, die Summen, eine E-Mail-Spalte, ein Status und ein Anhangsfeld namensDocumententhält. - A Gmail accountzur Lieferung, verbunden mit Make.
- Your seller details including a VAT IDSie stammen aus Spalten, sodass eine Basis für mehr als eine juristische Person in Rechnung gestellt werden kann.
Das Szenario im Überblick
- Watch records (Airtable) erfasst neue Zeilen in
ZUGFeRD Requests. - Create a ZUGFeRD invoice (PDF4me)“ wird das JSON in ein hybrides PDF umgewandelt.
- Upload an attachment (Airtable) wird dieser dem
Documentin derselben Zeile hinzugefügt. - Update a record (Airtable) aktualisiert wird, wird das Ergebnis zurückgeschrieben.
- Send an email (Gmail) wird die elektronische Rechnung an den Käufer übermittelt.
Vollständige Szenarioübersicht

Die fünfmodulige Struktur entspricht dem Schweizer QR-Code-Szenario. Lediglich das mittlere PDF4me Modul unterscheidet sich.
Schritt 1: Wie löst man ein Szenario aus einer Airtable Zeile aus?
Bisheriger Ablauf: noch nichts, dies ist der Auslöser.
Eine als „Bereit“ gekennzeichnete Zeile ist die Aufforderung zur Rechnungsstellung.
- Füge Airtable > Watch records als Auslöser hinzu.
- Konfigurieren:
- Base:
PDF4me Live Automations - Tisch:
ZUGFeRD Requests - Trigger field:
Created - Label field:
Title - Limit:
10 - Formel:
{Status}='New'
- Base:
Konfiguration Watch records

Status ist der Schalter. Es wird nichts ausgegeben, bis eine Person eine Zeile auf „Neu“ setzt.
Schritt 2: Wie wandelt man eine Zeile in eine ZUGFeRD Rechnung um?
Bisheriger Ablauf: der Airtable Trigger.
Dieses Modul erstellt die elektronische Rechnung. Die Einstellungen bestimmen das Format, das JSON den Inhalt.
- PDF4me hinzufügen > Create a ZUGFeRD invoice.
- Konfigurieren Sie die Ausgabe:
- File Name:
ZUGFeRD_plus InvoiceNumber plus.pdf - Input Format:
JSON - Output Mode:
XML With PDF - ZUGFeRD Version:
2* - Conformance Level:
EN16931 - Render Invoice on PDF:
Yes
- File Name:
- Fügen Sie das Rechnungsobjekt in das Invoice JSON Data ein und ordnen Sie die Spalten wie folgt zu:
{
"InvoiceId": "{{1.InvoiceNumber}}",
"TypeCode": "380",
"InvoiceType": "RECHNUNG",
"IssueDate": "{{formatDate(1.InvoiceDate; "YYYY-MM-DD")}}T00:00:00",
"DeliveryDate": "{{formatDate(1.InvoiceDate; "YYYY-MM-DD")}}T00:00:00",
"IsTest": false,
"Seller": {
"Name": "{{1.SellerName}}",
"VatId": "{{1.SellerVATID}}",
"Address": {
"Street": "{{1.SellerStreet}}",
"PostalCode": "{{1.SellerPostalCode}}",
"City": "{{1.SellerCity}}",
"Country": "{{1.SellerCountry}}"
}
},
"Buyer": {
"Name": "{{1.BuyerName}}",
"Address": {
"Street": "{{1.BuyerStreet}}",
"PostalCode": "{{1.BuyerPostalCode}}",
"City": "{{1.BuyerCity}}",
"Country": "{{1.BuyerCountry}}"
}
},
"LineItems": [
{
"ProductName": "{{1.ItemDescription}}",
"Quantity": {{1.Quantity}},
"UnitCode": "C62",
"UnitPrice": {{1.UnitPrice}},
"LineTotal": {{parseNumber(1.NetTotal; ".")}}
}
],
"Totals": {
"Currency": "{{1.Currency}}",
"LineTotal": {{parseNumber(1.NetTotal; ".")}},
"TaxBasisTotal": {{parseNumber(1.NetTotal; ".")}},
"TaxPercent": {{1.VATRate}},
"TaxTotal": {{parseNumber(1.VATAmount; ".")}},
"GrandTotal": {{parseNumber(1.GrossTotal; ".")}},
"ChargeTotal": 0,
"AllowanceTotal": 0
},
"Payment": {
"Currency": "{{1.Currency}}",
"PaymentReference": "{{1.InvoiceNumber}}",
"DueDate": "{{formatDate(1.DueDate; "YYYY-MM-DD")}}T00:00:00"
}
}
Drei Teile dieses Objekts verdienen besondere Beachtung. TypeCode 380 ist der Code für eine Handelsrechnung und ist fest vorgegeben; er wird nicht von den Basisdaten abgeleitet. UnitCode C62 ist der UN/ECE-Code für „ein Stück“, was Sie für Stunden oder Leistungseinheiten benötigen. Der Payment am Ende enthält PaymentReference, den Text, den der Käufer bei der Zahlung angibt; in diesem Fall ist es einfach die Rechnungsnummer.
Create a ZUGFeRD invoice Rechnungskonfiguration

Das Feld scrollt im Editor, sodass immer nur ein Teil des Objekts sichtbar ist. Der darüber liegende Block zeigt das gesamte Objekt.
Was jede Einstellung entscheidet
| Feld | Wert hier | Was es kontrolliert |
|---|---|---|
| Input Format | JSON | Dass Sie ein strukturiertes Objekt anstelle von vorgefertigtem XML oder einer CSV-Zeile bereitstellen. |
| Output Mode | XML With PDF | Gibt eine Hybriddatei zurück. Gibt XML Only die Rechnungs-XML-Datei zurück. |
| ZUGFeRD Version | 2* | Die Generation 2.x entspricht der Norm EN 16931 Die ältere Generation 1.0 ist es nicht. |
| Conformance Level | EN16931 | Das Profil, dem die Rechnung angeblich entspricht, und daher die Schlüssel, die das JSON liefern muss |
| Render Invoice on PDF | Yes | Erstellen Sie aus denselben Daten eine lesbare Rechnungsseite. Da keine PDF-Vorlage vorhanden ist, erhält die Datei dadurch ihre lesbare Form. |
| Document | leer | Hier würde normalerweise eine PDF-Datei mit Ihrem Briefkopf eingefügt werden. Lassen Sie dieses Feld leer, und PDF4me erstellt eine einfache Seite. |
Tip.Geld- und Mengenschlüssel müssen als reine Zahlen und nicht als Zeichenketten übermittelt werden, weshalb sie durchlaufenparseNumber Textfelder werden in Anführungszeichen eingeschlossen. Ein zitiertes"1005" wird abgelehnt, wenn ein einfacher1005 wird akzeptiert, und die Fehlermeldung bezieht sich auf das Schema und nicht auf die Anführungszeichen. Beachten Sie das zweite Argument:parseNumber(1.NetTotal; ".") weist darauf hin, dass das Dezimaltrennzeichen ein Punkt sein soll. Lässt man ihn weg, wird ein Gebietsschema Make, das Folgendes schreibt:1005,00 wird die falsche Zahl ausgeben, anstatt dass der Vorgang fehlschlägt, was das schlimmere Ergebnis ist.
Schritt 3: Wie fügen Sie die elektronische Rechnung wieder dem Datensatz hinzu?
Bisheriger Ablauf: der Auslöser plus das PDF4me-Modul.
- Airtable hinzufügen > Upload an attachment.
- Konfigurieren:
- Base und Table: wie in Schritt 1
- Record ID: die
iddes Auslösers - Attachment field:
Document - File: Ausgabe von PDF4me – Create a ZUGFeRD invoice
- File name:
ZUGFeRD_plus InvoiceNumber plus.pdf - Data: die Document von Modul 2
- Content type:
PDF file
Upload an attachment

Content type ist hier PDF file. Das entsprechende Szenario mit einem Schweizer QR-Code verwendet im selben Feld ein PNG-Bild.
Schritt 4: Wie tragen Sie das Ergebnis in die Zeile ein?
Bisheriger Ablauf: Alles bis zum Hochladen von Anhängen.
- Airtable hinzufügen > Update a record.
- Konfigurieren:
- Base und Table: wie in Schritt 1
- Record ID: die
iddes Auslösers - Record: Geben Sie nur die Informationen ein, die ausgegeben werden sollen, normalerweise Status und ein OutputLink
Update a record

Alle Spalten der Tabelle werden hier angezeigt. Der Screenshot zeigt sie leer und das Panel gescrollt, daher wurde Status absichtlich gesetzt.
Tip.Ein zugeordnetes, aber leeres Feld leert die Zelle. In einer Rechnungstabelle bedeutet dies eine fehlende Umsatzsteuer-Identifikationsnummer oder ein verloren gegangenes Fälligkeitsdatum bei einem ansonsten erfolgreichen Lauf. Lassen Sie daher alles unverändert, was Sie nicht bewusst schreiben.
Schritt 5: Wie senden Sie die elektronische Rechnung an den Käufer?
Bisheriger Ablauf: Alles über die Aktualisierung des Datensatzes.
Eine in der Datenbank hinterlegte elektronische Rechnung wurde nicht ausgestellt.
- Gmail hinzufügen > Send an email.
- Konfigurieren:
- To: die Email Spalte aus dem Auslöser
- Subject:
Your e-invoiceplus InvoiceNumber - Body type:
Raw HTML - Content: ein kurzer HTML-Body mit Angabe des Käufers, der Rechnung und des Gesamtbetrags.
- Fügen Sie den Anhang hinzu:
- File: PDF4me – Create a ZUGFeRD invoice
- File name:
ZUGFeRD_plus InvoiceNumber plus.pdf - Data: die Document von Modul 2
Send an email

Der Anhang stammt aus Modul 2, daher wird Airtable für die Datei nie zurückgelesen.
Szenario ausführen und überprüfen
- Save das Szenario und führen Sie es einmal aus.
- Füge der
ZUGFeRD Requestseine Zeile mit Verkäufer, Käufer, einem Artikel, beiden Datumsangaben und StatusNewhinzu. - Alle fünf Module sollten jeweils einen Vorgang melden.
- Öffnen Sie die Zeile: Das Feld
Documentsollte eine PDF-Datei enthalten, die nach der Rechnungsnummer benannt ist. - Öffnen Sie den Anhang. Sie sollten eine lesbare Rechnungsseite sehen, und ein ZUGFeRD Validator sollte EN 16931 XML in derselben Datei finden.
- Prüfen Sie den Posteingang des Käufers auf die Nachricht und deren Anhang.
In dem erfassten Lauf wurde in Zeile RE-2026-0009 eine Rechnung der Muster GmbH in Berlin mit der USt-IdNr. DE123456789 an Test Kunde AG in Muenchen über zehn Einheiten Consulting zu je 100,50 Euro ausgestellt. In der E-Mail wurde ein Gesamtbetrag von 1195,95 EUR ausgewiesen.
Do not trust the grid for decimals.Die Airtable Tabelle zeigt VATAmount 191 und GrossTotal 1196 an, während auf der Rechnung und in der E-Mail 190.95 bzw. 1195.95 vermerkt sind. Es findet keine Neuberechnung statt: TaxTotal und GrandTotal werden direkt aus diesen beiden Spalten übernommen. Die Tabelle zeigt sie lediglich mit der im Zahlenfeld festgelegten Genauigkeit an. Erhöhen Sie diese Genauigkeit, bevor jemand versucht, eine Spalte mit einer Rechnung abzugleichen, da die Zahlen sonst nur inkonsistent erscheinen.
Häufige Variationen, die Sie hinzufügen können, ohne den Aufbau zu wiederholen
Wie sich dies im Vergleich zu anderen Methoden zur Erstellung einer elektronischen Rechnung verhält.
Jede Zeile beschreibt die Alternative. Die letzte Zeile stellt dieses Szenario dar.
| Vergleich | Wer leitet es? | Woher die Daten stammen | Was Sie pflegen |
|---|---|---|---|
| E-Rechnungsplattform im Vergleich zu diesem Szenario | Finanzen über ein Portal | Uploads oder eine Integration | Ein Vertrag pro Dokument und eine Verbindung dazu |
| ERP-Modul im Vergleich zu diesem Szenario | Finanzwesen innerhalb des ERP-Systems | Das Hauptbuch des ERP-Systems | Lizenzen und eine Migration, um Ihre Daten zu erhalten |
| Entwicklerbibliothek vs. dieses Szenario | Ein Entwickler innerhalb einer Anwendung | Ihre Datenbank, durch Code | Der Code, die Schema-Aktualisierungen und die Releases |
| Dieses Szenario | Jeder, der eine Airtable Zeile hinzufügen kann | Die Basis, die das Team bereits hält | Fünf Module und ein JSON-Objekt |
Häufig gestellte Fragen
Was versteht man unter der Automatisierung der Kreditorenbuchhaltung?
Auf der Empfängerseite bedeutet dies, dass eine Rechnung eintrifft, ihre Felder automatisch ausgelesen werden, die Beträge geprüft und das Ergebnis entweder verbucht oder zur Genehmigung weitergeleitet wird. Eine hybride E-Rechnung gewährleistet die Zuverlässigkeit dieses Lesevorgangs, da die Daten eingebettet und nicht aus einem Seitenabbild extrahiert werden.
Dieses Szenario stellt den sendenden Teil dieser Vereinbarung dar. Die Erstellung einer Datei, die das System des Käufers verarbeiten kann, ermöglicht es dessen Kreditorenbuchhaltung, vollautomatisch zu funktionieren.
Kann Airtable Rechnungen erstellen?
Nicht konforme Lösungen. Airtable kann zwar Rechnungsdaten speichern und in einer Benutzeroberfläche oder einer druckbaren Ansicht darstellen, aber es kann kein PDF/A-3-Dokument mit konformem EN 16931 XML erstellen, und genau das wird von einem E-Rechnungs-Mandat gefordert.
Die in diesem Szenario verwendete Aufteilung ist die praktische: Airtable ist der Datensatz, PDF4me erzeugt das Dokument, und das Dokument wird dem Datensatz als Anhang wieder hinzugefügt.
Wie funktioniert die Automatisierung der Kreditorenbuchhaltung?
Der Prozess besteht aus drei Schritten: Erfassung, Extraktion und Buchung. Bei der Erfassung werden Dokumente an einem zentralen Ort gesammelt; die Extraktion wandelt sie in Felder um; die Buchung schreibt diese Felder in das Hauptbuch, üblicherweise mit einer vorgeschalteten Vertrauens- oder Genehmigungsprüfung.
Hybride E-Rechnungen umgehen den mittleren Schritt. Wenn das XML bereits in der Datei enthalten ist, erfolgt die Extraktion durch Parsen statt durch Erkennen, weshalb die Vorgaben immer weiter in diese Richtung gehen.
Was ist Airtable Automatisierung?
Airtable bietet einen eigenen Automatisierungs-Builder für Trigger und Aktionen innerhalb einer Basiskonfiguration, der bereits viele interne Aufgaben abdeckt. Er kann jedoch keine Dokumenten-API aufrufen und eine Datei für ein Anhangsfeld zurückgeben, was in diesem Szenario aber erforderlich ist.
Make ist genau aus diesem Grund daneben platziert. Der Trigger überwacht weiterhin eine Airtable Tabelle, aber im mittleren Teil des Szenarios können Dienste erreicht werden, die von Airtable eigenen Automatisierungen nicht abgedeckt werden.
Fehlerbehebung
Öffnen Sie das Eingabe-Bundle des Moduls im Ausführungsverlauf und lesen Sie es als JSON ein. Eine leere Airtable Spalte führt zu einem leeren Schlüssel, und ein Geldwert, der seine Anführungszeichen beibehalten hat, wird als Text anstelle einer Zahl angezeigt. Beide erzeugen ein Objekt, das zwar korrekt aussieht, aber dennoch die Konvertierung nicht besteht.
Conformance Level bestimmt, welche Felder das Profil benötigt. Die Angabe von EN16931 führt zu einem Validierungsfehler, obwohl die JSON-Datei Schlüssel enthält, die das Profil erwartet, selbst wenn sie sich normal öffnen lässt. Ergänzen Sie die fehlenden Schlüssel oder wählen Sie ein niedrigeres Profil.
Render Invoice on PDF war deaktiviert und es wurde keine PDF-Vorlage bereitgestellt. Daher wurde die XML-Datei ohne Inhalt eingebettet. Die Datei ist weiterhin eine gültige elektronische Rechnung, jedoch ist der lesbare Teil leer.
Stellen Sie sicher, dass Output Mode XML With PDF eingestellt ist, und prüfen Sie anschließend, ob die Module 3 und 5 ihre Daten beide von Modul 2 beziehen. Wenn Sie etwas anderes anhängen, wird eine Seite gesendet, die zwar korrekt aussieht, aber keine Daten enthält, die die Software lesen kann.
Nächste Schritte
Erstellen Sie ZUGFeRD Rechnung in Make
Das Format im Detail erklärt
Holen Sie sich Ihren API-Schlüssel
Ein Mandat kommt üblicherweise aufgrund eines Dateiformatproblems zustande. Im Grunde geht es um die Frage, wo Ihre Rechnungsdaten bereits gespeichert sind und ob sie von irgendeinem Programm gelesen werden können.