Shopify + Slack: low stock alerts before you sell out
Stockouts rarely happen “suddenly.” They happen because inventory data is scattered, reorder decisions are delayed, and no one wants to babysit spreadsheets all day. Then a best-seller goes to zero and you find out from an angry customer.
Shopify Slack alerts hit hardest when your team is small and every missed reorder hurts. Ecommerce Managers feel it during launches. Ops leads feel it when suppliers are slow. And if you run a lean brand, you feel it every weekend.
This workflow watches your inventory hourly, calculates dynamic reorder points from real sales velocity, and posts clear “do this now” alerts in Slack. You’ll see how it works, what you need, and what results to expect.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Shopify + Slack: low stock alerts before you sell out
flowchart LR
subgraph sg0["Hourly Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Hourly Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Workflow Configuration", pos: "b", h: 48 }
n2["<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/shopify.svg' width='40' height='40' /></div><br/>Get Inventory Levels"]
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/shopify.svg' width='40' height='40' /></div><br/>Get Product Details"]
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/shopify.svg' width='40' height='40' /></div><br/>Get Last 30 Days Orders"]
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/shopify.svg' width='40' height='40' /></div><br/>Update Inventory Fields"]
n6@{ icon: "mdi:database", form: "rounded", label: "Read Inventory Master", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Read Suppliers", pos: "b", h: 48 }
n8@{ icon: "mdi:database", form: "rounded", label: "Read Purchase Order Log", pos: "b", h: 48 }
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/merge.svg' width='40' height='40' /></div><br/>Merge All Data Sources"]
n10["<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/>Calculate Sales Velocity"]
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/>Calculate Dynamic Reorder Po.."]
n12@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Reorder Point Reached", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check High Stockout Risk", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Warehouse Redistributi..", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Supplier Availability", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Business Day", pos: "b", h: 48 }
n17@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check MOQ Met", pos: "b", h: 48 }
n18@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Promotional Period", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Budget Limit", pos: "b", h: 48 }
n20@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Large Order Approval N..", pos: "b", h: 48 }
n21["<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/>Multi-Warehouse Distribution.."]
n22@{ icon: "mdi:swap-vertical", form: "rounded", label: "Structure PO Line Items", pos: "b", h: 48 }
n23@{ icon: "mdi:swap-vertical", form: "rounded", label: "Structure Inventory Updates", pos: "b", h: 48 }
n24@{ icon: "mdi:swap-vertical", form: "rounded", label: "Structure Analytics Data", pos: "b", h: 48 }
n25@{ icon: "mdi:swap-vertical", form: "rounded", label: "Structure Transfer Recommend..", pos: "b", h: 48 }
n26@{ icon: "mdi:swap-vertical", form: "rounded", label: "Structure Slow-Mover Data", pos: "b", h: 48 }
n27["<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 PO Email Context"]
n28@{ icon: "mdi:message-outline", form: "rounded", label: "Send PO Email", pos: "b", h: 48 }
n29["<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/>Send PO to Supplier API"]
n30@{ icon: "mdi:cog", form: "rounded", label: "Wait for PO Confirmation", pos: "b", h: 48 }
n31@{ icon: "mdi:database", form: "rounded", label: "Update Purchase Order Log", pos: "b", h: 48 }
n32["<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/slack.svg' width='40' height='40' /></div><br/>Alert Critical Stock Risk"]
n33["<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/slack.svg' width='40' height='40' /></div><br/>Alert PO Sent"]
n34["<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/slack.svg' width='40' height='40' /></div><br/>Alert Slow-Mover Suggestions"]
n35["<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/slack.svg' width='40' height='40' /></div><br/>Send Daily Summary"]
n36["<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/>Sync to Accounting System"]
n37@{ icon: "mdi:database", form: "rounded", label: "Write Dashboard Metrics", pos: "b", h: 48 }
n38@{ icon: "mdi:database", form: "rounded", label: "Write Scenario Planning", pos: "b", h: 48 }
n39["<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/>Detect Slow-Movers"]
n40["<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/>Optimize Profit Priority"]
n41["<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/>Calculate Stockout Risk"]
n42["<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/>Enrich with Supplier Data"]
n43["<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/>Calculate Order Quantity and.."]
n44["<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/>Aggregate Daily Summary"]
n17 --> n18
n28 --> n30
n28 --> n33
n0 --> n1
n7 --> n9
n19 --> n20
n16 --> n17
n39 --> n26
n3 --> n9
n2 --> n9
n6 --> n9
n9 --> n10
n1 --> n2
n1 --> n3
n1 --> n4
n1 --> n7
n1 --> n8
n1 --> n6
n44 --> n35
n41 --> n13
n4 --> n9
n8 --> n9
n22 --> n27
n10 --> n11
n10 --> n39
n13 --> n14
n13 --> n32
n18 --> n19
n40 --> n22
n27 --> n28
n27 --> n29
n24 --> n37
n24 --> n38
n24 --> n36
n30 --> n31
n42 --> n16
n26 --> n34
n31 --> n44
n12 --> n41
n12 --> n24
n15 --> n42
n23 --> n5
n11 --> n12
n11 --> n23
n11 --> n24
n20 --> n43
n43 --> n40
n21 --> n25
n25 --> n32
n14 --> n21
n14 --> n15
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 n2,n3,n4,n5,n12,n13,n14,n15,n16,n17,n18,n19,n20 decision
class n6,n7,n8,n31,n37,n38 database
class n29,n36 api
class n10,n11,n21,n27,n39,n40,n41,n42,n43,n44 code
classDef customIcon fill:none,stroke:none
class n2,n3,n4,n5,n9,n10,n11,n21,n27,n29,n32,n33,n34,n35,n36,n39,n40,n41,n42,n43,n44 customIcon
The Problem: Low Stock Gets Noticed Too Late
Inventory work tends to live in the cracks between tools. Shopify has “on hand,” your team has a Google Sheet with ideal levels, suppliers have lead times in someone’s inbox, and purchase orders get tracked… somewhere. So the “reorder” moment becomes a messy human decision made under pressure. You pull reports, scan SKUs, second-guess demand, and message the team. Meanwhile, the products that actually pay the bills keep selling. By the time you’re confident enough to order, you are already late.
It adds up fast. Here’s where it breaks down in real stores.
- You check stock manually, but you’re reacting to yesterday’s numbers instead of current demand.
- Reorder points stay static, so a product that suddenly spikes sells out before anyone notices.
- Supplier ordering turns into copy-paste busywork, which means POs get delayed or made with the wrong quantities.
- There’s no clean audit trail, so you can’t easily answer “When did we order this, and why?”
The Solution: Hourly Inventory Monitoring + Predictive Reordering
This n8n workflow turns inventory monitoring into something your store does automatically, not something you remember to do. Every hour, it pulls live inventory, product details, and recent order history from Shopify. It also reads your Google Sheets sources (Inventory Master, Supplier Directory, and PO Log) so it understands how you want to manage stock, not just what Shopify says is available. Then it calculates sales velocity (based on the last 7 and 30 days), computes a dynamic reorder point per SKU, and checks business rules like minimum order quantities, budget limits, promo windows, and approvals. When risk is real, Slack gets an alert with context. When it’s time to order, the workflow prepares a PO, sends it by email or supplier API, waits for confirmation, and logs everything back to Sheets.
The flow starts on an hourly schedule. From there, Shopify + Google Sheets data is merged into one SKU-level view, the workflow calculates reorder thresholds and stockout risk, and Slack messages go out to keep the team aligned. Finally, POs and metrics are written back to Sheets so you have traceability and a clean operational record.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you track 200 SKUs and do a “low stock pass” twice a week. Manually, that’s often about 2 hours per pass between Shopify exports, spreadsheet checks, and messaging the team, so roughly 4 hours a week. With this workflow, the hourly run is automatic and Slack surfaces only the SKUs that truly need attention. You might spend 10 minutes reviewing alerts and approving a PO, then move on. That’s hours back, plus fewer “oh no” moments.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Shopify to pull inventory, products, and orders
- Google Sheets to store inventory rules and PO logs
- Slack Incoming Webhook URL (get it from Slack app webhook setup)
Skill level: Intermediate. You’ll connect accounts, match sheet columns, and adjust a few business rules.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
An hourly schedule kicks things off. The workflow runs automatically each hour, so your inventory picture stays fresh without anyone remembering to “go check.”
Shopify and Google Sheets data get merged into one view. It fetches inventory levels, product details, and recent orders from Shopify, then reads your Inventory Master, Suppliers list, and PO Log from Sheets to add your internal rules and history.
Sales velocity and reorder points are calculated for each SKU. Code steps compute 7/30-day velocity, dynamic reorder thresholds, and stockout risk, then a set of checks apply guardrails like MOQs, budget limits, promo windows, business days, and approval thresholds.
Slack gets the signal, and POs get handled end-to-end. Critical risk alerts and slow-mover suggestions are posted to Slack. When a reorder is justified, the workflow formats PO line items, sends the PO via email or supplier API, waits for confirmation, then updates the PO log and dashboards in Google Sheets.
You can easily modify the reorder rules to match your lead times and cashflow goals based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Schedule Trigger
Start the workflow on an hourly cadence using the built-in schedule trigger.
- Add and configure Hourly Schedule Start.
- Set the schedule rule to run every hour (the node uses Interval with Field set to
hours). - Connect Hourly Schedule Start to Workflow Settings Loader.
Step 2: Connect Shopify and Google Sheets
Load inventory, product, order, and sheet data in parallel immediately after settings are loaded.
- In Workflow Settings Loader, keep Include Other Fields enabled and verify the default values: shopifyStoreUrl
https://your-store.myshopify.com, reorderPointMultiplier1.5, safetyStockDays7, budgetLimit50000, largeOrderThreshold10000, slowMoverThresholdDays90. - Connect Workflow Settings Loader to data inputs, and note it runs in parallel: Workflow Settings Loader outputs to Fetch Inventory Levels, Retrieve Product Details, Pull Recent Orders 30d, Load Supplier Directory, Read PO History Log, and Read Inventory Master Sheet in parallel.
- For Pull Recent Orders 30d, set Created At Min to
{{$now.minus({ days: 30 }).toISO()}}and keep Return All enabled. - For Read Inventory Master Sheet, set Sheet Name to
Inventory Masterand Document ID to{{$env.INVENTORY_MASTER_SHEET_ID || "<__PLACEHOLDER_VALUE__Inventory Master Google Sheet ID__>"}}. - For Load Supplier Directory, set Sheet Name to
Suppliersand Document ID to{{$env.SUPPLIERS_SHEET_ID || "<__PLACEHOLDER_VALUE__Suppliers Google Sheet ID__>"}}. - For Read PO History Log, set Sheet Name to
PO Logand Document ID to{{$env.PO_LOG_SHEET_ID || "<__PLACEHOLDER_VALUE__Purchase Order Log Google Sheet ID__>"}}. - Credential Required: Connect your Shopify credentials in Fetch Inventory Levels, Retrieve Product Details, Pull Recent Orders 30d, and Apply Inventory Updates.
- Credential Required: Connect your Google Sheets credentials (service account) in Read Inventory Master Sheet, Load Supplier Directory, Read PO History Log, Update PO Log Sheet, Write Metrics Dashboard, and Update Scenario Planning.
⚠️ Common Pitfall: The Shopify and Google Sheets nodes in this workflow have no credentials configured. You must add credentials before testing, or the workflow will fail at the first data fetch.
Step 3: Set Up Data Consolidation and Inventory Analytics
Merge the six incoming data feeds and compute sales velocity, reorder thresholds, and stockout risk.
- Configure Combine Data Feeds with Mode set to
combine, Combine By set tocombineByPosition, and Number Inputs set to6. - Send Combine Data Feeds output to Compute Sales Velocity to calculate
velocity_7d,velocity_30d, andavg_daily_sales. - Note the parallel split: Compute Sales Velocity outputs to Compute Reorder Threshold and Detect Slow-Moving Items in parallel.
- In Compute Reorder Threshold, keep the dynamic reference to settings:
{{$('Workflow Settings Loader').first().json.safetyStockDays}}. - After Compute Reorder Threshold, note the parallel split: Compute Reorder Threshold outputs to Validate Reorder Threshold, Map Inventory Update Fields, and Assemble Analytics Metrics in parallel.
- For Validate Reorder Threshold, confirm the condition uses
{{$json.current_stock}}≤{{$json.reorder_point}}. - Send Validate Reorder Threshold to Compute Stockout Risk and then to Assess Stockout Risk with the condition
{{$json.stockout_risk}}>0.7. - From Assess Stockout Risk, the workflow runs in parallel: Assess Stockout Risk outputs to Evaluate Warehouse Transfer and Notify Critical Stock Risk in parallel.
- Configure Map Inventory Update Fields to map available to
{{$json.reorder_point}}and updated_at to{{$now.toISO()}}, then connect to Apply Inventory Updates. - For slow movers, connect Detect Slow-Moving Items → Map Slow-Mover Details → Notify Slow-Mover Advice.
Step 4: Add Supplier and Order Qualification Logic
Enrich inventory items with supplier details, then apply business rules for ordering thresholds and approvals.
- Route Evaluate Warehouse Transfer to Verify Supplier Availability, then to Enhance Supplier Details.
- In Verify Supplier Availability, confirm the condition is
{{$json.supplier_available}}=true. - In Check Business Day Window, confirm the weekday filter:
{{$now.weekday >= 1 && $now.weekday <= 5}}. - Set up the approval chain: Check Business Day Window → Validate MOQ Requirement → Check Promo Window → Validate Budget Limit → Review Large Order Approval.
- Verify rule expressions: Validate MOQ Requirement uses
{{$json.order_quantity}}≥{{$json.moq}}, Validate Budget Limit compares{{$json.total_po_value}}<{{$('Workflow Settings Loader').first().json.budgetLimit}}, and Review Large Order Approval uses{{$json.total_po_value > $('Workflow Settings Loader').first().json.largeOrderThreshold}}. - Continue to Compute Order Quantity Value and then Prioritize Profit Ranking before formatting the line items in Format PO Line Items.
- In Format PO Line Items, keep the line item ID formula
{{$json.sku}}_{{$now.toMillis()}}and total price formula{{$json.order_quantity * $json.unit_price}}.
Step 5: Configure Purchase Order Dispatch
Create purchase order payloads and send them via email and supplier API, then log confirmation.
- Ensure Prepare PO Email Data receives formatted items from Format PO Line Items.
- Note the parallel split: Prepare PO Email Data outputs to Dispatch PO Email and Send PO via Supplier API in parallel.
- In Dispatch PO Email, set Send To to
{{$json.supplier_email || "<__PLACEHOLDER_VALUE__Supplier email address__>"}}and Subject toPurchase Order - {{$json.po_number}}. - In Send PO via Supplier API, set URL to
{{$json.supplier_api_endpoint || "<__PLACEHOLDER_VALUE__Supplier API endpoint__>"}}and keep the Authorization header set to{{$env.SUPPLIER_API_TOKEN || "<__PLACEHOLDER_VALUE__Supplier API token__>"}}. - From Dispatch PO Email, note the parallel split: Dispatch PO Email outputs to Delay for PO Confirmation and Notify PO Sent in parallel.
- Configure Delay for PO Confirmation with Unit
hoursand Amount1, then connect to Update PO Log Sheet. - In Update PO Log Sheet, confirm Operation is
appendOrUpdateand Document ID is{{$env.PO_LOG_SHEET_ID || "<__PLACEHOLDER_VALUE__Purchase Order Log Google Sheet ID__>"}}. - Credential Required: Connect your Gmail credentials (service account) in Dispatch PO Email.
Tip: Replace all <__PLACEHOLDER_VALUE__...> entries with real IDs or set the corresponding $env variables before running in production.
Step 6: Set Up Alerts and Analytics Outputs
Send operational alerts to Slack and push analytics metrics to Sheets and your accounting endpoint.
- For critical stock alerts, configure Notify Critical Stock Risk with its channel set to
{{$env.SLACK_CRITICAL_CHANNEL || "<__PLACEHOLDER_VALUE__Slack channel ID for critical alerts__>"}}. - For PO notifications, configure Notify PO Sent with its channel set to
{{$env.SLACK_PO_CHANNEL || "<__PLACEHOLDER_VALUE__Slack channel ID for PO notifications__>"}}. - For slow-mover advice, configure Notify Slow-Mover Advice with its channel set to
{{$env.SLACK_SLOWMOVER_CHANNEL || "<__PLACEHOLDER_VALUE__Slack channel ID for slow-mover alerts__>"}}. - After Update PO Log Sheet, ensure Aggregate Daily Report feeds into Post Daily Summary with the summary text driven by
{{$json.total_pos}}and{{$json.total_value}}. - Note the parallel analytics split: Assemble Analytics Metrics outputs to Write Metrics Dashboard, Update Scenario Planning, and Sync Accounting Endpoint in parallel.
- In Sync Accounting Endpoint, keep URL set to
{{$env.ACCOUNTING_API_ENDPOINT || "<__PLACEHOLDER_VALUE__Accounting API endpoint URL__>"}}and Authentication set togenericCredentialTypewith HTTP Header Auth. - Credential Required: Connect your Slack credentials in Notify Critical Stock Risk, Notify PO Sent, Notify Slow-Mover Advice, and Post Daily Summary.
- Credential Required: Connect your HTTP Header Auth credentials in Sync Accounting Endpoint.
⚠️ Common Pitfall: If the Slack channel IDs are left as placeholders, the Slack nodes will fail even if credentials are valid.
Step 7: Test and Activate Your Workflow
Run a controlled test to verify data inputs, approvals, and outputs before enabling hourly automation.
- Click Execute Workflow to run Hourly Schedule Start manually and watch each branch complete.
- Confirm that Combine Data Feeds receives six inputs and that Compute Sales Velocity produces
avg_daily_sales. - Verify that at least one path reaches Dispatch PO Email or Send PO via Supplier API, and that Update PO Log Sheet appends a record.
- Check that Slack notifications appear from Notify Critical Stock Risk, Notify PO Sent, and Notify Slow-Mover Advice when criteria are met.
- Once validated, toggle the workflow to Active so Hourly Schedule Start runs automatically every hour.
Common Gotchas
- Shopify API credentials can expire or lack the right scopes. If inventory pulls fail, check your Shopify app permissions and credential status inside n8n first.
- If you’re using Wait nodes or external confirmations, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Google Sheets breaks quietly when column names change. If logs stop updating, check the Inventory Master and PO Log headers match what the workflow expects.
Frequently Asked Questions
About an hour if your Sheets are already structured.
No. You’ll mostly connect accounts and match your Google Sheets columns. The “math” is already built into the workflow.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Shopify API usage (usually fine) and optional OpenAI usage if you keep the AI Agent enabled.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s one of the best parts. You can lean harder on the warehouse redistribution path by adjusting the warehouse transfer checks and the transfer formatting step, then route more “low stock” cases into transfer suggestions before any PO logic runs. Common customizations include adding warehouse priority rules, excluding certain SKUs from transfers (fragile, regulated, or bundles), and setting a minimum transfer quantity so you don’t create noisy micro-movements.
Usually it’s missing scopes on the Shopify private app, or the credentials in n8n no longer match the app. Regenerate the API credentials, update them in n8n, then re-run a single Shopify fetch node to confirm it’s working. If it fails only on busy days, rate limiting can also be the culprit, so reduce the number of items pulled per run or add short waits between requests.
A few hundred SKUs is typical on a basic setup, and you can scale from there by self-hosting and optimizing how much order history you pull each run.
Often, yes, because this isn’t a simple “if low stock then ping Slack” recipe. The value comes from merging multiple data sources, running velocity calculations, applying business rules (MOQ, budget, approvals), and then branching into different outcomes like transfer suggestions, PO sending, and logging. n8n is built for that kind of logic and it doesn’t punish you for adding branches. Zapier or Make can still work if you keep the scope small, but you may end up stitching together several zaps/scenarios to match the same behavior. If you want a second opinion before you commit, Talk to an automation expert.
Once this is running, inventory risk stops being a surprise and starts being a Slack message with a clear next action. Honestly, that calm is the real win.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.