Ditt lager kan vara “rätt” i Shopify och ändå vara fel i WooCommerce. Sedan köper en kund den sista varan två gånger, supporten får det arga mejlet och du sitter fast med återbetalningar som du hade kunnat undvika.
Den här typen av lager-synkautomatisering drabbar butiksägare först, men även driftsansvariga och marknadsföraren som kör kampanjer känner av följderna. Om du säljer samma sortiment i Shopify och WooCommerce håller det här flödet lagret synkat och ger dig ett strukturerat revisionsspår.
Du får se hur flödet jämför lagersaldo, uppdaterar rätt butik, loggar varje ändring i Google Sheets och mejlar dig när något ser avvikande ut.
Så fungerar automatiseringen
Hela n8n-flödet, från trigger till slutresultat:
n8n Workflow Template: Shopify + WooCommerce: lagersaldo i synk
flowchart LR
subgraph sg0["⏰ Hourly Reconciliation Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "⏰ Hourly Reconciliation Trig..", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>📥 Platform Webhook Receiver"]
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "📝 Parse Trigger Data", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>🛍️ Fetch Shopify Inventory"]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>🛒 Fetch WooCommerce Inventory"]
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>🔀 Merge All Platform Data"]
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>🔍 Compare & Identify Discrep.."]
n7@{ icon: "mdi:swap-horizontal", form: "rounded", label: "❓ Has Discrepancies?", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>📋 Split Discrepancies for AI.."]
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>📝 Prepare Update Actions"]
n10@{ icon: "mdi:swap-horizontal", form: "rounded", label: "🚨 Needs Manual Review?", pos: "b", h: 48 }
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>🔀 Split Updates by Platform"]
n12@{ icon: "mdi:swap-horizontal", form: "rounded", label: "🔀 Route Updates to Platforms", pos: "b", h: 48 }
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>🛍️ Update Shopify"]
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>🛒 Update WooCommerce"]
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>🔀 Merge Update Results"]
n16@{ icon: "mdi:database", form: "rounded", label: "📊 Log to Google Sheets Audit", pos: "b", h: 48 }
n17@{ icon: "mdi:swap-horizontal", form: "rounded", label: "📧 Send Notification?", pos: "b", h: 48 }
n18@{ icon: "mdi:message-outline", form: "rounded", label: "✉️ Send Alert Email", pos: "b", h: 48 }
n19["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>📤 Return Response"]
n7 --> n8
n7 --> n19
n13 --> n15
n18 --> n19
n2 --> n3
n2 --> n4
n17 --> n18
n17 --> n19
n14 --> n15
n15 --> n16
n10 --> n16
n10 --> n11
n9 --> n10
n5 --> n6
n1 --> n2
n1 --> n9
n11 --> n12
n16 --> n17
n12 --> n13
n12 --> n14
n3 --> n5
n4 --> n5
n0 --> n2
n6 --> n7
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n7,n10,n12,n17 decision
class n16 database
class n1,n3,n4,n13,n14,n19 api
class n6,n8,n9,n11 code
classDef customIcon fill:none,stroke:none
class n1,n3,n4,n5,n6,n8,n9,n11,n13,n14,n15,n19 customIcon
Problemet: lagersaldot glider isär mellan Shopify och WooCommerce
Om du säljer på två plattformar är det nästan garanterat att lagersaldon glider isär. En retur hanteras i en butik men inte i den andra. En manuell justering görs under stress. En bulk-uppdatering importeras på ett konstigt sätt, och plötsligt är din produkt som visar “5 i lager” egentligen nere på noll. Det värsta är fördröjningen: du får oftast reda på det efter en översäljning, inte innan. Sedan städar du upp ordrar, redigerar listningar och försöker lista ut vilken siffra som ens var korrekt från början.
Friktionen byggs på. Här är var det brukar fallera.
- Att kontrollera Shopify och WooCommerce produkt för produkt blir en veckoritual som äter upp cirka 2 timmar.
- Manuella “snabbfixar” skapar nya misstag, särskilt när två personer uppdaterar lager samma dag.
- Du råkar sälja för mycket under kampanjer eftersom den snabbare butiken inte väntar på den långsammare.
- När något går fel finns inget revisionsspår, så du kan inte med säkerhet svara på “vad ändrades och när?”
Lösningen: automatisk lagersynk + loggade undantag
Det här flödet ger dig en pålitlig lager-handshake mellan Shopify och WooCommerce. Det körs enligt schema (din “lagerpuls”) eller triggas direkt via en webhook när en plattform rapporterar en förändring. n8n hämtar lagerdata från båda butikerna, kombinerar flödena och jämför sedan siffrorna för att hitta avvikelser. Om det är en korrekt och säker uppdatering bygger det rätt åtgärd och pushar korrigeringen tillbaka till den butik som ligger efter. Varje uppdatering skrivs till Google Sheets så att du kan granska vad som hände i efterhand. Och när en mismatch ser riskfylld ut eller kräver ett mänskligt beslut flaggar flödet den och mejlar dig via Gmail så att det inte tyst ligger och blir ett problem i bakgrunden.
Flödet startar med en timer eller webhook och normaliserar inkommande payload. Därefter hämtas lagernivåer från Shopify och WooCommerce och slås ihop till ett gemensamt jämförelseunderlag. Till sist genomförs uppdateringar där det är lämpligt, resultaten loggas i Google Sheets och Gmail skickar en varning om granskning behövs.
Det här får du: automatisering vs. resultat
| Vad det här flödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut i praktiken
Säg att du hanterar 200 SKU:er i Shopify och WooCommerce. En enkel manuell rutin är att kontrollera lagret i ena butiken, kontrollera den andra och sedan justera. Även med 1 minut per SKU för att verifiera och fixa blir det cirka 3 timmar när du gör en full genomgång. Med det här flödet ställer du in lagerpulsen (till exempel varje timme) och systemet sköter jämförelse och uppdateringar automatiskt. Ditt “jobb” blir att granska enstaka Gmail-varningar och skumma Google Sheets-loggen, vilket vanligtvis tar omkring 10 minuter.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Self-hosting-alternativ om du föredrar det (Hostinger fungerar bra)
- Shopify för att läsa och uppdatera lagernivåer.
- WooCommerce för att hämta lager och genomföra korrigeringar.
- Google Sheets för revisionsloggning och historik för granskning.
- Gmail för att skicka varningar vid undantag och avvikelser.
- Shopify + WooCommerce API-nycklar (skapa dem i respektive plattforms utvecklar-/API-inställningar).
Kunskapsnivå: Medel. Du kopplar konton, klistrar in API-nycklar och mappar fält som SKU och lagersaldo.
Vill du inte sätta upp detta själv? Prata med en automatiseringsexpert (gratis 15-minuters konsultation).
Så fungerar det
Ett schema eller en webhook startar körningen. Flödet kan triggas av en timer (“Schemalagd lagerpuls”) för kontinuerlig synk, eller reagera direkt när en webhook skickar en plattformsförändring.
Lagret hämtas från båda butikerna. n8n använder HTTP-anrop för att hämta Shopify-lager och WooCommerce-lager och normaliserar sedan data så att du jämför äpplen med äpplen (oftast SKU plus antal).
Skillnader upptäcks och omvandlas till åtgärder. Ett kodsteg beräknar avvikelsen, en If-kontroll avgör vad som är en verklig differens och ett annat kodsteg bygger själva instruktionerna för “uppdatera den här artikeln”. Vissa avvikelser kan markeras för manuell granskning, vilket är ett bra skyddsräcke.
Uppdateringar, loggar och varningar sker automatiskt. Uppdateringar styrs till Shopify eller WooCommerce, resultat slås ihop och sedan skrivs allt till Google Sheets. Om varningsvillkoret uppfylls skickar Gmail ett meddelande och flödet returnerar ett tydligt webhook-svar.
Du kan enkelt ändra synkfrekvensen så att den matchar hur snabbt ditt sortiment rör sig. Du kan också justera vad som räknas som “manuell granskning behövs” så att du inte störs av ofarliga edge cases. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementation
Steg 1: konfigurera schedule- och webhook-triggers
Sätt upp de två ingångarna så att arbetsflödet kan köras på en timer eller svara på plattformswebhooks.
- Öppna ⏰ Scheduled Inventory Pulse och ställ in schemaregeln så att den körs varje timme (noden använder Interval med Field satt till
hours). - Öppna 📥 Incoming Platform Webhook och ställ in Path till
inventory-webhook, HTTP Method tillPOSToch Response Mode tillresponseNode. - Notera det parallella flödet: 📥 Incoming Platform Webhook skickar utdata till både 📝 Map Trigger Payload och 📝 Build Update Actions parallellt.
Steg 2: anslut datakällor för Shopify och WooCommerce
Normalisera trigger-payloaden och hämta produktdata från Shopify och WooCommerce parallellt.
- I 📝 Map Trigger Payload ställer ni in tilldelningar: triggerType till
={{ $json.body ? 'webhook' : 'schedule' }}, sku till={{ $json.body?.sku || 'ALL' }}, platform till={{ $json.body?.platform || 'ALL' }}och syncMode till={{ $json.body?.sku ? 'single' : 'full' }}. - I 🛍️ Retrieve Shopify Stock ställer ni in URL till
https://{{ $env.SHOPIFY_STORE }}.myshopify.com/admin/api/2024-01/products.jsonoch aktiverar frågeparametrarnalimit=250ochfields=id,title,variants. - I 🛒 Retrieve Woo Stock ställer ni in URL till
={{ $env.WOOCOMMERCE_URL }}/wp-json/wc/v3/productsoch aktiverar frågeparametrarnaper_page=100ochstatus=publish. - Bekräfta parallell körning: 📝 Map Trigger Payload skickar utdata till både 🛍️ Retrieve Shopify Stock och 🛒 Retrieve Woo Stock parallellt.
Autentisering krävs: Anslut era httpHeaderAuth-uppgifter i 🛍️ Retrieve Shopify Stock.
Autentisering krävs: Anslut era httpBasicAuth-uppgifter i 🛒 Retrieve Woo Stock.
Tips: Säkerställ att miljövariabler som SHOPIFY_STORE och WOOCOMMERCE_URL är definierade i n8n så att request-URL:erna resolvas korrekt.
Steg 3: sätt upp bearbetning av lagervarianser
Kombinera plattformsflöden, upptäck avvikelser och dela upp dem i enskilda poster för efterföljande åtgärder.
- I 🔀 Combine Platform Feeds ställer ni in Mode till
combineför att slå ihop svaren från Shopify och WooCommerce. - Öppna 🔍 Detect Stock Variance och behåll den befintliga koden för normalisering och jämförelse av lager (inga parameterändringar krävs).
- I ❓ Discrepancy Check bekräftar ni att villkoret använder Left Value
={{ $json.summary.discrepanciesFound }}med Operationgtoch Right Value0. - I 📋 Segment Variances for AI behåller ni koden som delar upp varje avvikelse i separata items för vidare bearbetning.
Steg 4: konfigurera uppdateringsåtgärder och butiksrouting
Översätt avvikelseposter till uppdateringsåtgärder, routa per butik och skicka lageruppdateringar parallellt.
- I 📝 Build Update Actions behåller ni koden som tolkar AI-beslut och bygger payloads för plattformsuppdateringar.
- I 🚨 Manual Review Needed? bekräftar ni att villkoret kontrollerar att
={{ $json.requiresManualReview }}är lika medtrue. - I 🔀 Separate Updates by Store behåller ni koden som delar upp uppdateringsitems till individuella plattformsuppdateringar.
- I 🔀 Route Updates by Store bekräftar ni att reglerna routar
={{ $json.platform }}till utdatashopifyochwoocommerce. - I 🛍️ Apply Shopify Update ställer ni in URL till
=https://{{ $env.SHOPIFY_STORE }}.myshopify.com/admin/api/2024-01/inventory_levels/set.json, Method tillPUToch body-parametrar: location_id={{ $env.SHOPIFY_LOCATION_ID }}, inventory_item_id={{ $json.variantId }}, available={{ $json.newQuantity }}. - I 🛒 Apply Woo Update ställer ni in URL till
={{ $env.WOOCOMMERCE_URL }}/wp-json/wc/v3/products/{{ $json.productId }}, Method tillPUToch JSON Body till={ "stock_quantity": {{ $json.newQuantity }} }. - Notera parallell körning: 🔀 Route Updates by Store skickar utdata till både 🛍️ Apply Shopify Update och 🛒 Apply Woo Update parallellt.
Autentisering krävs: Anslut era httpHeaderAuth-uppgifter i 🛍️ Apply Shopify Update (redan konfigurerat i arbetsflödet).
Autentisering krävs: Anslut era httpBasicAuth-uppgifter i 🛒 Apply Woo Update.
Steg 5: konfigurera audit-loggning, aviseringar och webhook-svar
Slå ihop uppdateringsresultat, logga auditer till Google Sheets, skicka aviseringar vid behov och returnera webhook-svar.
- I 🔀 Combine Update Results ställer ni in Mode till
combineså att resultat från Shopify och Woo slås ihop. - I 📊 Write Audit to Sheets ställer ni in Operation till
appendOrUpdate, Sheet Name tillAudit Logoch Document ID till={{ $env.GOOGLE_SHEETS_AUDIT_ID }}. Mappa kolumner med de angivna uttrycken som={{ $json.sku }},={{ $json.platform }}och={{ $now.toISO() }}. - I 📧 Alert Required? bekräftar ni att boolean-kontrollen använder
={{ $json.aiDecision?.requiresManualReview || $json.severity === 'critical' }}lika medtrue. - I ✉️ Dispatch Alert Email ställer ni in Send To till
={{ $env.NOTIFICATION_EMAIL }}, Subject till=🚨 Inventory Sync Alert: {{ $json.sku }}och Message till HTML-mallen som finns i noden. - I 📤 Return Webhook Result ställer ni in Respond With till
jsonoch Response Body till={{ { "success": true, "summary": $('🔍 Detect Stock Variance').item.json.summary, "discrepanciesProcessed": $('📝 Build Update Actions').all().length, "updatesApplied": $('🔀 Combine Update Results').all().length, "timestamp": $now.toISO() } }}.
Autentisering krävs: Anslut era Google Sheets-uppgifter i 📊 Write Audit to Sheets.
Autentisering krävs: Anslut era Gmail-uppgifter i ✉️ Dispatch Alert Email.
Steg 6: testa och aktivera ert arbetsflöde
Validera båda trigger-vägarna och bekräfta att uppdateringar, audit-loggar och aviseringar fungerar som förväntat.
- Kör ⏰ Scheduled Inventory Pulse manuellt för att verifiera att den schemalagda vägen går via 📝 Map Trigger Payload, hämtar data och loggar till 📊 Write Audit to Sheets.
- Skicka en POST-request till URL:en för 📥 Incoming Platform Webhook med en exempel-payload för att validera webhook-vägen och JSON-svaret från 📤 Return Webhook Result.
- Bekräfta att en lyckad körning skapar rader i arket
Audit Logoch endast skickar e-postaviseringar när 📧 Alert Required? evalueras till true. - Aktivera arbetsflödet genom att slå om det till Active när testningen är lyckad.
Vanliga fallgropar
- Shopify-inloggning kan löpa ut eller kräva rätt scopes för lager. Om uppdateringar misslyckas, kontrollera appbehörigheterna i Shopify Admin och autentisera på nytt i n8n.
- Om du använder Wait-noder eller om butikernas API:er är långsamma under rusningstid varierar bearbetningstiden. Öka väntetiden om efterföljande noder misslyckas på grund av tomma svar.
- Google Sheets-loggning kan sluta fungera utan att det märks om ett kolumnnamn ändras. Bekräfta att mappningen i “Skriv revisionslogg till Sheets” fortfarande matchar din rubrikrad innan du litar på revisionsspåret.
Vanliga frågor
Cirka 30 minuter om dina API-nycklar är klara.
Nej. Du kopplar Shopify, WooCommerce, Google Sheets och Gmail och bekräftar sedan att dina SKU- och antal-fält matchar.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volymer. Du bör också ta hänsyn till eventuella Shopify/WooCommerce API-begränsningar, även om de flesta butiker inte når dem med en synk varje timme.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och hanterar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, men du behåller samma logik och byter ut notifieringssteget. Ersätt noden “Dispatch Alert Email” (Gmail) med en Slack-nod och koppla den till det befintliga beslutet “Alert Required?” så att bara riktiga undantag notifierar teamet. Vanliga anpassningar är att ändra synkfrekvensen, lägga till en “gör ingenting”-gren för små avvikelser och skriva extra fält (som produktnamn och URL) i Google Sheets-revisionsloggen.
Oftast handlar det om en utgången token eller saknade lagerbehörigheter i Shopifys appinställningar. Återanslut Shopify i n8n, bekräfta att appen har åtkomst till lager-endpoints och verifiera att du använder rätt butiksdomän. Om fel bara uppstår vid stora körningar kan du stöta i rate limits, så att glesa ut anropen kan hjälpa.
Tusentals, förutsatt att dina API-gränser och serverresurser är rimliga.
Ofta, ja, eftersom det här inte bara är “om X så Y”. Du slår ihop två flöden, beräknar avvikelse, förgrenar på undantag och skriver sedan en revisionslogg, vilket är den typ av flöde som blir klumpigt (och dyrt) i enklare verktyg. n8n ger dig också ett self-hosting-alternativ, vilket innebär att du inte betalar per litet steg när du skalar. Zapier eller Make kan fortfarande vara bra om du bara vill ha en enkel varning för lågt lager eller en enkel tvåstegssynk. Om du är osäker, prata med en automatiseringsexpert så får du en rak rekommendation.
När detta väl rullar slutar lageravvikelser att komma som en överraskning. Flödet sköter de repetitiva kontrollerna, loggar sanningen i Google Sheets och pingar dig bara när något faktiskt behöver din uppmärksamhet.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.