Playbook · Unfulfilled order alert

Unfulfilled Shopify orders sitting too long — and nobody got pinged.

Written for a Shopify DTC owner who can open Orders, filter Unfulfilled, and see paid work that has been sitting since yesterday — while Slack stayed quiet, staff mail stayed empty, and the warehouse found out from a customer. This is an ops-alert playbook. Native Shopify Flow plus native notifications. Not a “Flow is broken” debug. Not a WISMO inbox loop. No ticket-cut number, no recovered-revenue claim, no invented case studies.

Nico at Latch AI Ops · Sep 2, 2026 · ~8 minute read

Buy the 72-hour install — $997Shopify Flow not runningRepetitive supportMerchant FAQ

01

This is not Flow-not-running. This is not a WISMO inbox loop.

Two other playbooks on this site look adjacent and are not this job. Shopify Flow not running is for a workflow you already built that still does nothing: inactive toggle, trigger miss, conditions too strict, wait not elapsed, failed action, missing connector. If you never built an aging-unfulfilled workflow, Flow can be healthy and you still get silence. That silence is this page.

Repetitive support is customer-facing: shipping and order mail already exist, and the same “where is my order” question still loops in inbox, Gorgias, or Shopify Inbox. This page is internal. The packing slip never moved, and ops was not told. A customer ticket is a late, expensive substitute for a Slack ping you could have had at hour four.

Stay on this page if the fact is: paid orders sit Unfulfilled in Shopify admin past your SLA, and no staff channel heard about it. Walk native tools first. You already pay for Shopify Flow and Shopify notifications. You do not need a 3PL dashboard app to get pinged that a box is still on the table.

02

Paid, unfulfilled, nobody pinged.

Open Shopify admin → Orders. Filter Financial status: Paid. Fulfillment status: Unfulfilled. Sort by date. If yesterday’s paid work is still in that list and nobody on the team was messaged, you do not have an unfulfilled alert. The owner finding it at 10pm is not an alert. A customer asking where the order is, is not an alert. An alert is a Slack message or a staff email that names the order before the SLA is ash.

Common ways this gap hides. You assumed the 3PL portal would yell. You assumed “new order” email to the owner counted — that mail fires at checkout, not when the order has sat. You assumed a Flow template named “Unfulfilled” was on, and it was a gallery card you never installed. You have Flow workflows for tags and restocks, and none of them wait, then check fulfillment status.

Write the SLA on paper before you build: four hours for same day, next morning for evening orders, 24 hours if you batch. The number is yours. The point is that silence after that number is a process hole, not a mysterious Shopify bug.

03

Native notifications are customer mail. They are not this alert.

Settings → Notifications. Order confirmation goes to the buyer when the order is paid. Shipping confirmation goes to the buyer when a fulfillment is marked. Neither pings the warehouse that the order is still sitting. If order confirmation itself never fires, that is order confirmation not sending. If shipping confirmation never fires after you fulfill, that is shipping confirmation not sending. Leave those on their native path. Do not stuff a customer shipping template with “we noticed this is unfulfilled.”

There is a staff-facing native: Settings → Notifications also has order confirmation copies you can BCC, and some plans still have an “order notification” to a staff address at checkout. That is a new-order ping. It fires too early to be an aging-unfulfilled alert. Use it if you want to hear every paid checkout. Do not confuse it with “this order is still unfulfilled after six hours.”

Klaviyo Placed Order and Fulfilled Order are also not this job. Those are customer or marketing sequences. An internal aging alert belongs in Shopify Flow, where the fulfillment status already lives. Mixing it into Klaviyo is how you page a customer by accident, or wait on a metric that never hits because the order never fulfilled — which is the fact you already know.

04

Build: Order paid → wait → still unfulfilled → Slack or staff email.

Shopify admin → Flow → Create workflow. Trigger: Order paid. Not Order created (drafts and unpaid invoices will fake you out). Not Fulfillment created (that fires when the problem is already over). One trigger.

Then Wait. Match the SLA you wrote: four hours, eight hours, until 10am next day — whatever is honest for how you pack. A wait is not Flow-not-running. If you check Slack ten minutes after a test order, you will declare this dead. For the first proof, temporarily set the wait to five minutes. Put the production delay back after one real run.

Then Check if: Order fulfillment status is Unfulfilled. Optionally AND financial status is Paid, AND cancelled is false. If the warehouse already fulfilled during the wait, the check fails closed and nobody gets a junk ping. That is the point.

Then one action: Send internal email to a staff address you actually read, or Send Slack message to a channel you already check. Include order name, created-at, customer name, and a link back to the order in admin. Do not send the customer anything from this workflow. Internal email in Flow is staff mail.

Optional and useful: add a unique tag such as aging-unfulfilled so a later run or a human can see the ping already fired. Do not add a second workflow on the same trigger “to be sure” — you will double-page yourself when both waits end.

Turn the workflow Active. Inactive does not run. A template you previewed and never turned on does not run. If after you flip it on the workflow still never appears in run history, leave this page and walk Shopify Flow not running. That is a different bug.

05

Skip holds, preorders, digital auto-fulfill, delayed SKUs.

A loud alert that fires on every intentional delay will get muted by lunch. Before the Slack action, add checks that skip the orders you meant to leave unfulfilled.

Fulfillment hold / On hold: if you use Shopify’s hold, or a fraud / high-risk hold, do not page packing. Check for the hold, or for a tag your fraud app writes, and stop.

Preorder / made-to-order / backorder tags: if you already tag those SKUs or orders, Check if: order does not have tag preorder (and the same for your other delay tags). If you do not tag them yet, tag them at checkout with a separate tiny Flow, then use that tag here. Do not invent a new app for a tag.

Digital and auto-fulfill: gift cards, courses, downloadable SKUs often fulfill the second the order is paid. They should never hit this alert. If a mixed cart leaves the physical line unfulfilled, that is a real ping — keep the check on fulfillment status, not on “order contains a digital SKU.”

3PL printed a label outside Shopify: the order still looks Unfulfilled in admin, your alert will fire, and that is useful. The fix is to land the fulfillment in Shopify, not to mute the ping. Native shipping mail also depends on that write — see shipping confirmation not sending.

06

Prove it in run history, then leave it on.

Place one real paid order from a phone that is not logged into admin. Cheap SKU, real payment, not a draft, not Mark as paid on an unpaid invoice if that skips Order paid on your shop. Wait the test delay. Open Flow → the workflow → run history.

No run at all: trigger never matched — wrong event, or the workflow is still inactive. Run waiting: you did not wait long enough. Run that stopped at the condition: the order was already fulfilled, on hold, or your skip tag matched. Run failed at Send Slack / Send internal email: connector, channel renamed, or a bad staff address. Those last two are the Flow-not-running playbook. This page is done when a run succeeds and you can point at the Slack message or the staff email with the order name in it.

Put the production wait back. Leave the workflow Active. Do not add a second “backup” workflow. Do not buy a monthly unfulfilled-order app to send the same Slack message Shopify Flow already sends. If the customer still emails “where is my order” after you pack and the shipping mail exists, that is repetitive support, not a louder ops alert.

07

When to stay DIY vs pay $997.

Stay DIY if you can spend one afternoon on the list above: name the SLA, leave customer mail on native notifications, build one Order-paid Flow with a wait and an unfulfilled check, skip the holds and preorder tags, prove one run, leave it active. No agency required. Short answers also live on the merchant FAQ. Related: Shopify Flow not running, repetitive support, WISMO playbook.

Pay for help when the work is not this one canvas — it is connecting the stack you already have so ops exceptions land in a channel you already check, lead capture is not dying in DMs, and checkout follow-up is one live workflow instead of a Flow wait plus a Klaviyo draft plus a native toggle you forgot. That is the Latch AI Ops install.

What $997 USD one-time buys: lead capture on the live store, ops alerts in a channel you already check, and a checkout-ready workflow. 72 hours after collaborator access, not after payment. One live Shopify store. Access plus a delivery thread. Store URL collected at checkout. Not a SaaS seat, not a Shopify Flow rebuild, not a Klaviyo rebuild, not a Gorgias implementation, not a support VA, not a brand or theme job.

Other shops’ public ranges, not testimonials: a Shopify Flow or recovery-app install typically runs $500–$2,500. A Klaviyo-only flow rebuild typically runs $2,000–$5,000. $997 is the cheap end of that work, sold as a 72-hour install of three systems — not as recovered checkout revenue or a ticket-cut number.

What it does not buy: recovered checkout revenue, a lift in conversion, fewer WISMO tickets, or a case study. Latch AI Ops has not published customer proof because there are no customers yet. You are buying the install.

Checkout is on Whop. Operator is Nico. United States offer. You can revoke collaborator access after handoff. We do not take owner passwords.