Backlog of paid orders aged past the 48h fulfilment SLA. Surfaces 3PL/warehouse breakage in real time.
At a glance
A live count of paid orders that have been sitting indisplayFulfillmentStatus IN ('OPEN','UNFULFILLED','IN_PROGRESS')for more than 48 hours sincecreatedAt. The brand-promise alarm: at >20 such orders, customers are about to start emailing.
| What it counts | COUNT(orders WHERE displayFulfillmentStatus != 'FULFILLED' AND displayFinancialStatus IN ('PAID','PARTIALLY_PAID') AND now() - createdAt > 48h). Each unfulfilled paid order older than 48h is one count. |
| VAT / tax treatment | Not applicable, count metric. |
| Shipping | Not applicable; this is about ops pace, not shipping cost. |
| Discounts | Not applicable. |
| Refunds | Excluded; refunded orders typically transition out of OPEN to RESTOCKED. |
| Cancelled / voided orders | Excluded (VOIDED is not unfulfilled, customer never paid). |
| Currency | Multi-currency safe (count metric). |
| Channels / sources | All channels, but POS auto-marks fulfilled at till and almost never appears here. The metric is effectively online-store + B2B. |
| Time window | RT (real-time, computed from latest indexed snapshot) |
| Alert trigger | >20 paid orders unfulfilled >48h, configurable per workspace. Thresholds vary by ops capacity (a 3PL doing 1000 orders/day shrugs at 50 backlog; a small in-house team panics at 20). |
| Sentiment key | fulfillment_rate |
| 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 skincare DTC brand on Shopify Plus, 3PL in Northampton, normal SLA 24-36h. On Tuesday 14 Apr 26 morning, the alert fires: 47 paid orders unfulfilled >48h. Drill-down shows:| Subset | Count | Note |
|---|---|---|
| Friday 11 Apr orders not picked | 18 | Weekend backlog, expected 8-10 |
| Saturday 12 Apr orders | 14 | 3PL doesn’t pick Sat; expected 0 |
| Sunday 13 Apr orders | 11 | Same |
| Monday 14 Apr orders aged >48h | 4 | The new fire, only oldest of Mon’s batch |
| Total alerted (>48h) | 47 |
- Weekend backlog overflow. Mon mornings always show some carry-over from weekend. 18 Fri orders unpicked is double the normal 8-10. This means picking didn’t catch up Friday afternoon either, the fire started before the weekend.
- 3PL staffing shortfall. Tuesday 14 Apr is post-Easter. Many 3PLs run skeleton crew over UK Easter Monday. The Saturday and Sunday counts (which would be zero on a normal weekend) confirm this. Staffing returns Tue.
- Email customers proactively. Customer-service queries about “where is my order?” peak at 72-96h. The brand has 24-48h to email shipping-update apologies before the inbox floods.
- Stockout overlay. Cross-reference Products with Zero/Negative Stock. If 5+ of the 47 backlog orders contain a stockout SKU, that subset cannot be fulfilled at all and needs partial-ship or refund-and-replace decisions.
- The clock matters. Each hour these orders sit unfulfilled, customer-trust degrades. Shopify’s fulfilment status doesn’t fire customer-facing notifications about delay; the brand has to. Pair with email automation to catch >48h orders proactively.
Sibling cards merchants should reference together
The fulfilment-delay alert is the trigger. The diagnostic cards:| Card | Why pair it with this alert |
|---|---|
| Fulfillment Rate | The trailing 30D ratio. The alert is real-time; the rate is the lag indicator that the alert was right. |
| Unfulfilled Orders | The full unfulfilled list (not age-filtered). Use this for the live ops queue. |
| Fulfillment Breakdown | Status-bucket split. Tells you whether the backlog is OPEN (not started) or IN_PROGRESS (warehouse working). |
| Products with Zero/Negative Stock | The single most common cause of fulfilment delay is a stockout on a high-velocity SKU. Cross-reference. |
| Cancellation Rate | Persistent delay drives cancellations. A simultaneous spike in this alert and cancellation rate is a backlog-induced churn signal. |
| Fulfillment Over Time | Trend chart; catches step-changes a 30D average smooths. |
| Datadog Incident Count (when connected) | If 3PL warehouse alerts in Datadog, this card fires within 24-72h. |
Reconciling against the vendor’s own dashboard
Where to look in Shopify Admin:Shopify Admin → Orders → Filter byThis filter combination matches the alert population. Save it as a custom view for quick access during incidents. Other Shopify Admin views:Fulfillment status: UnfulfilledANDDate: more than 2 days ago
- Home → “Orders to fulfill” widget: real-time backlog count (all-time, not age-filtered). Shows everything, including <48h fresh orders.
- Settings → Shipping & delivery → Performance (Shopify Plus only): on-time-delivery analytics; uses promised delivery date, stricter than this alert.
- Apps like ShipStation / ShipBob / Shippo: their dashboards show pick-and-pack queues, slightly downstream of this alert.
| Reason | Direction | Why |
|---|---|---|
| Hour-window precision | Either | Shopify’s filter “more than 2 days ago” snaps to 48h precisely from current time; our alert uses the same. Should match within sync-lag tolerance (5-15 min). |
| Time zone | Boundary | Shopify Admin in store time zone; Vortex IQ in UTC. The 48h cutoff lands at slightly different moments. |
| Test orders | Ours slightly higher | Shopify Admin can hide test orders. We don’t yet filter Order.test. |
| Status mapping | Theirs higher | Shopify’s “Unfulfilled” can include PARTIALLY_FULFILLED. We map to the strict-unfulfilled set. |
| Sync lag | Ours lower for “right now” | Most-recent 5 to 15 minutes of fulfillment-state changes may not be in. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
datadog.dd_incident_count | Indirect, leading indicator | A 3PL Datadog incident fires hours-to-days before this alert; pair on a single dashboard during ops outages. |
zendesk.zd_ticket_volume | Lagging | Customer-service tickets typically rise 24-48h after this alert fires; the magnitude is roughly 5-10% of the alert count. |
Known limitations / merchant FAQs
Why is the threshold 48h? 48h is the implicit Shopify ecommerce SLA: customers expect their order to ship within two business days. Beyond 48h, customer-service queries spike sharply. The 48h cutoff is configurable per workspace; brands with explicit longer SLAs (made-to-order furniture, monogrammed gifts) should raise this to 5-7 days. Why is the count threshold 20? A heuristic floor for “actionable backlog”. Below 20, normal day-to-day ops absorbs the queue; above 20, manual intervention is needed. The threshold should scale with order volume:- <200 orders/day: alert at 10-15.
- 200-1,000 orders/day: alert at 20-50.
- >1,000 orders/day: alert at 100+.
- Open the order list filtered to >48h unfulfilled. Sort by age desc.
- Identify the cause subsets: stockouts, 3PL backlog, manual-hold orders, large-volume B2B, etc.
- For stockout subset: decide ship-partial, hold-and-wait, or refund-and-relist. Each affects the customer differently.
- For 3PL backlog subset: escalate to 3PL ops manager. Request dedicated picker for top-priority orders (often paid express or VIP customers).
- For all >48h orders: trigger proactive customer email apologising for delay with realistic shipping ETA. This single action prevents 30-50% of the customer-service tickets that would otherwise come.
- Monitor the count hourly during the incident. The count should fall once corrective action is in place.
- All weekend orders aged exactly to 47h when alert was checked: not yet over threshold. Vortex IQ runs the check every 5 min, so this gap is rare.
- Threshold misconfigured high (e.g. 100): low-volume brands never trip it.
- Status-mapping edge cases: orders stuck in
SCHEDULED(B2B) orON_HOLDmay not register as unfulfilled depending on the indexer config.
- Audit your SLA promise vs your actual capacity. If you promise 48h but consistently deliver 72h, change the promise.
- Investigate fulfilment workflow steps for bottleneck (label-print, pick, pack, manifest, dispatch). One stage is usually the bottleneck.
- Consider 3PL alternative or expand to multi-3PL routing.
- Negotiate weekend coverage if weekend orders are >20% of total.
- Build an ops dashboard combining this card, Fulfillment Rate, and warehouse capacity metrics for proactive management.