At a glance
Daily timeseries of cancelled orders across the last 90 days. The “where” of the cancellation problem: which day did the spike land, was it concentrated, and how does the pattern look week-on-week.
| What it counts | COUNT(orders WHERE cancelledAt::date = day) for each day in the window. Each cancellation lands on the day cancelledAt was set, not on the day the order was created. |
| API endpoint | Admin GraphQL. Order.cancelledAt. The card buckets non-null cancelledAt timestamps by date in store time zone. |
| VAT / tax treatment | Not applicable (count metric). |
| Shipping | Not applicable. |
| Discounts | Not applicable. |
| Refunds | Not the same metric; this card surfaces cancellations only. |
| Cancelled / voided orders | These ARE the metric. |
| Currency | Multi-currency safe (count timeseries, no FX). |
| Channels / sources | Not filtered. Online Store, POS, B2B all contribute. |
| Time window | 90D (daily buckets) |
| Alert trigger | None on this card directly; pair with Cancellation Rate for the alerted rate. |
| Roles | owner, operations |
Calculation
Calculated automatically from your Shopify data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
A UK DTC apparel brand on Shopify. Period: 12 Feb 26 to 12 May 26. Daily cancellation counts, summarised:| Week | Avg cancellations / day | Notable spike days |
|---|---|---|
| 12 Feb to 18 Feb | 4 | None |
| 19 Feb to 25 Feb | 5 | None |
| 26 Feb to 04 Mar | 6 | None |
| 05 Mar to 11 Mar | 22 | 07 Mar (54 cancellations) |
| 12 Mar to 18 Mar | 18 | 14 Mar (38), 15 Mar (44) |
| 19 Mar to 25 Mar | 9 | None |
| 26 Mar to 01 Apr | 5 | None |
| 02 Apr to 08 Apr | 4 | None |
| 09 Apr to 12 May | 4 to 6 | Stable |
- The 07 Mar spike is single-day. 54 cancellations on a Friday vs a 4 to 6 baseline. A pull of those orders shows 47 of 54 had
cancelReason = INVENTORY. Cross-reference Products with Zero/Negative Stock on 06 Mar; the spring drop launched 04 Mar and oversold the linen-shirt SKU within 48 hours. - The 14 to 15 Mar second wave is the lag effect. Customers who placed orders on 06 to 07 Mar against the oversold SKU were cancelled in batch on 14 to 15 Mar once the merchant’s ops team caught up. The “spike” is two related events 8 days apart, not two separate causes.
- Returning to baseline by 19 Mar means the fix worked. Continue Selling was turned off on the affected SKUs 16 Mar; cancellations fell back to 5 to 9 / day within 72 hours. The card’s fast return to baseline confirms the diagnosis and fix.
- Daily resolution beats 30D averages for diagnosis. The Cancellation Rate card showed a 30D rolling rate of 4.3% for most of March; the 30D figure does not tell you which day the problem started. This timeseries does.
- Day-of-week patterns matter. Cancellations skew toward Tuesday-Wednesday in the steady state, when ops teams process the previous weekend’s fraud-flagged or oversold orders. A spike on a Friday or Saturday is unusual and worth investigating; a spike on a Tuesday is often just batch processing.
Sibling cards merchants should reference together
The timeseries is the diagnostic tool. Pair with these to find the cause and the fix:| Card | Why pair it with Cancelled Over Time | What the combination tells you |
|---|---|---|
| Cancellation Rate | The 30D-vs-prior-30D ratio. | The rate alerts; the timeseries shows you which day to investigate. |
| Orders Over Time | The daily order-volume baseline. | A spike of cancellations on a record-high order day is mechanical, not a problem; on a flat order day, it is. |
| Refunds Over Time | Refunds by day; companion timeseries. | Cancellations + refunds plotted together = total order-failure timeseries. |
| Products with Zero/Negative Stock | The #1 cause of cancellation spikes. | A live OOS event on a top SKU predicts a cancellation spike 24 to 72 hours later. |
| Fulfillment Over Time | The shipping-counterpart timeseries. | A simultaneous fulfillment dip + cancellation spike on the same day is a stockout signature. |
| Financial Status | DECLINED cancellations sit here. | Bank-decline waves show as a same-day spike on both timeseries. |
bigcommerce.cancelled_over_time | Same definition. | Documentation cross-link. |
adobe_commerce.cancelled_over_time | Same definition. | Documentation cross-link. |
Reconciling against the vendor’s own dashboard
Where to look in Shopify Admin: Orders → filter Status: Cancelled, then group by date. Shopify does not have a dedicated cancelled-over-time chart; merchants either reconstruct it from the Orders list or use a custom Shopify Plus Analytics report (ShopifyQL Notebooks). Other Shopify Admin views that look similar but are not the same:- Reports → Sales over time: shows revenue, not cancellation count.
- Home → Today panel: shows real-time orders but does not break out cancellations.
- Apps like Better Reports, ReportToaster: build cancellation timeseries with richer dimensions (by reason, by channel). Useful complements; the timestamps should align with this card.
| Reason | Direction | Why |
|---|---|---|
| Time zone | Boundary days | Shopify Admin uses store time zone; Vortex IQ uses store time zone too for daily buckets, but UTC for window edges. Days near the period boundary may shift. |
createdAt vs cancelledAt | Big | Shopify Admin’s date filter defaults to createdAt; this card buckets by cancelledAt. An order placed 04 Mar and cancelled 14 Mar lands on 04 Mar in Shopify’s default filter, on 14 Mar here. Toggle Shopify’s filter to “Cancelled date” to align. |
| Test orders | Ours slightly higher | The card does not filter Order.test = true. |
| Sync lag | Ours lower for “today” | Webhooks fire within seconds; index lag of 5 to 15 minutes. Today’s bar may be slightly under-counted. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
stripe.failed_charges | DECLINED cancellation days correlate with Stripe failed-capture peaks | Not all decline cancellations are Stripe; PayPal and BNPL providers also produce them. |
datadog.dd_incident_count | Warehouse / 3PL incidents on Datadog can drive cancel spikes 24 to 72h later | Indirect signal; only valuable if the merchant has 3PL monitoring connected. |
Known limitations / merchant FAQs
Why does the timeseries spike on a specific day? Most spikes are single-cause:- Stockout cascade. Top SKU sold past available count, ops cancelled the oversells in batch within a few days.
- Fraud-filter wave. Shopify Protect retroactively flagged a cohort of orders (rare but happens during model updates).
- Bank decline wave. A specific BIN range (e.g. a single bank’s debit cards) hit a fraud rule on the bank side; saved cards declined post-authorisation in batch.
- Operations day. A planned cancel-all on test orders, abandoned drafts, or duplicate orders. Look for
Order.notecontent for “test” or “duplicate”.
cancelReason mix may differ by region; EU stores often see more CUSTOMER-initiated cancels (14-day cooling-off rights), US stores see more INVENTORY (oversell-driven workflows).
Shopify Plus vs basic, any difference?
Plus stores can build Flow automations that auto-cancel on fraud-flag triggers, producing tighter cancellation timing. Basic plans rely on manual ops cancellations, producing more bursty patterns. The card behaves identically; the daily shape may look smoother on Plus, more bursty on basic.
Refresh cadence?
Webhooks fire within seconds; index lag 5 to 15 minutes. The 90-day rolling window updates each cycle. Suitable for daily standup, not real-time triage.
B2B vs DTC?
B2B cancellations are larger (one cancelled £5,000 order moves the count by 1 like any other) but rarer and often clustered around quote revisions. A B2B-heavy store may show isolated single-day spikes that correspond to specific account negotiations, not a systemic problem.
The card spiked, what should I do?
- Open Shopify Admin → Orders → filter Status: Cancelled and the spike date.
- Group cancelled orders by
cancelReason(or visually scan). - If
INVENTORYdominates: open Products with Zero/Negative Stock for that date. - If
FRAUDdominates: review Shopify Protect decisions; raise a support ticket for false-positives. - If
DECLINEDdominates: check Stripe / PayPal logs for a bank-side decline pattern. - If the spike is
OTHER/ unspecified, audit ops staff actions; large bulk cancellations often have a single human cause (someone hit cancel-all on a draft batch).