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

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:

  1. Rechnung mit Kontakt-Referenz (contactId): Vorher wird per GET /v1/contacts?email=… gesucht, ob der Kunde existiert, und er wird bei Bedarf angelegt. Vorteil: saubere Debitorenliste, Umsätze pro Kunde auswertbar.
  2. 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" und grossAmount verwenden. 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_lines je 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:

  1. Ereignis-ID prüfen: Jeder Shopify-Webhook trägt im Header X-Shopify-Event-Id eine ID, die bei Wiederholungen gleich bleibt. Bereits verarbeitete IDs merkt sich der Workflow in einer kleinen Tabelle und ignoriert sie beim zweiten Mal.
  2. 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/create oder 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.

Nächster Schritt
  • 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.