Skip to main content
Card class: Non-HeroCategory: Ecommerce Platform

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 countsDATE_HISTOGRAM(day, COUNT(orders WHERE FULFILLED) ÷ COUNT(orders)). Daily ratio; same definition as Fulfillment Rate but in time-series form.
API endpointAdmin GraphQL. Order.displayFulfillmentStatus and Order.fulfillments[].
BucketingOrders 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 treatmentNot applicable.
ShippingNot applicable.
DiscountsNot applicable.
RefundsRefunded-after-fulfillment orders count as fulfilled.
Cancelled / voided ordersCancelled before fulfillment never reach FULFILLED; they sit in the denominator and drag the rate.
CurrencyMulti-currency safe (count ratio).
Channels / sourcesOnline + POS + B2B all contribute. POS auto-fulfills, lifting the daily rate on POS-heavy days.
Time window90D (daily buckets)
Alert triggerNone on this card directly; pair with Fulfillment Rate for the alerted aggregate.
Rolesowner, operations

Calculation

DATE_HISTOGRAM rate(displayFulfillmentStatus=FULFILLED)
  WHERE date BETWEEN [period_start, period_end]

Worked example

A UK skincare DTC brand on Shopify Plus, single 3PL warehouse. Period: 12 Feb 26 to 12 May 26.
WeekAvg daily fulfillment rateNotable days
12 Feb to 18 Feb92.4%Steady
19 Feb to 25 Feb91.8%
26 Feb to 04 Mar92.1%
05 Mar to 11 Mar88.5%Spring drop launch, slight backlog
12 Mar to 18 Mar79.2%Stockout cascade, 14 Mar dropped to 68%
19 Mar to 25 Mar84.7%Recovery in progress
26 Mar to 01 Apr90.3%Continue Selling turned off
02 Apr to 08 Apr92.6%Back to baseline
09 Apr to 15 Apr91.8%
16 Apr to 22 Apr92.4%Easter slight bump
23 Apr to 12 May92.1%Steady
Five things to notice:
  1. 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.
  2. 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.
  3. 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).
  4. 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.
  5. 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:
CardWhy pair it with Fulfillment Over TimeWhat the combination tells you
Fulfillment RateThe 30D aggregate.Aggregate alerts; timeseries reveals the day.
Fulfillment BreakdownStatus mix on the snapshot date.Combines the “when” with the “what”.
Unfulfilled OrdersReal-time backlog count.A rising backlog precedes a rate drop here.
Products with Zero/Negative StockThe #1 cause of dips.OOS days predict rate dips 1-3 days later.
Orders Over TimeVolume counterpart.Orders × rate = fulfilled volume; spikes that crash the rate are usually order-volume-driven.
Cancelled Over TimeCancellation timeseries.A simultaneous cancel spike + fulfillment dip = stockout cascade.
datadog.dd_incident_countWarehouse / 3PL incidentsIncidents 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.
Other Shopify Admin 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.
Why our number may legitimately differ from Shopify Admin:
ReasonDirectionWhy
Time zoneBoundary daysStandard time-zone gap.
Bucket alignmentEitherDaily buckets in store time zone vs UTC for window edges.
Sync lagOurs lower for “today”5 to 15 minute index lag. The latest day rises throughout the day.
Multi-locationEitherShopify can split by location; this card aggregates.
Test ordersOurs slightly higherTest orders not filtered.
Cross-connector reconciliation:
CardExpected relationshipWhat causes legitimate divergence
datadog.dd_incident_countIncidents predict dips 24-72h laterIndirect; only useful if 3PL monitoring is connected.
shopify_xc_revenue_at_risk_from_incidentLive incident £/minPair 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?
  1. Cross-reference Products with Zero/Negative Stock for that day and the preceding 1-3 days.
  2. Cross-reference Cancelled Over Time; a simultaneous spike confirms a stockout cascade.
  3. Check 3PL / warehouse status on that day; an outage often shows up as a single-day dip.
  4. Check order volume; an unusually high-volume day with normal pick capacity will dip the rate mechanically.
Why do my Saturdays look higher than Mondays? POS lift. Retail-event Saturdays auto-fulfill at the till, raising the daily rate. Online-only stores see flatter weekday patterns. Multi-currency, any impact? None on the count ratio. Shopify Plus vs basic? Plus stores can run multi-location flows that distribute fulfillment across warehouses; the rate may show smoother patterns. Basic stores with one warehouse show sharper weekly cycles. Refresh cadence? 5 to 15 minute index lag. B2B vs DTC? B2B SCHEDULED orders sit in the denominator for days/weeks before flipping to FULFILLED, dragging the rate. Mixed stores benefit from filtering by tag. The card shows a sustained dip, what should I do?
  1. Open Fulfillment Breakdown for the affected days, find the bucket bleeding (OPEN, PARTIALLY_FULFILLED, IN_PROGRESS).
  2. If OPEN dominates, capacity issue at the 3PL; escalate.
  3. If PARTIALLY_FULFILLED dominates, stockout on a specific SKU.
  4. If IN_PROGRESS dominates, work in flight but not flipping; check whether 3PL is marking complete (sometimes API fail).
  5. Pair with customer-service comms; preempt SLA-breach inquiries.

Tracked live in Vortex IQ Nerve Centre

Fulfillment Rate Over Time 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 or book a demo to see this metric running on your own data.