At a glance
The percentage of orders in the period that were cancelled or voided. Cancellation in Shopify means the merchant (or a Shopify automation) marked the order cancelled before fulfilment, distinct from a refund (which acts on a paid, often shipped order).
| What it counts | COUNT(orders WHERE cancelledAt IS NOT NULL) ÷ COUNT(orders) × 100. Each order is one in the denominator regardless of value. |
| API endpoint | Admin GraphQL. Order.cancelledAt, Order.cancelReason. The card watches cancelledAt (a timestamp; non-null means cancelled) and surfaces cancelReason (CUSTOMER, FRAUD, INVENTORY, DECLINED, OTHER) for diagnosis. |
| VAT / tax treatment | Not applicable (count metric). |
| Shipping | Not applicable (count metric). |
| Discounts | Not applicable (count metric). |
| Refunds | Distinct from cancellation. A cancelled order is usually unpaid or pre-fulfilment; a refund is post-payment, often post-shipment. Some Shopify stores also issue a refund when cancelling a paid pre-shipment order; that order then appears in both Refund Rate and this card. |
| Cancelled / voided orders | These ARE the numerator. A VOIDED payment status alone does not flip the order to cancelled; the merchant must explicitly cancel. |
| Currency | Multi-currency safe (count ratio, no FX). |
| Channels / sources | Not filtered. Online Store, POS, B2B, Buy Button all contribute. POS rarely cancels (the customer walked away with the goods); cancellations skew online. |
| Cancel reason breakdown | CUSTOMER (changed mind), FRAUD (Shopify Protect / manual fraud catch), INVENTORY (oversold, restock), DECLINED (payment authorisation failed post-checkout), OTHER. Each reason needs a different operational response. |
| Time window | 30D vsP |
| Alert trigger | >3% (sustained cancellation rate above 3%, or a vsP spike); driven by sentiment_key: cancellation_rate |
| Roles | owner, operations |
Calculation
Worked example
A US multi-channel home goods brand on Shopify Plus, mid-tier (5,000 to 8,000 orders / month). Period: 12 Apr 26 to 11 May 26.cancelReason | Order count | Share of cancellations | Note |
|---|---|---|---|
INVENTORY | 142 | 47.5% | Oversold on the spring drop, app-driven restocks |
FRAUD | 78 | 26.1% | Shopify Protect auto-cancellations |
CUSTOMER | 51 | 17.1% | Customer requested cancel within 24h |
DECLINED | 22 | 7.4% | Bank declined post-authorisation (saved card) |
OTHER | 6 | 2.0% | Manual ops cancellations, no reason logged |
| Total cancelled | 299 | 100% | |
| Total orders in window | 6,840 |
>3% sentiment threshold. Five things to notice:
- The cause is inventory, not fraud or service. 47.5% of cancellations are
INVENTORY(oversold). Cross-reference Products with Zero/Negative Stock, the spring drop sold past available count because Continue selling when out of stock was on for high-velocity SKUs. The fix is policy (turn off Continue Selling on top-30 SKUs), not customer service. - Fraud cancellations are rising in absolute count. 78 fraud cancellations vs 30 in the prior period. Shopify Protect tightened its risk model (April 2026 update) so more borderline orders are being auto-cancelled. Check the Shopify Plus Fraud Analysis view; if false-positive rate is climbing, log a Shopify support ticket.
- Customer-initiated cancellations are stable. 17% of cancellations from
CUSTOMERis a healthy mix. Those are usually buyer’s-remorse within 24 hours; if the share rises above 30%, look at checkout friction (price shock, shipping cost surprise at the final step). DECLINEDis the silent revenue leak. 22 orders authorised at checkout but the bank declined the capture 24 to 48 hours later. Each of these was a “real” customer who never received goods and may not realise the order was cancelled. Pair with Failed / Pending Charges, this is a checkout / payment-method UX issue.- vsP did the alerting. 1.9% in the prior period was healthy; 4.37% trips the threshold. The 30D-vs-prior-30D comparison catches the structural move; a single bad day at 8% would be smoothed away by the 30D average. Tighten the window if you need same-day catch.
Sibling cards merchants should reference together
Cancellations are the canary. Pair with these to find the cause and act on it:| Card | Why pair it with Cancellation Rate | What the combination tells you |
|---|---|---|
| Cancelled Over Time | The daily / weekly trend. | Catches step-changes the 30D average smooths out. A spike on a specific day is usually a single root cause. |
| Refund Rate | The post-payment / post-shipment counterpart. | Cancellations + refunds together = total order failure rate. Some merchants prefer the combined view. |
| Products with Zero/Negative Stock | The #1 cause of INVENTORY cancellations. | A sustained OOS on a top-30 SKU drives oversells which drive cancellations 24 to 72h later. |
| Fulfillment Rate | When inventory cancellations rise, fulfillment rate drops too. | A simultaneous fulfillment dip + cancellation spike is a classic stockout-induced failure. |
| Financial Status | Surfaces PENDING, AUTHORIZED, VOIDED orders. | DECLINED cancellations correlate with a high VOIDED count. |
| Order Count | The denominator. | A 30% volume spike + flat cancellation count = falling rate; flat volume + rising count = real problem. |
bigcommerce.cancellation_rate | Same definition for agencies running cross-platform. | Documentation cross-link. |
adobe_commerce.cancellation_rate | Same definition for Adobe Commerce stores. | Documentation cross-link. |
Reconciling against the vendor’s own dashboard
Where to look in Shopify Admin: Orders → filter Status: Cancelled and a date range matching this card. The matching count divided by the total order count for that range gives Shopify’s cancellation rate. There is no single dedicated cancellation-rate tile in Shopify Reports; merchants reconstruct it from the Orders list. Other Shopify Admin views that look similar but are not the same:- Reports → Sales by order status: a £-revenue split, not a count rate. Useful for understanding the £ value of cancelled orders.
- Settings → Shopify Protect: the fraud-cancel subset only. Shows protected vs unprotected orders and the fraud-driven cancel decisions.
- Apps like Eva.guru, NoFraud: dedicated fraud apps may auto-cancel before Shopify’s
cancelledAtis set; the timing on the card and the app dashboard can diverge by minutes.
| Reason | Direction | Why |
|---|---|---|
| Time zone | Boundary days | Shopify Admin uses store time zone; Vortex IQ uses UTC. Orders cancelled near midnight on the boundary day fall on different sides. |
| Refund-then-cancel timing | Either | Some merchants refund a paid order (within Shopify) and the order is also marked cancelled. This card counts the cancel; Refund Rate counts the refund. The order appears in both. Shopify’s Status: Cancelled filter shows it once. |
| Test orders | Ours slightly higher | The card does not yet filter Order.test = true. If you cancel test orders frequently they inflate the rate. |
| Multi-store | Per-store | Each Shopify store is a separate integration; the card runs per store. A merchant with 3 stores has 3 cancellation rates. |
| Sync lag | Ours lower for “today” | Webhooks fire within seconds but the OpenSearch index can lag by 5 to 15 minutes. Cancellations made in the last few minutes may not show. |
| Shopify Plus reasons | Extra granularity | Shopify Plus stores expose a richer set of cancelReason values (e.g. STAFF, DECLINED_BY_BANK); basic plans see fewer. The rate is the same; the breakdown differs. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
stripe.failed_charges | DECLINED cancellations correlate with Stripe failed-capture events | Some failed Stripe captures do not result in cancellations (the merchant may retry the charge); not all DECLINED cancels are Stripe (PayPal, Klarna, AfterPay can also decline post-authorisation). |
paypal.paypal_disputes | A subset of fraud cancellations correlate with PayPal disputes | Disputes can also be raised on shipped (non-cancelled) orders; not 1:1. |
Known limitations / merchant FAQs
Why is my cancellation rate spiking? Three usual causes, in order of likelihood:- Inventory oversells. Continue selling when out of stock is on for high-velocity SKUs and they are running into negative stock. Cancellations follow within 24 to 72 hours when the merchant catches up. Cross-reference Products with Zero/Negative Stock.
- Fraud filter tightening. Shopify Protect or a fraud app raised its risk threshold. More borderline orders are being auto-cancelled. Check the fraud-cancel reason share.
- Bank declines on saved cards. A bank-side fraud alert or expired saved cards on a re-engagement campaign can produce a spike of
DECLINEDcancellations days after checkout.
cancelReason jumped most. Each has a different remedy.
Is a cancellation the same as a refund?
No. A cancellation flips cancelledAt on the order before fulfilment; the goods never ship. A refund moves money back to the customer, usually after the goods have shipped (or, less commonly, on a paid-but-not-yet-shipped order). Some workflows do both, mark cancelled and issue a refund, in which case the order shows in both this card and Refund Rate.
Why is my POS cancellation rate near zero?
POS orders are paid and goods-handed-over in the same moment. Cancellation post-checkout is rare. Online-store cancellation rates are 5 to 20× higher than POS; do not benchmark POS-heavy stores against pure-DTC peers without filtering channels.
Multi-currency, does this affect the rate?
The rate itself is currency-blind (count over count). The cancel-reason mix can vary by currency / region; e.g. the EU has stronger consumer-protection laws and may produce more CUSTOMER-initiated cancellations within the 14-day cooling-off window. The rate is consistent across currencies; benchmarks differ by region.
Shopify Plus vs basic, any difference?
Plus stores get richer cancelReason values (STAFF, DECLINED_BY_BANK, INVENTORY_NOT_AVAILABLE) and can build automated cancel-on-fraud-flag rules via Flow. Basic stores see the standard 5-reason enum. The card behaves identically; the diagnostic granularity differs.
Refresh cadence?
Webhooks fire within seconds; the OpenSearch index updates within 5 to 15 minutes. The 30D rolling window updates each ingest cycle. The card is suitable for daily standup but not real-time incident triage; for the latter, watch the Shopify Admin Orders list directly.
Is 3% a good threshold?
Industry-typical DTC apparel runs 1 to 2.5%. Multi-channel stores run 2 to 4% (because some channels increase cancel risk). B2B can run 5% or higher (large orders, complex specs, frequent change-of-mind). Set the threshold to 1.5× your trailing 12-week median; that catches genuine moves rather than seasonal noise.
B2B vs DTC, does the card behave differently?
Yes. B2B orders are larger, more often quoted-and-amended pre-fulfilment, and have higher legitimate cancel rates as the buyer’s procurement process changes. A B2B store running at 5 to 8% structural cancellation is not a problem; the same rate on a DTC store is. Filter by B2B tag if your store mixes both, but Shopify’s Order index does not yet expose tags to Vortex IQ; for now, this is a manual mental adjustment.
The card moved this week, what should I do?
- Open Cancelled Over Time. Find the day the rate spiked.
- Pull that day’s cancelled orders in Shopify Admin. Look at the
cancelReasonmix. - If
INVENTORYdominates: open Products with Zero/Negative Stock, turn off Continue Selling on the affected SKUs. - If
FRAUDdominates: review the Shopify Protect decisions; raise a support ticket if false-positives are climbing. - If
DECLINEDdominates: look at payment-gateway logs (Stripe / PayPal). Check whether saved cards expired or a bank issued a fraud-decline pattern. - Email customer-service to extend SLA messaging proactively for cancelled customers.