> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vortexiq.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Fulfilment Delay Alert, Shopify

> Backlog of paid orders aged past the 48h fulfilment SLA. Surfaces 3PL/warehouse breakage in real time. How to read it, why it matters, and how to act on it.

**Metrics type:** [Supporting Metrics](/nerve-centre/overview#metrics-types-explained)  •  **Category:** [Ecommerce Platform](/nerve-centre/connectors#connectors-by-type)

> 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 in `displayFulfillmentStatus IN ('OPEN','UNFULFILLED','IN_PROGRESS')` for more than 48 hours since `createdAt`. 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** |                                          |

Trigger reasons:

1. **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.
2. **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.
3. **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.
4. **Stockout overlay.** Cross-reference [Products with Zero/Negative Stock](/nerve-centre/kpi-cards/shopify/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.
5. **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.

**Recovery shape:** typical 3PL-staffing backlog clears in 3-5 working days. The alert count usually falls 30-40% per working day once staff are back, returning to baseline by Thu/Fri.

## 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](/nerve-centre/kpi-cards/shopify/fulfillment-rate)                                   | The trailing 30D ratio. The alert is real-time; the rate is the lag indicator that the alert was right.                            |
| [Unfulfilled Orders](/nerve-centre/kpi-cards/shopify/unfulfilled-orders)                               | The full unfulfilled list (not age-filtered). Use this for the live ops queue.                                                     |
| [Fulfillment Breakdown](/nerve-centre/kpi-cards/shopify/fulfillment-status)                            | Status-bucket split. Tells you whether the backlog is OPEN (not started) or IN\_PROGRESS (warehouse working).                      |
| [Products with Zero/Negative Stock](/nerve-centre/kpi-cards/shopify/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](/nerve-centre/kpi-cards/shopify/cancellation-rate)                                 | Persistent delay drives cancellations. A simultaneous spike in this alert and cancellation rate is a backlog-induced churn signal. |
| [Fulfillment Over Time](/nerve-centre/kpi-cards/shopify/fulfillment-rate-over-time)                    | Trend chart; catches step-changes a 30D average smooths.                                                                           |
| [Datadog Incident Count](/nerve-centre/datadog/dd_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 by `Fulfillment status: Unfulfilled` AND `Date: more than 2 days ago`**

This filter combination matches the alert population. Save it as a custom view for quick access during incidents.

Other Shopify Admin views:

* **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.

**Why our number may legitimately differ from Shopify Admin:**

| 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.                                                                                       |

**Cross-connector reconciliation:**

| Card                                                                   | Expected relationship       | What causes legitimate divergence                                                                                         |
| ---------------------------------------------------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| [`datadog.dd_incident_count`](/nerve-centre/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`](/nerve-centre/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. |

***

<details>
  <summary><em>Documentation cross-reference (for agencies running multiple platforms)</em></summary>

  * [`bigcommerce.shp_alert_fulfilment_delay`](/nerve-centre/bigcommerce/shp_alert_fulfilment_delay)
  * [`adobe_commerce.shp_alert_fulfilment_delay`](/nerve-centre/adobe_commerce/shp_alert_fulfilment_delay)
</details>

## 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+.

Configurable in *Nerve Centre → Alerts → Thresholds*.

**My category has structurally long lead times (made-to-order). Is this card useful?**
Less directly. For made-to-order, the SLA is your manufacturing lead time, not 48h. Reconfigure to "orders unfulfilled past your SLA". The alert population is then your true backlog above promised dates.

**Why does this alert fire on Mondays even when ops are fine?**
Weekend carry-over. Most 3PLs and in-house warehouses don't pick Sat-Sun. Friday afternoon orders sit until Monday morning, naturally crossing 48h on Monday. To avoid Mon false-positives, configure the alert to use *business hours* rather than calendar hours.

**Does this include B2B / wholesale orders?**
Yes by default. B2B orders typically have longer fulfilment SLAs (often weeks). Filter B2B orders out of the alert if their long fulfilment is contractually agreed; otherwise they pollute the headline count.

**What does the action playbook look like?**

1. **Open the order list** filtered to >48h unfulfilled. Sort by age desc.
2. **Identify the cause subsets**: stockouts, 3PL backlog, manual-hold orders, large-volume B2B, etc.
3. **For stockout subset**: decide ship-partial, hold-and-wait, or refund-and-relist. Each affects the customer differently.
4. **For 3PL backlog subset**: escalate to 3PL ops manager. Request dedicated picker for top-priority orders (often paid express or VIP customers).
5. **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.
6. **Monitor the count hourly** during the incident. The count should fall once corrective action is in place.

**Why would this alert NOT fire when fulfilment is broken?**
Three traps:

1. **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.
2. **Threshold misconfigured high** (e.g. 100): low-volume brands never trip it.
3. **Status-mapping edge cases**: orders stuck in `SCHEDULED` (B2B) or `ON_HOLD` may not register as unfulfilled depending on the indexer config.

**Does cancelling an order clear it from the count?**
Yes. Cancellation transitions the order out of unfulfilled to VOIDED or RESTOCKED. The count drops in real-time as you cancel.

**Action playbook for repeated alerts (chronic backlog):**

1. Audit your SLA promise vs your actual capacity. If you promise 48h but consistently deliver 72h, change the promise.
2. Investigate fulfilment workflow steps for bottleneck (label-print, pick, pack, manifest, dispatch). One stage is usually the bottleneck.
3. Consider 3PL alternative or expand to multi-3PL routing.
4. Negotiate weekend coverage if weekend orders are >20% of total.
5. Build an ops dashboard combining this card, [Fulfillment Rate](/nerve-centre/kpi-cards/shopify/fulfillment-rate), and warehouse capacity metrics for proactive management.

***

### Tracked live in Vortex IQ Nerve Centre

*Fulfilment Delay Alert* is one of hundreds of KPI pulses Vortex IQ tracks across Shopify and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English.

[Start for free](https://app.vortexiq.ai/login) or [book a demo](https://www.vortexiq.ai/contact-us) to see this metric running on your own data.
