At a glance
Daily fulfillment rate (FULFILLED ÷ total orders for that day) over the 90-day window. The operational pattern view: where are the dips, what is the day-of-week shape, and is the trend stable?
| What it counts | DATE_HISTOGRAM(day, COUNT(orders WHERE FULFILLED) ÷ COUNT(orders)). Daily ratio; same definition as Fulfillment Rate but in time-series form. |
| API endpoint | Admin GraphQL. Order.displayFulfillmentStatus and Order.fulfillments[]. |
| Bucketing | Orders bucket on Order.createdAt date (not fulfillment date) so the rate is “what share of orders placed today have been fulfilled?”. The most recent bars rise as fulfillment catches up. |
| VAT / tax treatment | Not applicable. |
| Shipping | Not applicable. |
| Discounts | Not applicable. |
| Refunds | Refunded-after-fulfillment orders count as fulfilled. |
| Cancelled / voided orders | Cancelled before fulfillment never reach FULFILLED; they sit in the denominator and drag the rate. |
| Currency | Multi-currency safe (count ratio). |
| Channels / sources | Online + POS + B2B all contribute. POS auto-fulfills, lifting the daily rate on POS-heavy days. |
| Time window | 90D (daily buckets) |
| Alert trigger | None on this card directly; pair with Fulfillment Rate for the alerted aggregate. |
| Roles | owner, operations |
Calculation
Worked example
A UK skincare DTC brand on Shopify Plus, single 3PL warehouse. Period: 12 Feb 26 to 12 May 26.| Week | Avg daily fulfillment rate | Notable days |
|---|---|---|
| 12 Feb to 18 Feb | 92.4% | Steady |
| 19 Feb to 25 Feb | 91.8% | |
| 26 Feb to 04 Mar | 92.1% | |
| 05 Mar to 11 Mar | 88.5% | Spring drop launch, slight backlog |
| 12 Mar to 18 Mar | 79.2% | Stockout cascade, 14 Mar dropped to 68% |
| 19 Mar to 25 Mar | 84.7% | Recovery in progress |
| 26 Mar to 01 Apr | 90.3% | Continue Selling turned off |
| 02 Apr to 08 Apr | 92.6% | Back to baseline |
| 09 Apr to 15 Apr | 91.8% | |
| 16 Apr to 22 Apr | 92.4% | Easter slight bump |
| 23 Apr to 12 May | 92.1% | Steady |
- The 14 Mar 68% trough is the diagnostic moment. A single-day drop to 68% with surrounding days at 79 to 84% pinpoints the cause: that day’s order cohort included a high share of orders for an OOS hero SKU. Cross-reference Products with Zero/Negative Stock for 13-14 Mar.
- The recovery shape (5 days from 79% to 90%) is healthy. Continue Selling was disabled on 16 Mar; the rate climbed steadily as new oversell-orders stopped accumulating. Slow recoveries (>10 days) suggest the fix didn’t address the root cause.
- Day-of-week effect: Mondays are usually 2-4 ppt lower than Wednesdays. Most 3PLs don’t pick on Sunday so Monday morning starts with a backlog. The 30D average smooths this out; daily resolution preserves it. Mondays at the same level as Tuesdays would actually be a problem (it would mean the 3PL is picking weekend orders, which usually signals an emergency rush).
- Spring drop dip + recovery sequence is a textbook stockout cascade. Order volume spiked, hero SKU sold past available count, fulfillment rate dropped, the merchant turned off Continue Selling, the rate recovered. The full lifecycle is visible in 4 weeks.
- POS days don’t show as dips here. A retail-event day with strong POS sales lifts the rate (POS auto-fulfills). Brands running occasional POS pop-ups see Saturdays in pop-up cities measurably higher than Saturdays without.
Sibling cards merchants should reference together
Daily fulfillment rate is the diagnostic timeseries. Pair with these:| Card | Why pair it with Fulfillment Over Time | What the combination tells you |
|---|---|---|
| Fulfillment Rate | The 30D aggregate. | Aggregate alerts; timeseries reveals the day. |
| Fulfillment Breakdown | Status mix on the snapshot date. | Combines the “when” with the “what”. |
| Unfulfilled Orders | Real-time backlog count. | A rising backlog precedes a rate drop here. |
| Products with Zero/Negative Stock | The #1 cause of dips. | OOS days predict rate dips 1-3 days later. |
| Orders Over Time | Volume counterpart. | Orders × rate = fulfilled volume; spikes that crash the rate are usually order-volume-driven. |
| Cancelled Over Time | Cancellation timeseries. | A simultaneous cancel spike + fulfillment dip = stockout cascade. |
datadog.dd_incident_count | Warehouse / 3PL incidents | Incidents lead fulfillment dips by 24-72h. |
Reconciling against the vendor’s own dashboard
Where to look in Shopify Admin: Shopify Admin doesn’t have a single fulfillment-rate-over-time chart. Reconstruct from:- Orders → filter by date and fulfillment status, count manually per day.
- [Apps like ShipStation, Better Reports]: build daily fulfillment-rate views.
- Settings → Shipping & delivery → Performance (Plus only): on-time delivery vs promised date, a stricter metric.
- Reports → Sales by fulfillment status: revenue split, complementary view.
| Reason | Direction | Why |
|---|---|---|
| Time zone | Boundary days | Standard time-zone gap. |
| Bucket alignment | Either | Daily buckets in store time zone vs UTC for window edges. |
| Sync lag | Ours lower for “today” | 5 to 15 minute index lag. The latest day rises throughout the day. |
| Multi-location | Either | Shopify can split by location; this card aggregates. |
| Test orders | Ours slightly higher | Test orders not filtered. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
datadog.dd_incident_count | Incidents predict dips 24-72h later | Indirect; only useful if 3PL monitoring is connected. |
shopify_xc_revenue_at_risk_from_incident | Live incident £/min | Pair on the dashboard during ops outages. |
Known limitations / merchant FAQs
Why does the latest day’s bar look low? Sync lag plus partial-day. Today’s bar rises throughout the day as fulfillments complete. Yesterday and earlier are caught up. My weekly pattern shows Monday lows, why? Backlog. Most warehouses don’t pick on Sunday; Monday’s order cohort starts unfulfilled and catches up over Mon-Tue. A specific day shows a dip; how do I diagnose?- Cross-reference Products with Zero/Negative Stock for that day and the preceding 1-3 days.
- Cross-reference Cancelled Over Time; a simultaneous spike confirms a stockout cascade.
- Check 3PL / warehouse status on that day; an outage often shows up as a single-day dip.
- Check order volume; an unusually high-volume day with normal pick capacity will dip the rate mechanically.
- Open Fulfillment Breakdown for the affected days, find the bucket bleeding (OPEN, PARTIALLY_FULFILLED, IN_PROGRESS).
- If OPEN dominates, capacity issue at the 3PL; escalate.
- If PARTIALLY_FULFILLED dominates, stockout on a specific SKU.
- If IN_PROGRESS dominates, work in flight but not flipping; check whether 3PL is marking complete (sometimes API fail).
- Pair with customer-service comms; preempt SLA-breach inquiries.