Paid orders with fulfillment_status != fulfilled. The number ops should clear by EOD.
At a glance
A live count of paid orders whosedisplayFulfillmentStatusis anything other thanFULFILLED. The work-queue number, what ops needs to clear before going home.
| What it counts | COUNT(orders WHERE displayFinancialStatus IN ('PAID', 'PARTIALLY_PAID', 'AUTHORIZED') AND displayFulfillmentStatus != 'FULFILLED'). Each unfulfilled paid order is 1, regardless of order value. |
| Statuses included in the count | OPEN, UNFULFILLED, IN_PROGRESS, PARTIALLY_FULFILLED, PENDING_FULFILLMENT, SCHEDULED. Each represents a different operational stage but all are “not yet shipped”. |
RESTOCKED orders | Excluded. Restocked = customer cancelled and stock returned, no longer needs fulfilling. |
VOIDED orders | Excluded. Voided = payment never captured, no goods owed. |
| Pending-payment orders | Excluded. Orders in PENDING or EXPIRED financial status are not paid, so there’s no fulfilment commitment yet. |
| VAT / tax treatment | Not applicable (count metric, no money). |
| Shipping | Not applicable (count metric). |
| Discounts | Not applicable (count metric). |
| Refunds | A refunded order can still be unfulfilled (paid → refunded → still in pick-list because nobody pulled it). The card includes these. Use Refund Rate for the post-refund view. |
| Currency | Multi-currency safe (count metric). |
| Channels / sources | Not filtered. Online Store, POS (which usually flips to fulfilled instantly at the till and so rarely lands here), Buy Button, B2B, marketplace channels all contribute. B2B orders skewed by SCHEDULED status often dominate this count for hybrid brands. |
| Time window | RT (real-time, computed from the latest indexed order snapshot, not bounded to a date window) |
| Alert trigger | >10, when more than 10 paid orders sit unfulfilled at any moment, the unfulfilled_count sentiment key trips. The threshold is configurable per workspace. |
| Roles | owner, operations |
Calculation
Calculated automatically from your Shopify data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
A UK subscription-box brand (monthly snack box) on Shopify Plus. Reading taken at 09:15 GMT on 12 Apr 26 (Monday morning).| Status | Order count | Note |
|---|---|---|
OPEN (paid, not yet picked) | 14 | Friday-evening + weekend orders, no warehouse activity Sat/Sun |
IN_PROGRESS (pick-and-pack started) | 38 | Monday morning team has started early on Friday’s batch |
PARTIALLY_FULFILLED (some items shipped, others backordered) | 6 | Customers waiting for the missing snack SKU |
SCHEDULED (subscription billings due to ship later this week) | 92 | The bulk-fulfilment batch for Wed-Thu shipping |
PENDING_FULFILLMENT (3PL queue, awaiting label print) | 4 | Yesterday evening’s straggler orders |
| Total Unfulfilled (this card) | 154 |
>10 alert has been tripped since Friday afternoon. Six things to notice:
- The headline (154) overstates the operational fire. 92 of those are scheduled subscription orders, intentionally batched for Wed/Thu dispatch. Filtering them out: real urgent backlog is 62 orders (
OPEN+IN_PROGRESS+PARTIALLY_FULFILLED+PENDING_FULFILLMENT). - The 14
OPENis the bottleneck. These orders haven’t been touched since Friday, that’s the number the warehouse manager needs to break before lunch. Each hour they sit unfulfilled, customer-service tickets accumulate. - The 6
PARTIALLY_FULFILLEDis a different problem. Pick is done, the rest is waiting on stock. Cross-reference Products with Zero/Negative Stock, the missing SKU is almost certainly there. IN_PROGRESS(38) is healthy. It means the team is actively working. A highIN_PROGRESSagainst a lowOPENis the operational state to be in. Worry whenIN_PROGRESSis low andOPENis climbing.- The Monday-morning effect is structural. Most subscription brands and DTC merchants will see this card spike on Monday at 09:00 simply because nobody picked Sat/Sun. The card’s shape across the week is more informative than the absolute count, look for the
OPENbucket clearing by Tuesday EOD. - B2B
SCHEDULEDorders skew the headline. If the merchant ran B2B alongside the subscription box, scheduled wholesale shipments would dominate. The card doesn’t auto-segment by tag today; the operationally useful filter is “scheduled = false” which Shopify Admin offers in Orders → More filters → Fulfillment status.
Sibling cards merchants should reference together
Unfulfilled Orders is the immediate work queue. Pair these to triage and prevent:| Card | Why pair it with Unfulfilled Orders |
|---|---|
| Fulfillment Rate | This card is the live count, fulfillment rate is the trend. A climbing unfulfilled count predicts a fulfillment-rate dip in 3 to 7 days. |
| Fulfillment Breakdown | Splits the 154 across OPEN / IN_PROGRESS / PARTIALLY / SCHEDULED. Tells you which bucket needs attention; a high OPEN is more urgent than a high SCHEDULED. |
| Products with Zero/Negative Stock | If PARTIALLY_FULFILLED orders are climbing, the missing line is usually OOS. Pair to surface the bottleneck SKU. |
| Cancellation Rate | Unfulfilled orders sitting >5 days breed cancellations. A persistent unfulfilled spike + rising cancellations is a backlog-induced churn signal. |
| Refund Rate | When orders get unfulfilled past customer-tolerance, refund-and-cancel becomes the customer-service fix. Watch refund rate climb 3 to 7 days after an unfulfilled-orders spike. |
| Shipping Methods | Express-shipping orders sitting in OPEN are the highest-priority customer-trust risk. Filter the unfulfilled list by shippingLines.title containing “Express” or “Next Day” first. |
| Revenue at Risk (live incident) | When ops outage drives this number above 50 with an open Datadog/NewRelic incident, the cross-channel card surfaces £/min impact. |
Reconciling against the vendor’s own dashboard
Where to look in Shopify Admin: Orders → filter Fulfillment status: Unfulfilled, Partial, Scheduled, On hold. The count of matching rows should match this card to within sync-lag tolerance. The Shopify Admin home screen also shows an Orders to fulfill widget which is the closest one-tile view. Other Shopify Admin views that look like the same number but aren’t:- Home → “Orders to fulfill” widget: this is the same definition (paid + unfulfilled) but Shopify excludes
SCHEDULEDfrom the widget by default. The widget will read lower than this card on subscription / B2B-heavy stores. - Orders → Filter “Fulfillment status: Unfulfilled” only: misses partials and scheduled. Lower count.
- Apps like ShipStation backlog: shows orders that have arrived in the 3PL queue but not yet shipped. Often lags Shopify by 5 to 30 minutes due to ShipStation pull cadence.
- Settings → Locations → Inventory at this location: shows reserved inventory not unfulfilled orders. Different concept.
| Reason | Direction | Why |
|---|---|---|
| Sync lag | Either, transient | Order webhooks fire within seconds; the OpenSearch index can lag 5 to 15 minutes during heavy writes (sale launches, viral moments). The card is a 5-min-lagged view of Admin. |
| Status inclusion | Theirs lower | Shopify’s Orders to fulfill widget defaults to excluding SCHEDULED. This card includes scheduled by default. Configurable per workspace in Nerve Centre → Settings. |
| Time zone | Negligible | This is a real-time count, not a windowed metric, so time zone doesn’t affect it the way it does for date-bucketed cards. |
| Multi-location | Either | A single order with line items fulfilled from multiple locations is PARTIALLY_FULFILLED until the LAST location ships. The card counts it as 1 unfulfilled order; Shopify Admin per-location views may double-count. |
| Test orders | Ours slightly higher | Shopify Admin can hide test orders. Vortex IQ does not yet filter Order.test. |
| Pre-orders / draft orders | Excluded from both | Draft orders aren’t in the Order index until completed. Pre-orders are usually SCHEDULED and counted; if a merchant uses an app that creates a custom status, behaviour varies. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
datadog.dd_incident_count | Indirect leading indicator, when 3PL or warehouse systems alert in Datadog, unfulfilled count climbs within hours | Only useful if the merchant has connected fulfilment infrastructure to Datadog. |
newrelic.nr_incident_count | Same as Datadog, different vendor | Same caveat. |
shopify_xc_revenue_at_risk_from_incident | Composite, surfaces £/min of orders sitting unfulfilled during an incident | Use during ops outages. |
Known limitations / merchant FAQs
Why does this card include scheduled orders? Because they’re paid and not yet fulfilled, that’s the literal definition. But operationally, scheduled orders (subscription billings, B2B batch shipments, pre-orders) are intentional: the merchant doesn’t want to ship them today. To exclude scheduled, change the workspace setting in Nerve Centre → Settings → Unfulfilled Orders to setinclude_scheduled: false. The default is true to match Shopify’s order-list raw count.
My count climbs every Friday and clears every Tuesday. Is that a problem?
No, that’s healthy. Most merchants don’t pick / pack on weekends, so Friday-Sunday orders accumulate in OPEN until Monday morning when the warehouse team starts. The Tuesday EOD clear is the operational SLA. If the count fails to clear by Tuesday EOD, that IS the alarm signal, the standard Mon-Tue accumulation isn’t.
Why is this card different from my Shopify “Orders to fulfill” widget?
Two reasons. (1) Sync lag: the card is 5 to 15 minutes behind real-time because it reads a periodically-indexed snapshot, not Shopify’s live Admin DB. (2) Scheduled-orders inclusion: the Shopify widget excludes SCHEDULED by default; this card includes them. The Shopify Admin order-list with full filters applied is the closest like-for-like.
Does this include orders pending payment?
No. Only orders with displayFinancialStatus IN ('PAID', 'PARTIALLY_PAID', 'AUTHORIZED') count. Pending and expired orders are excluded because the goods aren’t owed until payment is captured. This means the card represents “orders we have a fulfilment commitment on”, not “all open orders”.
My subscription store, are recurring billings counted?
Yes, each recurring billing creates a new order with its own fulfilment lifecycle. Subscription brands typically see this card balloon on the bulk-billing day (1st of month, 15th of month, etc) then drain over 5 to 7 days as the warehouse ships the batch. The Mon-Tue weekly pattern overlays the monthly bulk-billing pattern; both are healthy.
B2B / wholesale orders, why do they dominate the count?
B2B orders are usually marked SCHEDULED because wholesale buyers schedule shipments weeks in advance. A handful of large B2B orders can swamp the count even when the DTC operation is running cleanly. Filter by tag Wholesale in Shopify Admin to see the DTC-only view, or set include_scheduled: false in Vortex IQ workspace settings.
The count alerts at >10. Is that the right threshold?
For DTC brands doing 100 to 500 orders / day, yes, an unfulfilled count consistently above 10 means orders are sitting >24 hours which is poor SLA. For higher-volume merchants (5,000+ orders / day), the threshold should be 50 to 100. For subscription stores on bulk-shipping days, the threshold should temporarily lift to several hundred. Configurable in Nerve Centre → Alerts.
Can I see how long each order has been sitting unfulfilled?
Not from this card today, but Shopify Admin → Orders → Filter Unfulfilled → Sort by date gives the same view. The “age in queue” view is on the Vortex IQ roadmap; the planned card surfaces orders > 48h old separately.
Action playbook when this card alerts:
- Open the order list. Sort by
createdAtascending (oldest first). - Triage by shipping speed: filter for
shippingLines.title= “Express” / “Next Day” / “Overnight”. These breach customer-trust fastest if delayed. - Triage by value: filter for
totalPrice > £200. High-value orders cancelling becomes a refund event. - Open Products with Zero/Negative Stock. If
PARTIALLY_FULFILLEDis climbing, the bottleneck is inventory not labour. - If volume-driven (sale week, viral moment): proactively email customer-service to extend SLA messaging.
- If labour-driven (3PL outage, sick day): escalate to fulfilment partner; consider express-courier paid surcharge to recover the SLA.
- After triage: clear
OPENfirst, thenIN_PROGRESS, leaveSCHEDULEDto its planned date.