Shopify-Bestellungen in Echtzeit zu Google Sheets synchronisieren (kein Zapier)
Bau eine Echtzeit-Synchronisation von Shopify nach Google Sheets mit signiertem Webhook, kleinem Node.js-Empfänger und Google Sheets API. Jeder Schritt gegen die Shopify- und Google-Dokumentation vom September 2026 geprüft.
Zapier rechnet jede Bestellung als Task ab, die Monatskosten wachsen also mit deinem Shop. Ein No-Code-Zap gibt dir keine Kontrolle über Signaturprüfung, Duplikate oder historische Bestellungen.
Eine direkte Webhook-Integration: Shopify signiert jede Zustellung, ein kleiner Node.js-Empfänger prüft sie und schreibt die Bestellung über die Sheets API nach Google Sheets. Keine Gebühren pro Task und volle Kontrolle über Retries und Datenschutz.
Warum nicht Zapier und warum nicht Apps Script
Jeder Shopify-Shop-Besitzer stößt auf dieselbe Wand: du brauchst Bestelldaten in Google Sheets für Inventar, Fulfillment oder Reporting. Zapier funktioniert, aber jede Bestellung verbraucht mindestens einen Task und mehrstufige Zaps verbrauchen mehrere. Laut der Zapier-Preisseite enthält der Free-Plan 100 Tasks pro Monat und der Professional-Plan beginnt bei 19,99 USD pro Monat bei jährlicher Zahlung (29,99 USD bei monatlicher Zahlung) für 750 Tasks, höhere Task-Stufen kosten entsprechend mehr. Die Rechnung wächst mit deinem Shop und du hast trotzdem keine Kontrolle über Signaturprüfung, Duplikate oder historische Bestellungen.
Viele Anleitungen empfehlen eine Google-Apps-Script-Web-App als Webhook-Empfänger. Das funktioniert mit Shopify nicht zuverlässig: Apps Script beantwortet jede Anfrage mit einer Weiterleitung auf script.googleusercontent.com und erwartet, dass der Client ihr folgt (Google-Apps-Script-Doku), während Shopify jede Antwort außerhalb des 200er-Bereichs, auch 3xx, als fehlgeschlagene Zustellung wertet (Shopify-Webhook-Doku). Dazu kommt, dass das doPost-Event-Objekt von Apps Script nur Query-String, Parameter und Body enthält, nicht die Request-Header (Apps Script Web-Apps), die HMAC-Signatur lässt sich also gar nicht prüfen.
Diese Webhook-basierte Integration ist das Setup, das wir in unserem Integration-Service nutzen. Anders als fragile Zapier-Workflows sind native Shopify-Webhooks von Shopify dokumentiert und versioniert, du entscheidest also selbst, wann dich ein Versionswechsel betrifft.
Die Architektur: Shopify-Webhook, Node.js-Empfänger, Google Sheets
Hier ist das produktionsreife Setup, das wir in unseren Automatisierungs-Implementierungen nutzen:
Flow:
- Eine neue Bestellung entsteht in Shopify und Shopify sendet einen signierten Webhook an deinen Empfänger
- Der Empfänger prüft den Header
X-Shopify-Hmac-Sha256gegen den rohen Body - Der Empfänger prüft, ob die Order-ID schon im Sheet steht (Idempotenz)
- Der Empfänger hängt über die Google Sheets API eine Zeile an
- Der Empfänger antwortet innerhalb des Fünf-Sekunden-Fensters von Shopify mit
200 OK
Was du brauchst: einen Shopify-Shop, ein Google-Konto mit einem Google-Cloud-Projekt und irgendeinen Host, der deinem Node.js-Empfänger eine öffentliche HTTPS-URL gibt (eigener Server, Cloud Run, eine Container-Plattform). Shopify liefert Webhooks nur an HTTPS-Endpunkte.
Retries: Shopify wiederholt eine fehlgeschlagene Zustellung 8 Mal über 4 Stunden und löscht das Abonnement nach wiederholten Fehlern (Shopify-Webhook-Doku).
API-Version: Shopify veröffentlicht alle drei Monate eine neue Version und unterstützt jede stabile Version mindestens 12 Monate. Im September 2026 ist 2026-07 die neueste stabile Version, 2026-10 ist der Release Candidate (Shopify-API-Versionierung).
Schritt 1: Google Sheet und Service-Konto erstellen
Zuerst dein Order-Tracking-Sheet erstellen:
- Öffne Google Sheets und erstelle eine neue Tabelle
- Nenne das erste Tabellenblatt “Shopify Bestellungen”
- Füge diese Spaltenüberschriften in Zeile 1 ein:
Order ID | Bestellnummer | Erstellt am | Kundenname | Kunden-E-Mail | Line Items | Zwischensumme | Steuer | Versand | Gesamt | Zahlungsstatus | Fulfillment-Status | Tags | Notizen
- Kopiere die Spreadsheet-ID aus der URL (die lange Zeichenkette zwischen
/d/und/edit)
Der Empfänger schreibt über die Sheets API mit einem Service-Konto, braucht also keinen Browser-Login (Google-Service-Konto einrichten):
- Öffne in der Google-Cloud-Konsole IAM & Admin und dann Service Accounts, klicke Create service account, vergib einen Namen und klicke Done
- Öffne das Service-Konto, klicke den Tab Keys, dann Add key und Create new key, wähle JSON und lade die Datei herunter. Google gibt dir diese Datei nur einmal
- Aktiviere die Google Sheets API für das Projekt unter APIs & Services
- Teile die Tabelle mit der E-Mail-Adresse des Service-Kontos als Bearbeiter, genau wie mit einer Person
Pro-Tipp: Spaltenreihenfolge konsistent halten. Der Empfänger schreibt Daten in genau dieser Reihenfolge.
Schritt 2: Webhook-Empfänger bauen
Lege ein kleines Node.js-Projekt mit express und googleapis an. Der Empfänger liest den rohen Body, weil der HMAC über genau die Bytes berechnet wird, die Shopify gesendet hat, vergleicht ihn in konstanter Zeit und parst erst danach das JSON. Shopify berechnet einen base64-kodierten HMAC-SHA256 über den rohen Body mit dem Webhook-Secret (Shopify-Webhook-Doku).
import crypto from 'node:crypto';
import express from 'express';
import { google } from 'googleapis';
const SHOPIFY_WEBHOOK_SECRET = process.env.SHOPIFY_WEBHOOK_SECRET;
const SPREADSHEET_ID = process.env.SPREADSHEET_ID;
const SHEET_NAME = process.env.SHEET_NAME || 'Shopify Bestellungen';
const auth = new google.auth.GoogleAuth({
scopes: ['https://www.googleapis.com/auth/spreadsheets'],
});
const sheets = google.sheets({ version: 'v4', auth });
export async function appendRow(row) {
const existing = await sheets.spreadsheets.values.get({
spreadsheetId: SPREADSHEET_ID,
range: `${SHEET_NAME}!A2:A`,
});
const knownIds = (existing.data.values || []).map((cells) => String(cells[0]));
if (knownIds.includes(String(row[0]))) {
return false;
}
await sheets.spreadsheets.values.append({
spreadsheetId: SPREADSHEET_ID,
range: `${SHEET_NAME}!A1`,
valueInputOption: 'RAW',
insertDataOption: 'INSERT_ROWS',
requestBody: { values: [row] },
});
return true;
}
function rowFromWebhook(order) {
const lineItems = order.line_items
.map((item) => `${item.quantity}x ${item.name} (${item.price})`)
.join(' | ');
const customerName = order.customer
? `${order.customer.first_name || ''} ${order.customer.last_name || ''}`.trim()
: 'Gast';
return [
String(order.id),
order.order_number,
order.created_at,
customerName,
order.email || '',
lineItems,
order.subtotal_price,
order.total_tax,
order.total_shipping_price_set?.shop_money?.amount || '0.00',
order.total_price,
order.financial_status,
order.fulfillment_status || 'unfulfilled',
order.tags,
order.note || '',
];
}
function isValidSignature(rawBody, headerValue) {
const digest = crypto
.createHmac('sha256', SHOPIFY_WEBHOOK_SECRET)
.update(rawBody)
.digest('base64');
const received = Buffer.from(headerValue || '', 'base64');
const expected = Buffer.from(digest, 'base64');
return received.length === expected.length && crypto.timingSafeEqual(received, expected);
}
const app = express();
app.post(
'/webhooks/shopify/orders',
express.raw({ type: 'application/json' }),
async (req, res) => {
if (!isValidSignature(req.body, req.get('X-Shopify-Hmac-Sha256'))) {
return res.status(401).send('Invalid signature');
}
const order = JSON.parse(req.body.toString('utf8'));
try {
await appendRow(rowFromWebhook(order));
return res.status(200).send('OK');
} catch (error) {
console.error(`Order ${order.id} not written: ${error.message}`);
return res.status(500).send('Retry');
}
}
);
app.listen(process.env.PORT || 8080);
Setze vor dem Start vier Umgebungsvariablen: SHOPIFY_WEBHOOK_SECRET (bekommst du in Schritt 3), SPREADSHEET_ID, SHEET_NAME und GOOGLE_APPLICATION_CREDENTIALS mit dem Pfad zur heruntergeladenen JSON-Schlüsseldatei. Die Google-Client-Bibliothek findet den Schlüssel über diese Variable (Application Default Credentials).
Drei Details in diesem Code sind wichtig:
- Die Order-ID wird als String mit
valueInputOption: 'RAW'gespeichert, damit Sheets sie nie umformatiert und die Duplikatprüfung exakte Werte vergleicht (Sheets-API-Values-Guide). - Jeder Webhook-Header enthält die API-Version des Payloads in
X-Shopify-API-Versionund eine Zustellungs-ID inX-Shopify-Webhook-Id(Webhook-Zustellstruktur). Der Empfänger dedupliziert stattdessen über die Order-ID, das deckt auch den Backfill weiter unten ab. - Eine
500-Antwort lässt Shopify die Zustellung wiederholen, eine200schließt sie ab. Antworte nie mit200, bevor die Zeile geschrieben ist.
Der Webhook-Body ist die vollständige REST-Order-Ressource, Feldnamen wie order_number, line_items[].price oder total_shipping_price_set stammen also aus der Order-Ressource. Dieses Payload-Format bleibt davon unberührt, dass die REST Admin API als Legacy gilt.
Schritt 3: Shopify-Webhook erstellen
Zum Empfangen von Bestellungen brauchst du keine App. Webhooks, die du im Shopify-Admin anlegst, werden mit einem Secret signiert, das für deinen Shop eindeutig ist und auf derselben Seite angezeigt wird (Shopify Help Center: Webhooks):
- In deinen Shopify-Admin einloggen
- Geh zu Einstellungen und dann Benachrichtigungen
- Öffne den Bereich Webhooks
- Klicke Webhook erstellen
- Konfigurieren:
- Ereignis: Bestellerstellung (Topic
orders/create) - Format: JSON
- URL:
https://dein-host/webhooks/shopify/orders - Webhook-API-Version:
2026-07
- Ereignis: Bestellerstellung (Topic
- Klicke Speichern
- Kopiere das Signatur-Secret, das unter der Webhook-Liste angezeigt wird, setze es als
SHOPIFY_WEBHOOK_SECRETauf deinem Empfänger und starte den Empfänger neu
Pinne die Version bewusst. Shopify hält 2026-07 bis Juli 2027 erreichbar. Bevor du auf eine neuere Version wechselst, prüfst du in den Release Notes die Payload-Änderungen.
Schritt 4: Integration testen
Verifizieren, dass alles funktioniert:
- Klicke beim Webhook unter Einstellungen und dann Benachrichtigungen auf Test senden. Dein Empfänger muss mit
200antworten und im Sheet sollte eine Testzeile erscheinen - Erstelle eine echte Testbestellung: geh zu Bestellungen, klicke Bestellung erstellen, füge ein Produkt und einen Kunden hinzu und schließe die Bestellung ab
- Prüfe dein Google Sheet, die neue Zeile sollte innerhalb weniger Sekunden erscheinen
- Prüfe die Logs deines Empfängers auf Fehler
Debugging-Tipp: Wenn nichts erscheint, prüfe:
- Empfänger-Logs auf
Invalid signature: das Secret wurde an der falschen Stelle kopiert oder eine JSON-Middleware hat den rohen Body vor der Prüfung verändert - Die Antwortzeit: Shopify erlaubt eine Sekunde für den Verbindungsaufbau und fünf Sekunden für die gesamte Anfrage
- Die Google-Seite: das Sheet ist mit der E-Mail des Service-Kontos geteilt, die Sheets API ist aktiviert und der Tabellenblatt-Name passt zu
SHEET_NAME
Schritt 5: Retries, Duplikate und Abgleich
Drei von Shopify dokumentierte Verhaltensweisen bestimmen, wie sich ein Produktions-Empfänger verhalten muss (Shopify-Webhook-Doku und Abonnieren über HTTPS):
- Retries: nach ausbleibender Antwort oder einem Fehler wiederholt Shopify die Zustellung 8 Mal über die nächsten 4 Stunden. Jeder Retry trägt dieselbe Bestellung, die Duplikatprüfung über die Order-ID in
appendRowhält das Sheet also sauber. Shopify empfiehlt außerdemX-Shopify-Webhook-Idzur Deduplizierung, wenn du Zustellungen woanders speicherst. - Keine Reihenfolgegarantie: Shopify garantiert keine Reihenfolge innerhalb eines Topics. Wenn du später
orders/updatedergänzt, vergleicheupdated_at, bevor du eine Zeile überschreibst. - Keine Zustellgarantie: Laut Shopify sollen sich Apps nicht allein auf Webhooks verlassen. Shopify empfiehlt einen Abgleich-Job. Das Backfill-Skript weiter unten übernimmt diese Rolle, wenn du es täglich mit einem
created_at-Filter für die letzten Tage laufen lässt.
Auch die Google-Seite hat Grenzen: die Sheets API erlaubt 300 Schreibanfragen pro Minute pro Projekt und 60 pro Nutzer pro Minute und antwortet darüber hinaus mit 429, wo Google exponentielles Backoff empfiehlt (Sheets-API-Limits). Ein Shop mit ein paar tausend Bestellungen pro Tag bleibt weit darunter, ein Flash Sale vielleicht nicht. Wenn dein Empfänger 429 sieht, antworte mit 500 und lass den Retry-Plan von Shopify die Last verteilen.
Brauchst du Hilfe beim Aufsetzen von automatisiertem Monitoring für deine Integrationen? Wir können dich warnen, bevor Probleme Kunden betreffen.
Advanced: Historische Bestellungen mit der GraphQL Admin API nachladen
Webhooks decken nur Bestellungen ab jetzt ab. Für alles davor brauchst du die Admin API. Shopify hat die REST Admin API zum 1. Oktober 2024 als Legacy erklärt, seit dem 1. April 2025 müssen alle neuen öffentlichen Apps GraphQL nutzen (REST Admin API). Nimm GraphQL.
Seit dem 1. Januar 2026 kannst du im Shopify-Admin keine Custom Apps mehr anlegen; neue Custom Apps entstehen im Dev Dashboard und es gibt keinen Access Token mehr zum Kopieren. Dein Skript tauscht Client-ID und Client-Secret der App gegen einen Token, der 24 Stunden gültig ist (Client Credentials Grant, Help Center: Custom Apps):
- Geh im Shopify-Admin zu Einstellungen, dann Apps, dann Apps entwickeln und Apps im Dev Dashboard erstellen
- Klicke Create app, vergib einen Namen und lege eine Version mit deiner App-URL und der Webhooks-API-Version an
- Trag im Bereich Access der Version den Scope
read_ordersein. Er deckt Bestellungen der letzten 60 Tage ab. Ältere Bestellungen brauchenread_all_orders, das du bei Shopify beantragen musst (Access Scopes) - Veröffentliche die Version, öffne Installs und installiere die App auf deinem Shop
- Kopiere in den Settings der App die Client ID und das Client secret und setze sie als
SHOPIFY_CLIENT_IDundSHOPIFY_CLIENT_SECRET, zusammen mitSHOPIFY_SHOP(diemyshopify.com-Subdomain)
Das Skript blättert mit first und after und stoppt, wenn hasNextPage false ist (GraphQL-Pagination). Die Seitengrößen sind absichtlich klein: eine einzelne Query darf 1.000 Kostenpunkte nicht überschreiten und ein Standard-Plan füllt 100 Punkte pro Sekunde nach (GraphQL-Rate-Limits).
import { appendRow } from './receiver.js';
const SHOP = process.env.SHOPIFY_SHOP;
const CLIENT_ID = process.env.SHOPIFY_CLIENT_ID;
const CLIENT_SECRET = process.env.SHOPIFY_CLIENT_SECRET;
const API_VERSION = '2026-07';
const SINCE = process.env.BACKFILL_SINCE || '2026-01-01T00:00:00Z';
async function getAccessToken() {
const response = await fetch(`https://${SHOP}.myshopify.com/admin/oauth/access_token`, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
grant_type: 'client_credentials',
client_id: CLIENT_ID,
client_secret: CLIENT_SECRET,
}),
});
const data = await response.json();
return data.access_token;
}
const ORDERS_QUERY = `
query Orders($cursor: String, $filter: String) {
orders(first: 10, after: $cursor, sortKey: CREATED_AT, query: $filter) {
pageInfo { hasNextPage endCursor }
nodes {
legacyResourceId
name
createdAt
email
customer { firstName lastName }
subtotalPriceSet { shopMoney { amount } }
totalTaxSet { shopMoney { amount } }
totalShippingPriceSet { shopMoney { amount } }
totalPriceSet { shopMoney { amount } }
displayFinancialStatus
displayFulfillmentStatus
tags
note
lineItems(first: 20) {
nodes { quantity name originalUnitPriceSet { shopMoney { amount } } }
}
}
}
}
`;
async function fetchPage(token, cursor) {
const response = await fetch(`https://${SHOP}.myshopify.com/admin/api/${API_VERSION}/graphql.json`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Shopify-Access-Token': token,
},
body: JSON.stringify({
query: ORDERS_QUERY,
variables: { cursor, filter: `created_at:>='${SINCE}'` },
}),
});
const payload = await response.json();
if (payload.errors) {
throw new Error(JSON.stringify(payload.errors));
}
const throttle = payload.extensions.cost.throttleStatus;
if (throttle.currentlyAvailable < 200) {
await new Promise((resolve) => setTimeout(resolve, 2000));
}
return payload.data.orders;
}
function rowFromGraphql(node) {
const lineItems = node.lineItems.nodes
.map((item) => `${item.quantity}x ${item.name} (${item.originalUnitPriceSet.shopMoney.amount})`)
.join(' | ');
const customerName = node.customer
? `${node.customer.firstName || ''} ${node.customer.lastName || ''}`.trim()
: 'Gast';
return [
String(node.legacyResourceId),
node.name.replace('#', ''),
node.createdAt,
customerName,
node.email || '',
lineItems,
node.subtotalPriceSet?.shopMoney.amount || '0.00',
node.totalTaxSet.shopMoney.amount,
node.totalShippingPriceSet.shopMoney.amount,
node.totalPriceSet.shopMoney.amount,
(node.displayFinancialStatus || '').toLowerCase(),
node.displayFulfillmentStatus.toLowerCase(),
node.tags.join(', '),
node.note || '',
];
}
export async function backfillOrders() {
const token = await getAccessToken();
let cursor = null;
let hasNextPage = true;
let written = 0;
while (hasNextPage) {
const page = await fetchPage(token, cursor);
for (const node of page.nodes) {
if (await appendRow(rowFromGraphql(node))) {
written += 1;
}
}
hasNextPage = page.pageInfo.hasNextPage;
cursor = page.pageInfo.endCursor;
}
console.log(`Backfill finished, ${written} new rows`);
}
backfillOrders();
Ein paar Zuordnungen unterscheiden sich vom Webhook-Payload: legacyResourceId ist die numerische Order-ID, die Webhooks als id senden, name ist die Bestellnummer mit #-Präfix. Die Status-Enums kommen in Großbuchstaben zurück, das Skript schreibt sie deshalb klein, damit sie zu den Webhook-Zeilen passen. Der Filter created_at:>='...' nutzt die Suchsyntax von Shopify. Führe das Skript einmal für den Erstimport aus und danach täglich mit BACKFILL_SINCE einige Tage zurück als Abgleich-Job.
Kundendaten: Protected Customer Data und DSGVO
Ein Bestell-Payload enthält Name, E-Mail, Telefon und Adressen des Kunden. Zwei Regelwerke gelten, bevor du das in eine Tabelle kopierst.
Shopifys Regeln für Protected Customer Data. Name, Adresse, E-Mail und Telefon sind Protected Customer Data. Öffentliche Apps müssen Zugriff beantragen und eine Prüfung bestehen, Custom Apps haben den Zugriff ohne Prüfung verfügbar (Protected Customer Data). Bei Legacy-Custom-Apps, die im Admin erstellt wurden, hängt der Level-2-Zugriff vom Shop-Plan ab (Help Center: Custom Apps). Wenn Kundenfelder aus der GraphQL API leer zurückkommen, prüfe die Protected-Customer-Data-Einstellungen deiner App im Dev Dashboard. Die Anforderungen, die Shopify auflistet, gelten für dich in jedem Fall: verarbeite nur die Felder, die du brauchst, begrenze den Zugriff, verschlüssele Backups und lege eine Aufbewahrungsfrist fest.
DSGVO. Jede Zeile im Sheet ist eine zweite Kopie personenbezogener Daten außerhalb von Shopify und du bist dafür der Verantwortliche. Google handelt als dein Auftragsverarbeiter unter dem Cloud Data Processing Addendum, das Google Workspace und Google Cloud abdeckt, nimm das Sheet also in dein Verarbeitungsverzeichnis auf und beschränke die Freigabe auf die Personen, die es brauchen. Lass die Spalten E-Mail und Name weg, wenn Reporting der einzige Zweck ist. Wenn ein Kunde Löschung verlangt, lösche auch seine Zeilen: die Compliance-Webhooks customers/data_request, customers/redact und shop/redact sind für App-Store-Apps Pflicht (Privacy Law Compliance), ein privater Empfänger wie dieser muss solche Anfragen manuell abarbeiten.
Häufige Fallstricke (und wie wir sie beheben)
Fallstrick 1: Webhook-Signatur-Validierung schlägt fehl Stell sicher, dass du das Signatur-Secret aus dem Bereich Webhooks unter Einstellungen und dann Benachrichtigungen kopiert hast, nicht das Client-Secret einer Dev-Dashboard-App. Webhooks, die eine App anlegt, werden stattdessen mit dem Client-Secret dieser App signiert. Nach einer Secret-Rotation kann Shopify bis zu einer Stunde lang mit dem alten Secret weitersignieren.
Fallstrick 2: Duplikate im Sheet
Shopify wiederholt bei Timeouts und Fehlern. Prüfe vor dem Anhängen immer auf die Order-ID. Antworte nie mit 200, bevor die Zeile geschrieben ist.
Fallstrick 3: Line-Items-Formatierung bricht
Manche Produktnamen enthalten Pipes oder Kommas. Der Empfänger verbindet Positionen mit ' | '; wechsle zu einem eigenen Tabellenblatt mit einer Zeile pro Position, wenn du saubere CSV-Exporte brauchst.
Fallstrick 4: Der Empfänger ist zu langsam Shopify wartet fünf Sekunden auf die gesamte Anfrage. Zwei Sheets-API-Aufrufe pro Bestellung dauern normalerweise deutlich unter einer Sekunde, aber ein Sheet mit zehntausenden Zeilen macht die Duplikatprüfung in Spalte A langsam. Halte ein In-Memory-Set der letzten IDs oder verschiebe das Archiv in ein zweites Tabellenblatt.
Production-Deployment-Checkliste
Vor Go-Live:
- Mit 10+ Bestellungen testen: alle Edge Cases verifizieren (mehrere Line Items, Rabatte, Gast-Checkout, Rückerstattungen)
- Error-Alerts aufsetzen: Empfänger-Fehler per E-Mail oder Slack weiterleiten, siehe automatisiertes Monitoring
- Logs überwachen: in der ersten Woche täglich prüfen, inklusive der Zustellhistorie des Webhooks in Shopify
- Duplikat-Erkennung behalten: die Order-ID-Prüfung macht die Retries von Shopify erst sicher
- API-Version dokumentieren:
2026-07wird bis Juli 2027 unterstützt, plane das Upgrade davor - Abgleich planen: das Backfill-Skript täglich laufen lassen (oder automatisierte Backups nutzen)
Alternative: Derselbe Flow in n8n
Wenn du schon n8n betreibst, besteht der Flow aus zwei Nodes: dem Shopify Trigger-Node für das Bestell-Ereignis und dem Google Sheets-Node mit der Operation Append or Update Row, abgeglichen über die Order-ID-Spalte. Der Trigger braucht Shopify-Zugangsdaten einer Custom App; beachte, dass die n8n-Anleitung zu den Zugangsdaten noch den alten Admin-Weg beschreibt, lege die App also wie oben gezeigt im Dev Dashboard an. Alles aus Schritt 5 und dem Datenschutz-Abschnitt gilt unverändert.
Professionelle Hilfe benötigt?
Diese Integrations-Architektur wächst mit deinem Bestellvolumen. Unser Integration-Service umfasst:
- Custom Field Mapping: Metafelder, Custom Line Item Properties und Shopify-Plus-Features synchronisieren
- Multi-Destination-Sync: an Sheets, BigQuery, Slack und dein Custom-Backend senden
- Advanced Error Handling: automatische Retry-Logik, Dead-Letter-Queues und Alerting
- Fulfillment-Sync: bi-direktionaler Sync (Shopify updaten, wenn du “versendet” in Sheets markierst)
- Performance-Optimierung: große Bestellungen und Flash Sales ohne Timeouts handhaben
Buche eine kostenlose 30-minütige Beratung zur Prüfung deiner Integrationsbedürfnisse: Hier Termin vereinbaren
Verwandte Services
- Dashboard Analytics: Bestelldaten mit Custom Dashboards visualisieren
- Automation Workflows: Bestellungen automatisch basierend auf Inventar-Regeln erfüllen
- Vergleich vs Zapier: warum direkte Integrationen Zapier schlagen
Nächster Ratgeber
Willst du auch Shopify-Inventar synchronisieren? Schau dir unseren Guide zu Echtzeit-Shopify-Inventar-Sync mit Low-Stock-Alerts an.