Shopify-Bestellungen automatisch als Lexoffice-Rechnung anlegen
Shopify-Bestellungen automatisch als Rechnung in Lexware Office (Lexoffice) anlegen: Auslöser, Steuern, Versand, Dubletten und Fehlerbehandlung im Überblick.
- Veröffentlicht
- Autor
- Mario Gvozden
- Lesezeit
- 8 Minuten
- Leistung
- Automatisierung
Viele kleinere Shops schreiben Rechnungen noch so: Bestellung in Shopify öffnen, in Lexoffice eine neue Rechnung anlegen, Adresse, Artikel und Versandkosten abtippen, speichern, als PDF verschicken. Bei zehn Bestellungen pro Woche ist das lästig, bei fünfzig pro Tag füllt es schnell einen großen Teil des Arbeitstags – und jede abgetippte Zahl ist eine mögliche Fehlerquelle.
Die Verbindung ist technisch gut machbar. Beide Systeme haben eine dokumentierte API, und in n8n, Make und Zapier gibt es Bausteine für beide. Die eigentliche Arbeit steckt aber nicht im „Rechnung anlegen“, sondern in den Fällen, die im Tutorial nicht vorkommen: Rabatte, Versand, unterschiedliche Steuersätze, doppelt gelieferte Webhooks und eine API, die nur zwei Anfragen pro Sekunde annimmt.
Ein Hinweis vorab: Lexoffice heißt inzwischen Lexware Office, die API läuft unter api.lexware.io. Ältere Anleitungen mit der früheren Domain sind in diesem Punkt veraltet.
Schritt 1: Klären, wann die Rechnung entstehen soll
Bevor irgendetwas gebaut wird, muss eine fachliche Frage beantwortet sein: Welches Ereignis erzeugt die Rechnung?
| Auslöser (Shopify-Webhook) | Passt, wenn … | Achtung |
|---|---|---|
orders/create |
sofort bezahlt wird (Kreditkarte, PayPal) | auch unbezahlte Bestellungen (Vorkasse, Rechnungskauf) lösen aus |
orders/paid |
Sie erst nach Zahlungseingang abrechnen wollen | bei Vorkasse kann das Tage später sein |
orders/fulfilled |
Rechnung mit der Lieferung verschickt wird | Teillieferungen beachten |
Für die meisten Shops mit Sofortzahlung ist orders/paid der robusteste Auslöser. Stimmen Sie die Wahl mit Ihrer Buchhaltung oder Ihrem Steuerberater ab, denn sie bestimmt auch das Rechnungs- und Leistungsdatum.
Schritt 2: Kunde zuordnen oder anlegen
Lexware Office kennt zwei Wege:
- Rechnung mit Kontakt-Referenz (
contactId): Vorher wird perGET /v1/contacts?email=…gesucht, ob der Kunde existiert, und er wird bei Bedarf angelegt. Vorteil: saubere Debitorenliste, Umsätze pro Kunde auswertbar. - Rechnung mit einmaliger Adresse: Name und Anschrift stehen direkt in der Rechnung, ohne eigenen Kontakt. Vorteil: weniger API-Aufrufe, keine Kontakt-Dubletten.
Für B2C-Shops mit vielen Einmalkäufern ist die einmalige Adresse oft die pragmatischere Wahl. Bei B2B-Kunden mit wiederkehrenden Bestellungen lohnt sich die Zuordnung. Wer Kontakte anlegt, sollte über die E-Mail-Adresse suchen, nicht über den Namen – „Müller GmbH“ und „Mueller GmbH“ sind sonst zwei Kunden.
Schritt 3: Positionen, Versand und Steuern abbilden
Hier entstehen die meisten Fehler. Ein Grundgerüst des Request-Bodys an POST /v1/invoices sieht so aus:
{
"voucherDate": "2026-10-20T00:00:00.000+02:00",
"address": {
"name": "Erika Mustermann",
"street": "Hauptstraße 1",
"zip": "82031",
"city": "Grünwald",
"countryCode": "DE"
},
"lineItems": [
{
"type": "custom",
"name": "Artikelname aus Shopify",
"quantity": 2,
"unitName": "Stück",
"unitPrice": {
"currency": "EUR",
"grossAmount": 29.90,
"taxRatePercentage": 19
}
},
{
"type": "custom",
"name": "Versand",
"quantity": 1,
"unitName": "pauschal",
"unitPrice": {
"currency": "EUR",
"grossAmount": 4.90,
"taxRatePercentage": 19
}
}
],
"totalPrice": { "currency": "EUR" },
"taxConditions": { "taxType": "gross" },
"shippingConditions": {
"shippingType": "delivery",
"shippingDate": "2026-10-20T00:00:00.000+02:00"
},
"title": "Rechnung",
"introduction": "Bestellung #1042"
}
Darauf achten wir bei der Zuordnung:
- Brutto oder netto: Shopify-Shops für Endkunden zeigen Preise meist inklusive Steuer. Dann
taxType: "gross"undgrossAmountverwenden. Wer stattdessen netto zurückrechnet, bekommt Rundungsdifferenzen im Cent-Bereich, und die Rechnungssumme weicht vom bezahlten Betrag ab. - Steuersatz je Position: Für Bücher und viele Lebensmittel gilt in der Regel der ermäßigte Satz von 7 %, für die meisten anderen Waren 19 %. Der Satz sollte aus der Bestellung kommen (Shopify liefert
tax_linesje Position), nicht fest im Workflow stehen. - Rabatte: Shopify verteilt Rabattcodes auf Positionen. Am saubersten ist es, den rabattierten Positionspreis zu übernehmen oder den Rabatt als eigene Zeile auszuweisen – Hauptsache, die Summe stimmt mit dem bezahlten Betrag überein.
- Versand: als eigene Position, mit dem Steuersatz, den Ihr Steuerberater dafür vorsieht.
- Lieferungen ins Ausland: Bei Verkäufen an Privatkunden in anderen EU-Ländern (OSS-Verfahren), an Unternehmen im EU-Ausland oder in Drittländer gelten andere Steuerregeln. Diese Fälle sollte der Workflow erkennen und im Zweifel nicht automatisch abrechnen, sondern melden.
Dieser Beitrag ist keine Rechts- oder Steuerberatung. Welche Steuersätze und Rechnungsangaben für Ihren Shop gelten, klären Sie mit Ihrer Steuerberatung.
Schritt 4: Entwurf oder endgültige Rechnung?
Ohne Zusatz legt die API einen Entwurf an. Mit ?finalize=true wird die Rechnung festgeschrieben, bekommt eine Rechnungsnummer und lässt sich danach nicht mehr frei bearbeiten. Korrekturen laufen dann über eine Rechnungskorrektur bzw. Gutschrift.
Unsere Empfehlung: In den ersten Wochen nur Entwürfe anlegen und stichprobenartig prüfen. Erst wenn Summen, Steuern und Adressen über verschiedene Bestellarten hinweg stimmen, auf finalize=true umstellen.
Schritt 5: Doppelte Rechnungen verhindern
Shopify liefert Webhooks nach dem Prinzip „mindestens einmal“ aus. Antwortet Ihr Workflow nicht schnell genug mit einem Erfolgsstatus, wiederholt Shopify die Zustellung – laut Dokumentation mehrfach über mehrere Stunden. Ohne Schutz entsteht dann für eine Bestellung eine zweite Rechnung. Bei einer festgeschriebenen Rechnung ist das unangenehm, weil sie storniert werden muss.
Bewährt haben sich zwei Sicherungen zusammen:
- Ereignis-ID prüfen: Jeder Shopify-Webhook trägt im Header
X-Shopify-Event-Ideine ID, die bei Wiederholungen gleich bleibt. Bereits verarbeitete IDs merkt sich der Workflow in einer kleinen Tabelle und ignoriert sie beim zweiten Mal. - Bestellung markieren: Nach erfolgreicher Anlage schreibt der Workflow die Rechnungs-ID zurück an die Shopify-Bestellung, etwa als Tag oder Metafeld. Vor jeder Anlage wird geprüft, ob diese Markierung schon existiert.
Die zweite Sicherung schützt auch vor dem Fall, dass jemand den Workflow für eine Bestellung manuell erneut startet.
Schritt 6: Fehler abfangen, statt sie zu verschlucken
Folgende Situationen treten im Betrieb auf und brauchen eine Antwort:
- HTTP 429 (zu viele Anfragen): Die Lexware-API erlaubt zwei Anfragen pro Sekunde. Bei einem Schwung Bestellungen nach einer Rabattaktion wird diese Grenze erreicht. Lösung: Wiederholung mit Wartezeit am HTTP-Schritt und Bestellungen nacheinander statt parallel verarbeiten.
- HTTP 400 (ungültige Daten): Typisch sind fehlende Pflichtfelder, ein Ländercode, den die Bestellung nicht hergibt, oder eine leere Straße bei digitalen Produkten. Eine Wiederholung hilft hier nicht. Der Workflow muss melden: Bestellnummer, Fehlermeldung, Link zur Bestellung.
- Abgelaufener oder widerrufener API-Schlüssel: Fällt sofort bei jeder Bestellung auf – wenn jemand die Fehlermeldung bekommt.
- Ausfall eines der beiden Systeme: Wiederholung mit längeren Abständen, danach Meldung.
Wie man das in n8n konkret aufbaut, beschreibt der Beitrag Fehlerbehandlung in n8n. Entscheidend ist: Jede Bestellung endet entweder mit einer Rechnung oder mit einer Meldung an einen Menschen. Ein dritter Ausgang – nichts passiert, niemand merkt es – darf nicht existieren.
Checkliste vor dem Livegang
- Auslöser fachlich abgestimmt (
orders/paid,orders/createoder Lieferung) - Brutto/Netto-Logik passt zur Preisanzeige im Shop
- Steuersatz wird je Position aus der Bestellung übernommen
- Rabatte und Versand ergeben in der Summe den bezahlten Betrag
- Auslandsbestellungen werden erkannt und gesondert behandelt
- Doppelte Webhooks erzeugen keine zweite Rechnung
- Fehler gehen per E-Mail oder Slack an eine benannte Person
- API-Schlüssel liegt im Zugangsdatenspeicher des Tools, nicht im Workflow
- Mindestens zehn Testbestellungen mit verschiedenen Konstellationen geprüft
- Kurze Dokumentation: was der Ablauf tut, wer ihn betreut, wie man ihn anhält
Zugänge: ohne Passwörter
Für den Aufbau braucht es Zugriff auf drei Systeme. In Shopify senden wir eine Mitarbeiter-Zugriffsanfrage, die Sie bestätigen. In Ihr n8n, Make oder Zapier laden Sie unsere Adresse als Benutzer ein. Den Lexware-API-Schlüssel erstellen Sie selbst und hinterlegen ihn direkt im Zugangsdatenspeicher dieses Werkzeugs; der Workflow verwendet ihn dort, zugeschickt bekommen wir ihn nicht – weder per E-Mail noch per Link. Gebaut und getestet wird mit Testbestellungen; der Workflow bleibt deaktiviert, bis Sie ihn abgenommen haben.
Häufige Fragen
Welcher Shopify-Webhook eignet sich als Auslöser für die Rechnung?
Für die meisten Shops mit Sofortzahlung ist orders/paid der robusteste Auslöser, weil er erst nach Zahlungseingang auslöst. orders/create reagiert auch auf unbezahlte Bestellungen, orders/fulfilled passt, wenn die Rechnung mit der Lieferung verschickt wird. Stimmen Sie die Wahl mit Ihrer Buchhaltung oder Steuerberatung ab, denn sie bestimmt auch Rechnungs- und Leistungsdatum.
Wie verhindere ich doppelte Rechnungen in Lexware Office?
Mit zwei Sicherungen zusammen. Der Workflow merkt sich die Ereignis-ID aus dem Header X-Shopify-Event-Id und ignoriert Wiederholungen, und er schreibt nach der Anlage die Rechnungs-ID als Tag oder Metafeld an die Bestellung zurück. Vor jeder neuen Anlage prüft er, ob diese Markierung schon existiert.
Sollte die Rechnung sofort festgeschrieben werden?
In den ersten Wochen besser nicht. Ohne Zusatz legt die API einen Entwurf an, den Sie stichprobenartig prüfen können; mit finalize=true wird die Rechnung festgeschrieben und lässt sich danach nur noch über eine Rechnungskorrektur ändern. Stellen Sie erst um, wenn Summen, Steuern und Adressen über verschiedene Bestellarten hinweg stimmen.
Genau diesen Ablauf – neue Bestellung, Rechnung in Lexware Office, mit Kundenzuordnung, Steuersätzen, Versand und Fehlerbehandlung – setzen wir als Aufgabe auf Ihrem Board um. Sobald wir beginnen, stehen die Abnahmekriterien auf der Karte, etwa welche Testbestellungen korrekte Rechnungsentwürfe erzeugen müssen; geliefert wird 48 Stunden nach Start – gezählt von Montag 8 Uhr bis Freitag 16 Uhr – als deaktivierter Workflow, vorher geprüft und freigegeben von einem Senior-Entwickler. Hat Ihr Shop Besonderheiten wie Auslandsverkäufe nach dem OSS-Verfahren, teilen wir das Vorhaben vor dem Start in mehrere Aufgaben auf. Den typischen Umfang zeigt der Leistungskatalog. Die erste Aufgabe ist kostenlos, eine pro Unternehmen: Erste Aufgabe anlegen. Weitere Abläufe rund um Shop und Buchhaltung – oder eine Anpassung, wenn sich eine Schnittstelle ändert – schreiben Sie im Prozess-Abo als nächste Karte auf; Fragen vorab klären wir im kostenlosen Projekt-Check.
Die erste Aufgabe ist kostenlos – eine pro Unternehmen. Sie legen einen Workspace an, geben Zugang per Einladung und schreiben die Aufgabe auf Ihr Board. Wir liefern sie 48 Stunden nach Start, gezählt Mo 8 bis Fr 16 Uhr: Start am Montag um 10 Uhr – Lieferung am Mittwoch um 10 Uhr. Jede Lieferung prüft und gibt ein Senior-Entwickler frei, bevor sie zu Ihnen geht.
Danach im Prozess-Abo: Sie schreiben Aufgaben aufs Board und bestimmen die Reihenfolge, wir setzen sie um. Prozess-Abo 2,5: 2.500 € im Monat, 1 Aufgabe gleichzeitig in Arbeit, bis zu 4 Aufgaben pro Monat; Prozess-Abo 5: 5.000 € im Monat, 1 Aufgabe gleichzeitig in Arbeit; Prozess-Abo 10: 10.000 € im Monat, 2 Aufgaben parallel in Arbeit. Gezählt werden die Aufgaben, die wir im Abrechnungsmonat beginnen; eine Nachbesserung zählt nicht neu. Nicht genutzte Aufgaben verfallen am Monatsende. Preise zzgl. MwSt., nur für Unternehmen, monatlich kündbar – das Abo beginnt nur, wenn Sie es bestellen.
Fragen vorab oder mehr Aufgaben parallel? Im kostenlosen Projekt-Check (30 Minuten) klären wir das, auch für ein individuelles Abo.