Flow automations is our free workflow engine, available on every plan. It runs on a trigger → condition → action model, listens to over 40 admin events (orders, products, customers, inventory), and can call the Admin API, Shopify Email, or third-party apps via connectors. Use it to eliminate any manual repetitive admin task before you install another app.
- Flow is on every Shopify plan (Basic and up) — you don't need Plus.
- Triggers fire once per event, not on a schedule — pair with `Send HTTP request` for cron logic.
- Every workflow needs an explicit 'stop' condition or it'll fire on every order forever.
- Complex branching belongs in one workflow, not five — Flow supports up to 50 actions per run.
- Always log to a metafield or tag so you can audit what Flow touched.
If it involves 'when X happens, do Y' inside Shopify, Flow does it — for free — and replaces most tagging, notification and fraud-flag apps.
The trigger–condition–action model
Every Flow workflow starts with a trigger — an event that Shopify emits (Order created, Inventory quantity changed, Customer created, Product added to a collection). The trigger delivers a payload of variables. Conditions filter that payload (`order.totalPrice > 500`, `customer.tags contains 'wholesale'`). Actions do the work (tag the customer, send an email, call an app connector, POST to a webhook). Every workflow you'll ever build is a tree of those three primitives.
Where Flow beats an app
The Shopify app store is full of paid apps that do exactly what Flow does natively — auto-tag high-value customers, flag risky orders, notify staff of low stock. Before installing anything, ask: can Flow do this? The answer is yes about 70% of the time.
| Task | Typical app cost | Flow equivalent |
|---|---|---|
| Auto-tag VIP customers | $10–29/mo | Free — 1 workflow, 3 actions |
| Flag high-risk orders | $15–49/mo | Free — order risk trigger + tag |
| Notify staff of low stock | $9–19/mo | Free — inventory trigger + email |
| Auto-fulfil digital goods | $12–29/mo | Free — order paid trigger + Shopify Fulfillment |
| Cross-sell recommendations | $29–99/mo | Not Flow — needs an app |
Automation 1 — Auto-tag VIP customers
Tag any customer whose lifetime spend crosses €1,000 as 'VIP' so downstream flows (free shipping, gated collections, custom emails) can filter on it.
- 1Trigger
`Order paid` — fires on every completed payment.
- 2Condition
`customer.amountSpent.amount >= 1000` — evaluate before tagging so we don't tag on every order.
- 3Action
`Add customer tags` → `VIP`. Add a second action `Send internal email` to your CS team.
- 4Idempotency
Add a second condition `customer.tags` does not contain `VIP` — otherwise the workflow runs (harmlessly) on every subsequent order.
Automation 2 — Flag risky orders for review
Automatically hold high-risk orders for manual review instead of fulfilling them.
- 1Trigger
`Order created`.
- 2Condition
`order.riskLevel == 'HIGH'` OR `order.paymentGatewayNames contains 'manual'`.
- 3Action 1
`Add order tags` → `review-required`.
- 4Action 2
`Send internal email` to fraud@yourshop.com with the order ID and risk score.
- 5Action 3
`Hold fulfilment` — stops the order from auto-fulfilling until a human clears it.
Create a saved order view filtered on `tag:review-required` and pin it to your staff's admin sidebar. Reviews take 30 seconds instead of hunting through every order.
Automation 3 — Low stock warning per location
Notify a specific warehouse manager when a SKU at their location drops below a threshold.
- 1Trigger
`Inventory quantity changed`.
- 2Condition
`inventoryLevel.available <= 5` AND `inventoryLevel.location.name == 'Warehouse Berlin'`.
- 3Action
`Send internal email` with product title, SKU, current stock and a deep link to the inventory page.
Automation 4 — Auto-tag products by margin
Tag every product whose margin (calculated from price − `cost per item`) drops below 20% as `low-margin` so it can be excluded from discount campaigns.
- 1Trigger
`Product update` — fires when price or cost changes.
- 2Condition
`variant.price - variant.inventoryItem.unitCost.amount) / variant.price < 0.20`.
- 3Action
`Add product tags` → `low-margin`. Add reverse workflow that removes the tag when margin recovers.
Beyond built-in actions — HTTP requests
The most powerful Flow action is `Send HTTP request`. It POSTs any payload to any URL, which means Flow can trigger Slack messages, Notion updates, Zapier webhooks, your own API — anything with an HTTP endpoint. Combined with the built-in Liquid templating, you can build integrations that would otherwise require a middleware service.
{
"channel": "#store-alerts",
"text": "New VIP customer! {{ customer.firstName }} {{ customer.lastName }} just hit €{{ customer.amountSpent.amount }} lifetime.",
"attachments": [{
"color": "#4F46FF",
"fields": [
{ "title": "Email", "value": "{{ customer.email }}", "short": true },
{ "title": "Last order", "value": "€{{ order.totalPrice }}", "short": true }
]
}]
}Testing Flow workflows safely
Every workflow has a 'Run test' button that lets you feed a real historical event through the workflow without emitting the actions. Use it obsessively — a broken condition can tag 20,000 products in seconds.
- Test with `Add tags` before enabling anything destructive.
- Log every workflow run to a metafield or a Google Sheet via `Send HTTP request`.
- Keep every workflow named with the pattern `[domain] – trigger → outcome` so a stranger can read the list and know what runs.
- Version-control workflows by exporting the JSON regularly — Flow has no built-in history.
A workflow that runs on `Product update` and calls `Update product` triggers itself. Always add a condition that breaks the loop (e.g., tag not already present).
Frequently asked questions
The most common questions merchants ask us about automation.