At a glance
Order distribution by displayFulfillmentStatus. The operational health view: how many orders are fulfilled, in progress, partially fulfilled, restocked, or unfulfilled?
| What it counts | GROUP BY displayFulfillmentStatus. Each order contributes one to its status bucket. Statuses: FULFILLED, PARTIALLY_FULFILLED, IN_PROGRESS, OPEN, UNFULFILLED, SCHEDULED, RESTOCKED, VOIDED. |
| API endpoint | Admin GraphQL. Order.displayFulfillmentStatus. |
| State semantics | FULFILLED = all line items shipped; PARTIALLY_FULFILLED = some shipped; IN_PROGRESS = pick-and-pack in flight; OPEN / UNFULFILLED = nothing shipped yet; SCHEDULED = future-fulfillment scheduled (B2B common); RESTOCKED = cancellation with restock; VOIDED = cancellation without restock. |
| VAT / tax treatment | Not applicable. |
| Shipping | Not applicable directly. |
| Discounts | Not applicable. |
| Refunds | An order can be both REFUNDED (financial status) and FULFILLED (fulfillment status); the two states are independent. |
| Cancelled / voided orders | VOIDED and RESTOCKED are their own buckets. |
| Currency | Multi-currency safe. |
| Channels / sources | Online + POS + B2B all contribute. POS auto-fulfills at checkout (FULFILLED). B2B often has SCHEDULED orders. |
| Multi-location stores | An order from multiple locations may flip FULFILLED only when the LAST location ships. Partials in multi-location are common. |
| Time window | 30D (single window) |
| Alert trigger | None on this card directly; pair with Fulfillment Rate for the alerted ratio. |
| Roles | owner, operations |
Calculation
Worked example
A US apparel brand on Shopify Plus. Period: 12 Apr 26 to 11 May 26.displayFulfillmentStatus | Order count | Share | Note |
|---|---|---|---|
FULFILLED | 5,820 | 85.1% | Shipped |
IN_PROGRESS | 412 | 6.0% | Pick-pack in flight |
PARTIALLY_FULFILLED | 218 | 3.2% | Some line items shipped |
OPEN / UNFULFILLED | 184 | 2.7% | Nothing shipped, the backlog signal |
SCHEDULED | 102 | 1.5% | B2B and pre-orders |
RESTOCKED | 78 | 1.1% | Cancellations with restock |
VOIDED | 26 | 0.4% | Cancellations without restock |
| Total | 6,840 | 100% |
- 2.7% OPEN is the backlog alarm. 184 orders that have not started picking. Sort the OPEN list by age; anything aged >24h needs ops triage. The combined OPEN + IN_PROGRESS + PARTIALLY_FULFILLED is your real-time work-in-progress; here that is 11.9%, healthy for a busy DTC brand.
- Partials at 3.2% mean SKU stockouts. 218 orders where some items shipped but at least one is backordered. Each is a customer-promise issue. Pair with Line Item Fulfillment for the SKU-level diagnosis; a single OOS hero SKU often dominates.
- SCHEDULED at 1.5% is mostly B2B. Wholesale orders with future ship-dates sit here. If you’re a DTC-only brand and SCHEDULED is non-zero, you’re likely running pre-orders or back-orders; check inventory policy.
- RESTOCKED + VOIDED together = cancellation events. 1.5% combined; cross-reference with Cancellation Rate. RESTOCKED is the customer-friendly path (inventory recovered); VOIDED suggests test orders or fraud cancellations without inventory return.
- POS dominates the FULFILLED bucket disproportionately. A retail-brick brand with strong POS sees 90%+ FULFILLED because POS auto-fulfills at the till. To assess true e-commerce ops health, filter to online-store orders only.
Sibling cards merchants should reference together
The status breakdown is the diagnostic. Pair with these:| Card | Why pair it with Fulfillment Breakdown | What the combination tells you |
|---|---|---|
| Fulfillment Rate | The headline FULFILLED-share metric. | Breakdown shows where the rate’s denominator went. |
| Fulfillment Over Time | Daily timeseries. | Catches step-changes (3PL outage on a specific date). |
| Unfulfilled Orders | Real-time backlog. | The OPEN bucket here ≈ unfulfilled-orders count. |
| Line Item Fulfillment | Per-line-item state. | Diagnoses partials at the SKU level. |
| Products with Zero/Negative Stock | Stockout root cause for partials and opens. | A persistent OOS predicts a rise in OPEN + PARTIALLY_FULFILLED. |
| Cancellation Rate | RESTOCKED + VOIDED counterpart. | Cross-check VOIDED count vs cancellation count. |
datadog.dd_incident_count | 3PL / warehouse incidents. | Operational incidents predict a rise in OPEN + IN_PROGRESS within 24-72h. |
Reconciling against the vendor’s own dashboard
Where to look in Shopify Admin: Orders → filter by Fulfillment status. Counts per filter should align with this card’s bucket counts. Other Shopify Admin views:- Reports → Sales by fulfillment status: a £-revenue split by status; complementary to this count split.
- Settings → Locations: relevant for multi-location stores; affects how partial fulfillment surfaces.
- Apps like ShipStation, ShipBob: 3PL-side fulfillment tracking; should align with the FULFILLED count per their lag.
| Reason | Direction | Why |
|---|---|---|
| Time zone | Boundary days | Standard time-zone gap. |
| Status mapping | Either | Shopify’s “Fulfilled” filter may include PARTIALLY_FULFILLED depending on settings; the card splits them. |
| Multi-location aggregation | Either | Multi-location stores show partials more often in detailed views; the card aggregates. |
| Test orders | Ours slightly higher | Test order filter not applied. |
| Sync lag | Ours lower for “today” | 5 to 15 minute index lag. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
datadog.dd_incident_count | Warehouse / 3PL incidents drive OPEN + IN_PROGRESS up | Indirect signal; only valuable if 3PL monitoring is connected. |
shopify_xc_revenue_at_risk_from_incident | Composite cross-channel risk | Pair on the dashboard during ops outages. |
Known limitations / merchant FAQs
Why is my OPEN bucket high? Three usual causes:- Stockout on a high-velocity SKU. Orders pile up waiting for inventory.
- 3PL or warehouse capacity issue. Pick-and-pack cannot keep up.
- Order volume spike. Sale week or viral moment outpaces fulfillment throughput.
- Open Shopify Admin → Orders → filter Unfulfilled. Sort by age.
- Identify SKUs holding up the oldest orders. Cross-reference with Inventory Alerts.
- For aged-OPEN with no inventory issue, escalate to 3PL ops.
- For volume-spike, accept temporary degradation; protect customer comms with extended SLA messaging.
- Email customers proactively for orders aged >5 days; the brand-trust hit of silence is worse than the operational delay.