DE · AT · CHAnleitung

Onlineshop und ERP verbinden: Bestand, Preise, Bestellungen

Aktualisiert:

Kurz gesagt

Legen Sie je Datenart ein führendes System fest, zum Beispiel den Bestand im ERP und die Bestellung im Shop. Verbinden Sie beide über einen eindeutigen Artikelschlüssel, geben Sie dem Shop den verfügbaren statt den physischen Bestand und nehmen Sie jede Bestellung genau einmal ins ERP. Testen Sie das mit einer Testbestellung. Das ist die Vorgehensweise dieses Artikels, keine Vorgabe der Plattformen.

Das Wichtigste

  • Der Shop erhält den verfügbaren Bestand: physischer Bestand minus Reservierungen minus einen Sicherheitsbestand für den Shop; das ist die Rechenregel dieses Artikels.
  • Nach der Shopify-Entwicklerdokumentation (abgerufen am 13. Oktober 2026) ändert die Mutation inventoryAdjustQuantities den Bestand um eine Differenz, die Mutation inventorySetQuantities setzt ihn auf einen Wert, optional mit einem Vergleichswert (compareQuantity): Stimmt der gespeicherte Wert nicht überein, lehnt Shopify die Änderung ab.
  • Dieselbe Dokumentation nennt, dass dieselbe Webhook-Lieferung mehrfach eintreffen kann und über den Header X-Shopify-Webhook-Id erkannt wird; Änderungen der Zustände committed, reserved, damaged, safety_stock und quality_control lösen keine Webhooks aus.
  • Nach der WooCommerce-REST-API-Dokumentation (v3, abgerufen am 13. Oktober 2026) hat ein Produkt die Felder manage_stock, stock_quantity und backorders (no, notify, yes); backorders gilt nur, wenn der Bestand geführt wird.
  • Pflichten, die für den Webshop selbst gelten, sind nicht Gegenstand dieses Artikels.

Ein Onlineshop und ein ERP führen dieselben Artikel und dieselben Mengen. Sobald beide eine eigene Zahl pflegen, laufen sie auseinander. Die Anleitung legt fest, welches System welche Daten bestimmt, wie beide Systeme übereinstimmen und woran Sie einen Fehler bei der Bestandsübergabe erkennen. Die Lage der Kasse im Gesamtbild beschreibt Kasse mit ERP verbinden.

Was Sie vorab brauchen

Schritt für Schritt: Shop und ERP verbinden

Schritt 1: Führendes System je Datenart festlegen

Bestimmen Sie für jede Datenart, welches System sie ändern darf. Die folgende Verteilung ist ein Vorschlag, den Sie an Ihren Betrieb anpassen.

Datenart Führendes System Fließt zum anderen System
Artikelstamm, Bezeichnung ERP Shop
Bestand ERP Shop (verfügbare Menge)
Preis ERP Shop
Bestellung Shop ERP
Kundendaten der Bestellung Shop ERP, als Bestellbezug
Versandstatus ERP Shop

Ergebnis: Jede Datenart hat genau ein führendes System. Ändert jemand einen Preis im Shop, obwohl das ERP führt, überschreibt die nächste Übertragung die Änderung.

Schritt 2: Schlüssel abgleichen

Jede Variante braucht im Shop und im ERP denselben Schlüssel, zum Beispiel die Artikelnummer (SKU) oder die GTIN. Prüfen Sie vor dem Start, dass jede Shop-Variante genau einem ERP-Artikel entspricht. Ergebnis: eine Zuordnungstabelle ohne leere und ohne doppelte Zeilen.

Schritt 3: Shop-Bestand definieren

Rechnen Sie die Menge, die der Shop sieht, im ERP aus: physischer Bestand der Lagerorte, aus denen der Shop liefert, minus Reservierungen, minus ein Sicherheitsbestand für den Shop.

Beispielrechnung mit erfundenen Zahlen: 20 Stück liegen im Hauptlager, 5 sind für Aufträge im Laden reserviert, der Sicherheitsbestand für den Shop beträgt 2 Stück. Der Shop sieht 20 − 5 − 2 = 13 Stück. Ergebnis: eine Rechenregel, die im ERP hinterlegt ist.

Schritt 4: Übertragungsweg wählen

Wählen Sie, wie Änderungen ankommen: ein Ereignis des Shops (Webhook) löst die Übergabe aus, oder das ERP fragt in festen Abständen ab, oder beides. Ein Ereignis (Webhook) meldet eine Änderung sofort, kann aber doppelt eintreffen; ein regelmäßiger Abgleich schützt zusätzlich vor einem verpassten Ereignis. Die Dokumentation von Shopify nennt dazu, dass Änderungen in den Zuständen committed, reserved, damaged, safety_stock und quality_control keine Webhooks auslösen. Ergebnis: ein Plan, welcher Weg welche Daten trägt.

Schritt 5: Bestandsänderungen sinnvoll senden

Es gibt zwei Arten, den Bestand zu übertragen: als Differenz („minus 1“) oder als Wert („13“). Shopify bietet beide: inventoryAdjustQuantities ändert um eine Differenz, inventorySetQuantities setzt einen Wert. Bei WooCommerce legen die Felder manage_stock und stock_quantity den geführten Bestand eines Produkts fest, und backorders steuert, ob Bestellungen über den Bestand hinaus erlaubt sind, wenn der Bestand geführt wird. Ein ungeschützt gesetzter, veralteter Wert überschreibt Bestellungen, die zwischen Berechnung und Übergabe eingegangen sind (siehe das Beispiel unten). Shopify bietet bei inventorySetQuantities einen Vergleichswert an: Nur wenn der gespeicherte Bestand dem erwarteten entspricht, wird gesetzt; die Dokumentation empfiehlt, ihn immer mitzugeben, und warnt vor falschen Mengen, wenn man darauf bei gleichzeitigen Anfragen verzichtet. Eine Differenz geht dagegen verloren, wenn die Übertragung ausfällt. Setzen Sie deshalb Werte nur mit Vergleichsschutz oder Differenzen für laufende Änderungen, und prüfen Sie den Gesamtwert in einem regelmäßigen Abgleich. Melden Sie keine Bewegung zurück, die der Shop schon selbst gebucht hat: Nach der Shopify-Dokumentation mindert Shopify den verfügbaren Bestand, sobald eine Bestellung eingeht; reservieren Sie diese Bestellung im ERP und senden die Menge als Differenz zurück, wird sie doppelt abgezogen. Ergebnis: eine Regel pro Ereignis.

Schritt 6: Bestellungen genau einmal übernehmen

Übernehmen Sie jede Shop-Bestellung mit ihrer Shop-Bestellnummer als Schlüssel ins ERP. Prüfen Sie vor dem Anlegen, ob die Nummer schon vorhanden ist. Shopify weist darauf hin, dass dieselbe Webhook-Lieferung mehrfach eintreffen kann, und empfiehlt, die Verarbeitung idempotent zu halten oder den Header X-Shopify-Webhook-Id zu speichern. Ergebnis: Eine mehrfach gesendete Bestellung erzeugt genau einen Auftrag.

Schritt 7: Testen

Bestellen Sie im Testmodus einen Artikel mit Bestand 1 und prüfen Sie nacheinander: Die Bestellung steht im ERP, die Reservierung mindert den verfügbaren Bestand, der Shop zeigt den neuen Bestand. Bestellen Sie dann zweimal kurz hintereinander. Erwartetes Ergebnis: Der Bestand wird nicht negativ, und kein Auftrag entsteht doppelt.

Ein Beispiel für einen überschriebenen Bestand

Beispielrechnung mit erfundenen Zahlen. Das ERP berechnet den Shop-Bestand 13 und sendet ihn als Wert ohne Vergleichsschutz.

Zeitpunkt Ereignis Bestand im Shop Tatsächlich verfügbar
1 ERP sendet den Wert 13 13 13
2 Kunde bestellt 2 Stück im Shop 11 11
3 ERP sendet einen zuvor berechneten Wert 13 13 11

Zu Zeitpunkt 3 zeigt der Shop 13 Stück, tatsächlich sind 11 verfügbar. Der Wert wurde vor der Bestellung berechnet und danach übertragen. Sendet das ERP nur Differenzen und gibt es bei Zeitpunkt 3 keine Änderung im ERP, bleibt der Shop bei 11. Mit Vergleichswert hätte Shopify das Setzen abgelehnt, weil der gespeicherte Bestand 11 vom erwarteten 13 abweicht.

So prüfen Sie das Ergebnis

Vergleichen Sie (Vorschlag) einmal täglich für zehn Artikel den Shop-Bestand mit dem Wert, den die Rechenregel aus Schritt 3 im ERP ergibt. Zählen Sie außerdem die Bestellungen der letzten 24 Stunden im Shop und im ERP. Beide Zahlen müssen übereinstimmen.

Wenn etwas nicht klappt

Anzeichen Wahrscheinliche Ursache Abhilfe
Der Shop verkauft mehr, als lieferbar ist Shop erhält den physischen statt des verfügbaren Bestands, oder Reservierungen fehlen Rechenregel aus Schritt 3 prüfen
Der Shop-Bestand springt auf einen alten Wert zurück Ein veralteter Wert wurde ohne Vergleichsschutz gesetzt und überschreibt eine zwischenzeitliche Bestellung Vergleichswert mitsenden oder Differenzen senden, Gesamtwert abgleichen
Der Shop-Bestand sinkt je Bestellung doppelt Der Shop hat die Bestellung schon abgezogen, und das ERP meldet sie als Differenz zurück Bewegungen, die der Shop bucht, nicht erneut senden
Eine Bestellung steht zweimal im ERP Dieselbe Lieferung ist doppelt eingetroffen Shop-Bestellnummer vor dem Anlegen prüfen
Eine Bestellung fehlt im ERP Ein Ereignis ist ausgefallen Regelmäßiger Abgleich der Bestellnummern
Eine Variante zeigt falschen Bestand Schlüssel stimmen nicht überein Zuordnungstabelle aus Schritt 2 prüfen
Der verfügbare Bestand im Shop steigt nach einer Stornierung oder Retoure nicht, obwohl die Ware wieder verkaufbar ist Rückbuchung nicht übergeben oder Ware nicht wieder aufgenommen Ereignis für Storno und Retoure ergänzen, Wiederaufnahme im ERP buchen
Preise im Shop weichen vom ERP ab Brutto- und Nettopreise vermischt oder im Shop geändert Führendes System und Preisfeld prüfen

Wann Sie Hilfe holen sollten

Fragen Sie den Anbieter Ihrer Shopsoftware oder Ihres ERP, wenn eine Schnittstelle Ereignisse nicht liefert oder die Dokumentation einen Zustand nicht erklärt. Für Rechtsfragen zum Webshop selbst, etwa zu Preisangaben oder Verbraucherrechten, ist dieser Artikel nicht die Stelle; beginnen Sie mit Widerrufsbutton im Webshop. Mehrere Kanäle zugleich behandelt Omnichannel-Bestand, Marktplätze behandelt Marktplätze anbinden.

Häufige Fragen

Soll der Shop den Bestand selbst führen?

Das hängt davon ab, ob es nur einen Verkaufskanal gibt. Verkaufen Sie auch im Laden oder auf einem Marktplatz, führen Sie den Bestand in einem System und geben ihn an die anderen weiter; sonst laufen zwei Zahlen auseinander. Siehe auch den Artikel zum Omnichannel-Bestand.

Welche Plattform-Schnittstelle brauche ich?

Die Dokumentation Ihrer Shopsoftware nennt die Schnittstelle für Bestand und Bestellungen. Zwei Plattformen führen wir hier als dokumentierte Beispiele auf; ob Ihre Plattform dieselben Felder und Ereignisse bietet, entnehmen Sie ihrer Dokumentation.

Quellen

  1. Apps in inventory management (Inventory states, GraphQL queries and mutations, Webhooks)Shopify, Entwicklerdokumentation · abgerufen am
  2. inventorySetQuantities (GraphQL Admin API, compareQuantity und ignoreCompareQuantity)Shopify, Entwicklerdokumentation · abgerufen am
  3. Ignore duplicates (Webhooks)Shopify, Entwicklerdokumentation · abgerufen am
  4. WooCommerce REST API Documentation (v3), Products und WebhooksWooCommerce, Entwicklerdokumentation · abgerufen am