Loading tutorials…
Loading tutorials…
Shopify Flow is the free Plus-included automation tool. Most brands install it, build one workflow, then forget about it. The brands that get value out of Flow build 10-20 workflows that run silently in the background.
Who this is forShopify Plus brands looking to automate routine ops: fraud holds, low-inventory alerts, VIP customer tagging, order tagging, B2B routing. Especially relevant if your ops team manually triages orders daily.
What you'll need
Step 1
Shopify Admin → Apps → Flow. Each workflow is: trigger (event happens) → conditions (filters) → actions (what to do).
Shopify Admin → Apps → search 'Shopify Flow' → Install. Free for Plus.
Open Flow. The interface: list of workflows (drafts, active, paused). Click 'Create workflow.'
A workflow has: (1) Trigger — the event that starts it (e.g., 'Order created,' 'Customer created,' 'Inventory level changed'), (2) Conditions — filters that determine whether actions run (e.g., 'Order total > $500'), (3) Actions — what to do (tag, email, send Slack message, update metafield).
Mental model: 'When [trigger] happens, IF [conditions] THEN [actions].'
Triggers include 100+ Shopify events plus app-specific triggers (Klaviyo profile updated, Gorgias ticket created, etc.).
Actions include Shopify-native (tag, send email, update metafield, hold/unhold order) plus integrations (Slack message, Klaviyo event, Google Sheets row).
Step 2
Trigger: Order created. Condition: Order total > $X. Action: Hold the order + notify ops via email/Slack.
Create workflow → Trigger → 'Order created.' This fires every time an order is placed.
Add condition: 'Order total > 500' (USD). Adjust based on your AOV — typical: 3-5x your AOV.
Add condition: 'Risk level is high' (Shopify auto-assesses risk). Combine with order total to catch high-value high-risk.
Add action: 'Hold order.' Puts the order on hold automatically — payment captured but not fulfilled.
Add action: 'Send email' or 'Send Slack message' to ops@yourbrand.com — include order number, customer, total, risk level.
Save and Turn On. Test by placing a sandbox order over the threshold.
Step 3
Trigger: Order paid. Condition: customer lifetime spend > $X. Action: Tag customer "VIP."
Create workflow → Trigger → 'Order paid.'
Add condition: 'Customer total spent > 1000' (or your VIP threshold).
Add action: 'Add customer tags' → 'VIP.'
Optionally chain: 'Send email' to CS team flagging new VIP, OR 'Trigger Klaviyo event' (vip-status-earned) to start a VIP welcome flow.
Save and Turn On. VIP tag now applies retroactively and on every future order.
Use the VIP tag: in Klaviyo segments, in Shopify customer filters, in checkout extensibility extensions (e.g., 'show VIP-only express shipping').
Step 4
Trigger: Inventory level changed. Condition: inventory < threshold. Action: Notify ops, optionally unpublish the product.
Create workflow → Trigger → 'Inventory level changed.'
Add condition: 'New inventory level < 10' (or your threshold per SKU — adjust based on velocity).
Add action: 'Send email' to ops@ + procurement@ with SKU, current level, sales velocity (Shopify has a 'days of inventory' computed field).
Optionally: if inventory hits 0 AND product is marked 'do not backorder,' action: 'Unpublish product' to hide from storefront.
Save and Turn On. Run a test by manually adjusting a SKU's inventory in admin to below threshold.
Step 5
Tag orders by Company. Route high-value B2B orders to AE. Auto-assign new B2B customers to tier price lists.
Workflow: New B2B order → notify AE. Trigger: Order created. Condition: 'Customer Company is not empty.' Action: Send email to ae@yourbrand.com with order details.
Workflow: Tag B2B orders for fulfillment routing. Trigger: Order created. Condition: 'Customer Company is not empty.' Action: 'Add order tags' → 'B2B.' Your 3PL can route based on the tag.
Workflow: New Company → assign to Tier 3 price list. Trigger: Company created. Action: 'Update metafield' on Company → 'price_list_tier' = 'Tier 3.' Then your price list query reads the metafield.
Workflow: B2B payment overdue. Trigger: Order's payment due date passed. Condition: Payment status is pending. Action: Send reminder email to customer + notify AR team.
Each B2B workflow saves the AE team 1-3 hours/week. Compound the value across 5-10 B2B workflows.
Step 6
Flow has connector actions for Slack, Klaviyo, Google Sheets, Trello, and more. Wire up your team's existing tools.
Slack integration: Flow → Action → 'Send message to Slack channel.' Connect your Slack workspace, pick a channel (#orders, #ops, #vip-customers). Use for real-time visibility.
Klaviyo integration: Flow → Action → 'Trigger Klaviyo custom event.' Useful for: VIP welcome flow, win-back trigger when customer's last order is > 90 days, refund-experience flow.
Google Sheets: Flow → Action → 'Append row to Google Sheet.' Useful for: monthly B2B order log, returns log, custom audit trails.
Webhooks: Flow can call any URL. Useful for: triggering ERP/3PL updates that don't have native Flow connectors.
Test each integration with a sandbox trigger before turning on in production. Wrong Slack channel or wrong Sheet ID = embarrassing leaks.
Step 7
Workflow library grows fast. Document each workflow, monitor execution, audit quarterly for redundancy and effectiveness.
Documentation: in your team wiki, list each workflow with: name, trigger, conditions, actions, owner, business purpose, when last reviewed.
Monitoring: Apps → Flow → Workflow → Run history. Shows every execution: trigger, conditions matched, actions taken, errors. Check weekly for errors.
Quarterly audit: review the workflow list. Are any redundant? Any unused? Any failing silently? Are the conditions still calibrated correctly (e.g., did your AOV change, making the VIP threshold wrong)?
Disable rather than delete. Disabled workflows are reversible; deleted ones are gone.
When the owner leaves the company, reassign every workflow they owned. Orphaned workflows are technical debt.
Common mistakes
Building one mega-workflow with too many conditions
What goes wrong: One workflow with 15 conditions and 8 actions is impossible to debug. When something fires unexpectedly, you can't tell which condition path triggered. Maintenance becomes a nightmare.
How to avoid: Split into multiple single-purpose workflows. Each workflow does ONE thing well. Use tags or metafields to communicate between workflows if needed.
No documentation for what workflows do
What goes wrong: After 6 months, the team has 25 workflows. Nobody remembers what each does. New hires can't tell which is critical, which is dead. Audits stall. Some workflows fail silently because the underlying conditions changed.
How to avoid: Maintain a workflow registry in your team wiki. Each workflow gets a row: name, trigger, purpose, owner, business value. Update on every change.
Triggering external systems without test mode
What goes wrong: Workflow sends real Slack messages, real Klaviyo events, real Google Sheets rows during development. Team gets spammed with fake test orders. Klaviyo profile gets corrupted with fake events. CS staff gets paged for nothing.
How to avoid: Build in sandbox first. Use a dedicated test Slack channel + test Klaviyo event names. Only point to production channels/lists after the workflow is validated.
Forgetting to recalibrate thresholds
What goes wrong: VIP threshold set at $500 when AOV was $80. A year later, AOV is $150 and 30% of customers are 'VIP.' VIP loses meaning. Klaviyo VIP flow goes to 30% of the list — open rates collapse, the segment is worthless.
How to avoid: Quarterly review of every threshold-based workflow. Recalibrate based on current data. Document the rationale for thresholds so future-you knows what to adjust.
Not handling failures gracefully
What goes wrong: Workflow tries to send a Slack message to a deleted channel. It fails. The 'Hold order' action that was supposed to follow also fails (workflow halts on first error). Order ships unfraud-checked. Refund + chargeback follow.
How to avoid: Order actions by priority: critical actions (hold order, tag) first, optional actions (notify Slack) last. Use Flow's "Continue on error" setting where appropriate. Monitor failure rate in Run history.
Workflows that conflict with each other
What goes wrong: Workflow A tags 'VIP' on orders > $500. Workflow B removes 'VIP' tag on orders < $300. Customer orders $400 → both workflows run, race condition determines final state. Tags become unreliable.
How to avoid: Design workflows to be idempotent (running twice = same result as running once). Use Flow conditions to check current state before action ("if not already tagged VIP, tag VIP"). Avoid contradictory automations.
Recap
Done — what's next
How to set up Shopify Functions (the Scripts replacement)
Read the next tutorial
Hand it off
Flow looks easy and ends up under-used. The brands getting real value from Flow have 15-25 well-maintained workflows; most brands have 3-5 half-broken ones. A Shopify Plus specialist at $14-16/hr can build a full Flow library in 1-2 weeks — typically $800-1,600 total — and document it so your team can extend it.
See specialist rates
Free for Plus accounts. Standard Shopify also has access to Flow now (limited capabilities). Plus gets the full feature set: all triggers, all actions, all integrations.
For Shopify-internal automation, yes — Flow is faster, free, and more reliable than Zapier for Shopify events. For non-Shopify integrations (e.g., 'when a new lead arrives in HubSpot, do X in Salesforce'), Zapier or n8n is still better.
The workflow logs an error in Run history. By default, the workflow halts at the failing action and subsequent actions don't run. You can configure 'Continue on error' for non-critical actions (e.g., Slack notification).
Not natively — Flow doesn't have git integration. Workaround: export workflow definitions as JSON (via the Flow API) and commit those to git. Apps like FlowOps automate this.
No hard limit, but quality > quantity. Most well-run Plus accounts have 15-30 active workflows. Beyond that, maintenance overhead increases — consider whether some can be consolidated. Below 10, you're probably under-using Flow.
Shopify Plus
Shopify Functions are the official Scripts replacement. They run server-side at checkout, written in JavaScript or Rust, deployed via CLI. Most Plus brands need 3-7 Functions to replicate their old Scripts. Here's how to build the first one.
Shopify Plus
Launchpad lets Plus brands schedule the entire choreography of a sale — theme swap, discount activation, product availability, Script toggle — to a single launch time. The alternative is staying up till midnight clicking buttons.
Shopify Plus
Shopify B2B (formerly the Wholesale Channel) is now native on Plus. Companies, price lists, net-30 terms, and customer-specific catalogs all work — but most brands set up Companies wrong and end up rebuilding 3 months later.
Shopify Plus
On standard Shopify, checkout extensibility is mostly settings. On Plus, it's UI extensions, branding APIs, and Functions — code-deployed, version-controlled, infinitely flexible. The wrong setup is also infinitely expensive.