automations.help

Order & fulfillment ops

Auto-tag high-risk orders for fraud review

Shopify scores every order for fraud, but the score is useless if a risky order is already out the warehouse door before anyone reads it. This watches for Shopify's risk verdict, tags the high-risk ones, puts a fulfillment hold on them so they can't ship, and posts the actual risk evidence to Slack for a human to clear. It never auto-cancels — a false positive kills a real sale. Build it yourself with the steps below, or we build it on your own Shopify and Slack, document it, and hand you the keys with no monthly fee. Free teardown of your current setup first.

Difficulty
Intermediate
Time to build
2-4 hrs
Updated
  • Shopify
  • Slack

The manual way today

Someone is supposed to open each new order, click into the fraud analysis, read the risk indicators, and decide whether to ship it — for every order, before fulfillment runs. In practice that check gets skipped on busy days, or it happens after the order already synced to the 3PL and a label printed. The risky ones look exactly like the good ones in the Orders list.

The order Shopify flagged ships anyway, the card turns out to be stolen, and weeks later you eat the chargeback — the refunded amount, the lost product, the dispute fee, and a ding to your chargeback ratio that your processor watches. The flag was right there the whole time; nobody was standing at the door to read it before the box left.

What running looks like

As soon as Shopify finishes scoring an order, any high-risk one is tagged, put on a fulfillment hold so it physically can't ship or sync to your 3PL, and dropped into a Slack channel with the specific reasons it tripped — AVS mismatch, failed CVV, proxy IP, shipping country that doesn't match billing. A person reviews the evidence and either releases the hold to fulfill or cancels and refunds. Low- and medium-risk orders pass through untouched.

01The build

How to build it

  1. Decide what 'high risk' means and what happens to it

    Needs a human

    Write the policy before any wiring: which Shopify verdict triggers action (a HIGH risk level, or a recommendation of INVESTIGATE/CANCEL), plus an always-flag rule for any order above a dollar amount regardless of score. And decide the action up front — tag, hold, and alert a human. Auto-cancelling on a score is off the table. This is a judgment call, not something the automation should make for you.

  2. Trigger after the fraud analysis is ready — not at checkout

    Runs itself

    Shopify computes the risk a moment after the order is placed, so firing on the instant of checkout reads an empty or PENDING score. Use Shopify Flow's 'Order risk analyzed' trigger, which fires once the scoring is done. If you're building outside Flow in n8n or Zapier, subscribe to the orders/create webhook and add a short delay (or re-poll) before reading the score, so you're never acting on a half-finished analysis.

  3. Read the risk verdict and the facts behind it

    Runs itself

    In Flow the trigger hands you the risk level and recommendation directly. Outside Flow, query the order's risk over the GraphQL Admin API: order.risk returns the recommendation (ACCEPT / INVESTIGATE / CANCEL) and a list of assessments, each with a riskLevel (LOW / MEDIUM / HIGH) and the specific facts — billing-address (AVS) mismatch, CVV failure, high-risk internet provider, shipping/billing country mismatch, multiple recent orders from the same card. The REST OrderRisk resource is deprecated; read it through GraphQL.

  4. Branch so you only act on the risky ones

    Runs itself

    Continue only when the verdict is HIGH (or the recommendation is INVESTIGATE/CANCEL), plus your always-flag dollar rule from step 1. Everything LOW and MEDIUM exits here and ships normally. This branch is what keeps the channel signal-rich — flag everything and people stop reading it; flag only the real ones and a hold actually means something.

  5. Tag the order so it stops blending into the queue

    Runs itself

    Add a clear tag like fraud-review (and high-risk) with the tagsAdd mutation, or Flow's 'Add order tags' action. The tag is what makes the order surface in a saved Orders view your team checks, and it's a durable marker for later — you can filter on it for reporting and to measure how many flags turned out to be real.

  6. Put a fulfillment hold on it so it can't ship before review

    Runs itself

    This is the whole point of the recipe. Apply a fulfillment hold with the fulfillmentOrderHold mutation (or Flow's hold action) and a reason note like 'Held: high fraud risk, pending review.' A held fulfillment order won't auto-fulfill, won't get picked up by an orders-to-3PL sync, and won't print a label until a person explicitly releases it. The tag makes it visible; the hold makes it safe.

  7. Post the order to Slack with the reasons it tripped

    Runs itself

    Send a message with the order number, total, customer name, and — critically — the specific risk facts Shopify returned, plus a direct link to the order. 'Order #1042, $340, AVS mismatch + proxy IP + shipping country ≠ billing' lets a reviewer act in seconds. A bare 'order flagged' just moves the work to Slack without making it easier.

  8. A person verifies and decides — release or cancel

    Needs a human

    Deliberately the one human step. The reviewer checks the evidence (a quick call or an address lookup often settles it) and either releases the hold so the order fulfills, or cancels and refunds it. Never auto-cancel on the score alone: fraud models flag real customers too, and a wrongly cancelled order is a lost sale plus an insulted buyer. Log each decision and outcome to a sheet so you can tune the threshold over time.

02The stack

What it’s built on

Shopify
Runs the fraud analysis, exposes the risk level and recommendation (and the facts behind them) via the GraphQL Admin API, carries the fraud-review tag, and holds the fulfillment order so it can't ship. Shopify Flow's 'Order risk analyzed' trigger plus its tag and hold actions can run this whole recipe natively.Shopify Flow is included free on Shopify and Advanced/Plus plans — for this build it's often the only tool you need beyond Slack.
Slack
Where each flagged order lands with its risk facts and a link, so a human can review and clear it in one place instead of digging through the Orders list.Slack's free tier is plenty here — this is a handful of messages a day, not a firehose. Shopify Flow has a built-in Slack connector, so you don't need extra plumbing to post.
n8n
The glue if you build this outside Flow: catches the order, reads order.risk over GraphQL, applies the tag and hold, and posts to Slack — useful when you want logic Flow can't express, like a custom whitelist or a multi-signal score.n8n is open-source and self-hostable for free. Honestly, for this exact recipe Shopify Flow alone usually covers it — reach for n8n only if you outgrow what Flow can do.

03Questions

Before you build

Should this just auto-cancel the high-risk orders?

No — and Shopify itself recommends manual review over auto-cancelling. A fraud score is a probability, not a verdict, so it flags real customers too. Auto-cancelling on the score guarantees you'll kill legitimate sales and insult good buyers. The automation tags, holds, and alerts; a person makes the call to fulfill or refund.

When is the fraud score actually available?

Not the instant the order is created. Shopify runs the analysis a moment after checkout, so reading it too early returns a PENDING or empty result. That's why you trigger on the 'Order risk analyzed' event in Flow, or add a short delay/re-poll before reading order.risk if you build it in n8n or Zapier.

Does this work if I'm not on Shopify Payments?

Partly. Shopify's richest risk signals come through Shopify Payments. On a third-party gateway you get fewer indicators, so pair it with a dedicated fraud app and read that app's assessment the same way — it writes a risk assessment onto the order that you branch on exactly like Shopify's.

Will a held order still get pushed to my 3PL or print a label?

No — that's the reason for the hold rather than just a tag. A fulfillment hold stops the order from auto-fulfilling, keeps an orders-to-3PL automation from picking it up, and blocks a label until a human releases the hold. The tag alone wouldn't physically prevent shipping.

How do I stop flagging good repeat customers?

Whitelist them in the branch before you tag and hold. Skip the hold for customers with several prior fulfilled orders and no chargebacks, or who carry a 'trusted' tag. Read that condition first so a loyal buyer with one odd-looking order doesn't get held every time.

Can I build this myself, or should you build it?

If you're comfortable in Shopify Flow or with the Admin API, build it — every trigger, field, and guardrail is spelled out above on purpose. If you'd rather not own the wiring and the edge cases, we'll build it on your existing Shopify and Slack, document it, and hand it over so you own it outright — no monthly retainer, no platform you can't leave. It starts with a free 20-minute teardown, not a contract.

Order & fulfillment ops

Auto-cancel and refund orders unfulfilled after 14 days

Some orders are never going to ship — the item's gone, the supplier fell through, the address was bad. They sit open, tying up cash and phantom inventory while the customer waits. This finds them past your cutoff, refunds the Stripe charge, restocks the units, and emails a clear explanation — with guardrails so it never touches an order that's mid-fulfillment. Build it yourself with the steps below — or we build it, wire in the safeguards, and hand it over so you own it outright with no monthly fee. Free teardown of your current setup first.

  • Shopify
  • Stripe

Intermediate3-6 hrs

Support & returns

Auto-escalate angry support tickets to Slack

A customer threatening a chargeback at 9am shouldn't be discovered at 2pm. This watches every inbound Gorgias ticket, decides which ones are actually angry — not just mildly annoyed — and drops a Slack alert with the message, the customer's history, and a one-click link into the ticket, so the right person sees it in seconds instead of when the queue gets around to it. Build it yourself with the steps below — or we build it, tune the noise out, and hand it over so you own it outright with no monthly fee. Free teardown of your current setup first.

  • Gorgias
  • Slack

Intermediate2-4 hrs