Skip to main content
Card class: HeroCategory: Ecommerce Platform
Orders fully fulfilled / total orders. <90% means the merchant is breaking shipping promises.

At a glance

Share of paid orders fully fulfilled (every line item shipped) over the rolling 30 days. The single number that tells the founder whether shipping promises are being kept. Below 90% means the brand is publicly losing trust on delivery; APAC merchants typically run at 95 to 98% in steady state.
What it countsCOUNT(orders WHERE fulfillment_status = 'fulfilled') / COUNT(paid orders) over rolling 30D. Partial-fulfillment counts as not fulfilled even if 9 of 10 lines have shipped.
API endpointGET /v1/orders filtered by fulfillment_status and financial_status. Webhook updates on fulfillment.created and fulfillment.cancelled.
NumeratorOrders with all lines shipped (fulfillment_status = 'fulfilled').
DenominatorPaid or partially-paid orders only. Cancelled and unpaid orders are excluded from both numerator and denominator.
In-flight ordersOrders that have not reached their fulfilment deadline are still excluded from this calculation; they neither pass nor fail until the merchant or warehouse acts.
APAC same-day expectationHK / TW / SG fashion merchants typically promise same-day dispatch on weekday orders before 3pm. The fulfilment-rate floor for that promise is roughly 96%; 90% is the universal Shopline alert threshold.
Pre-ordersTag-excluded if the merchant uses a pre-order convention; otherwise pre-orders inflate the unfulfilled count and depress this rate until release date.
Time window30D vsP.
Alert trigger<90%. Hero-tier; below this floor, ops needs to intervene immediately.
Sentimentfulfillment_rate. Direct gauge; higher is better.
Rolesowner, operations.

Calculation

Calculated automatically from your Shopline data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.

Worked example

An APAC fashion brand running a Hong Kong Shopline store, rolling 30D ending 27 Apr 26.
MetricThis 30DPrior 30DChange
Total paid orders712658+8.2%
Fully fulfilled656638+2.8%
Partial fulfilment188+125%
Unfulfilled3812+217%
Fulfillment Rate (this card)92.1%96.9%-4.8pp
Fulfillment Rate = 656 / 712 = 92.1%
Above the 90% alert floor but +4.8pp below the prior 30D
What it means. 92.1% is on the edge. The brand is roughly 15 unfulfilled-order-equivalents away from breaching the 90% floor. The trend (up +217% on unfulfilled count) is the signal: the warehouse is falling behind faster than order volume is rising. The 18 partial-fulfilment orders are mostly cross-warehouse splits (HK warehouse 1 shipped, warehouse 2 stalled), pointing to a synchronisation issue between locations. The 38 unfulfilled cluster around the past 4 days, indicating the backlog is recent rather than stale. The action. Two-week recovery plan: (1) reduce cross-warehouse splits by routing all eligible orders to warehouse 1 (faster dispatch) and only splitting when stock requires it, (2) bring on a Saturday half-day shift for the next 4 weekends to clear the recent backlog. Expected trajectory: back to 95%+ within 14 to 21 days, comfortably above the 90% alert floor and within the brand’s own 96% target.

Sibling cards merchants should reference together

CardWhy it matters next to fulfilment rateWhat the combination tells you
Unfulfilled OrdersReal-time backlog.High unfulfilled count + dropping fulfilment rate = warehouse capacity ceiling reached.
Avg Time to Fulfil (hrs)Continuous-time view.Rising avg time before fulfilment rate drops = early warning; the rate lags the time.
Fulfillment Rate Over TimeThe 90D shape.Spot whether this is a recent break or a structural drift.
Fulfillment Status MixThe mix view.If the gap is mostly partial rather than unfulfilled, the issue is cross-warehouse coordination, not capacity.
Refund RateDownstream.Late fulfilment correlates with refund rate 7 to 14 days later (delivery-time refunds).
Total RevenueThe headline.Fulfilment rate is the leading indicator for revenue continuity; below 90% revenue eventually follows down.
Inventory Alerts (OOS)Blocking input.OOS variants on paid orders cannot fulfil; the gap may be inventory, not capacity.
Shopline Health ScoreComposite.Fulfilment rate is one of 5 health-score inputs; weighted heavily because it is leading.

Reconciling against the vendor’s own dashboard

Where to look in Shopline’s own dashboard:
Shopline Admin -> Reports -> Fulfillment performance The “Fulfillment rate” tile gives the same figure; mobile app shows the same percentage in the dashboard summary.
Why our number may legitimately differ from Shopline’s Admin:
ReasonDirectionWhy
Time zoneBoundary daysShopline Admin uses store-local; we use UTC.
In-flight handlingEitherShopline Admin sometimes counts in-flight orders as in-progress; we exclude until they pass or fail.
Partial countingMarginalPartials count as not-fulfilled in our card; some Shopline reports count them as 0.5 of a fulfilment.
Sync lagOurs occasionally lowerWebhook-driven; under 60s typically.
Pre-ordersEitherTag-based exclusion may not match Shopline’s own filter.
Internal identity: shopline_fulfillment_rate = 1 - shopline_unfulfilled_count_excluding_in_flight / shopline_paid_order_count over the same 30D window.

Known limitations / merchant FAQs

What is a healthy fulfillment rate for an APAC Shopline merchant? 95 to 98% in steady state for fashion and homeware. Above 98% is rare without dedicated cut-off-aligned warehouse staffing. Below 90% is structural and triggers the alert. My fulfilment rate dropped to 88%; what should I check first? (1) shopline_unfulfilled for the real-time backlog, (2) shopline_avg_fulfilment_hours for the upstream lag, (3) shopline_inventory_alerts for OOS-blocked orders, (4) shopline_fulfillment_breakdown to see whether the issue is unfulfilled or partial. Why does this exclude in-flight orders? Because they have not yet had a chance to pass or fail. Including them as failures would mechanically penalise the rate every time an order is paid; including them as passes would inflate it. The standard ecommerce convention is “exclude until resolution”, which we follow. Does this include orders that were eventually fulfilled but late? Yes; this card measures whether the order was fulfilled at all, not whether it was on-time. For on-time fulfilment look at shopline_avg_fulfilment_hours. My fulfilment rate is 100% but my refund rate spiked. What is happening? The orders shipped, but the buyers were unhappy on arrival. Common causes: damaged in transit, sizing wrong, photo / reality mismatch. See shopline_refund_rate for the reason-code breakdown. Does this account for split shipments across multiple warehouses? Yes. Partial fulfilments count as not-fulfilled until every line ships. APAC merchants with multiple warehouses (HK + Shenzhen, or TW + JP cross-border) often see lower headline rates than single-warehouse stores until the cross-warehouse split is rationalised. Why is the alert at 90% not 95%? Because the alert is a “below this is bad” floor, not a “this is the goal” target. 90% is the line at which buyer trust starts to erode publicly (reviews, social media); 95% is what well-run operations target. Setting the alert at 95% would generate too many notifications during normal operational variance. My subscription orders count toward this rate. Is that right? Yes. Each subscription billing cycle is a separate order in Shopline; if it ships on time it counts as fulfilled. If the merchant runs heavy subscription volume, fulfilment rate is dominated by the subscription fulfilment cadence, which is usually more reliable than one-time orders. Does B2B / wholesale order count? Yes. The card does not segment B2B from B2C unless the merchant configures a tag-based exclusion. Most APAC Shopline merchants run B2C only.

Tracked live in Vortex IQ Nerve Centre

Fulfillment Rate is one of hundreds of KPI pulses Vortex IQ tracks across Shopline 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.