Eingehende E-Rechnungen aus Gmail in ein flaches Google Sheet parsen (Bulk)
Was es tut — parst eingehende E-Rechnungen aus einer Gmail-Mailbox im Bulk in ein flaches Google Sheet mit ~25 Spalten pro Rechnung, bereit für DATEV-Export. Läuft on demand per manuellem Trigger. Setup ~5 Minuten.

Zwischen Weihnachten und Mitte Januar war ich drei Wochen weg, und die Lieferantenrechnungen für drei meiner Mandanten hatten sich in deren Postfächern gestapelt — grob einhundertachtzig Anhänge. Ich bin freiberufliche Buchhalterin; ich bereite die Daten für DATEV vor. Jedes PDF zu öffnen, Rechnungsnummern, Netto-Beträge und Steuersätze in ein Spreadsheet zu tippen, sind für mich keine zwölf Stunden, sondern eher zwei Tage. Dieser Backlog hat mich angestoßen, das hier zu bauen.
Der Workflow läuft on demand: er durchsucht eine Gmail-Mailbox nach Nachrichten, die einer Query entsprechen, die ich ihm gebe (typischerweise etwas wie has:attachment newer_than:30d), zieht XML- und PDF-Anhänge raus, bittet invoice-api.xhub, was davon wirklich eine E-Rechnung ist zu parsen, flachklopft jedes geparste Resultat in eine breite Zeile und hängt die Zeilen an ein Google Sheet an, das ich pro Mandant führe.
Die Gmail-Query ist der Knopf, an dem ich am meisten drehe. Der Default ist die letzten zwanzig passenden Nachrichten — genug für einen Morgen Backlog. Für ein Quartal hebe ich das Limit, schränke from: auf einen bestimmten Lieferanten ein oder beschränke es auf ein Gmail-Label. Der Manual Trigger ist Absicht: ich starte ihn, schau den Zeilen beim Ankommen zu, wechsel dann ins Sheet.
Was im Sheet landet
Rund 25 Spalten pro Rechnung: Rechnungsnummer, Datumsfelder, Verkäufer und Käufer (Name, USt-ID, Adresse, IBAN), Netto / USt / Brutto, Währung, die ersten fünf Positionen zu einer Summary zusammengefasst, erkanntes Format, Betreff/Absender/Datum der Quell-Mail und ein Verarbeitungs-Zeitstempel. Fehlende Spalten werden beim ersten Lauf automatisch angelegt, also ist der Start mit einem leeren Tab Invoices in Ordnung.
Nicht-Rechnungs-Anhänge — eine Vertrags-PDF, ein gescannter Spesenbeleg — werden übersprungen, statt Müll-Zeilen zu produzieren.
Vom Sheet ab weiter
Für DATEV exportiere ich das Sheet als CSV und nutze den Import-Assistenten. Für Ad-hoc-Checks filtere ich direkt in Sheets. Wenn du die Zeilen lieber in Postgres oder ein ERP bringst, tausch den finalen Google-Sheets-Knoten — alles upstream bleibt gleich.
Setup
Installiere n8n-nodes-invoice-api-xhub, füge die Credential hinzu (kostenlose Sandbox-Keys verfügbar), verbinde Gmail und Google Sheets, paste deine Spreadsheet-ID in Set Config. Keine Aktivierung nötig — führ den Workflow aus, wenn er laufen soll.
So richtest du den Workflow ein
- 1
Community-Node installieren: n8n → Settings → Community Nodes → Install, Package-Name `n8n-nodes-invoice-api-xhub`.
- 2
Template-JSON herunterladen und in n8n über Workflows → Import from File importieren.
- 3
Credentials verbinden: invoice-api.xhub (API-Key, kostenlose Sandbox verfügbar) plus die jeweils benötigten OAuth-Connections (Gmail, Drive, Sheets, …).
- 4
Im Knoten `Set Config` deine Werte eintragen (Folder-IDs, Spreadsheet-IDs, Absender-Mail, USt-ID, etc.).
- 5
Workflow aktivieren oder manuell ausführen — je nach Template.