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

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 countsCOUNT(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 endpointAdmin GraphQL. Order.cancelledAt. The card buckets non-null cancelledAt timestamps by date in store time zone.
VAT / tax treatmentNot applicable (count metric).
ShippingNot applicable.
DiscountsNot applicable.
RefundsNot the same metric; this card surfaces cancellations only.
Cancelled / voided ordersThese ARE the metric.
CurrencyMulti-currency safe (count timeseries, no FX).
Channels / sourcesNot filtered. Online Store, POS, B2B all contribute.
Time window90D (daily buckets)
Alert triggerNone on this card directly; pair with Cancellation Rate for the alerted rate.
Rolesowner, 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:
WeekAvg cancellations / dayNotable spike days
12 Feb to 18 Feb4None
19 Feb to 25 Feb5None
26 Feb to 04 Mar6None
05 Mar to 11 Mar2207 Mar (54 cancellations)
12 Mar to 18 Mar1814 Mar (38), 15 Mar (44)
19 Mar to 25 Mar9None
26 Mar to 01 Apr5None
02 Apr to 08 Apr4None
09 Apr to 12 May4 to 6Stable
Five things to notice:
  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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:
CardWhy pair it with Cancelled Over TimeWhat the combination tells you
Cancellation RateThe 30D-vs-prior-30D ratio.The rate alerts; the timeseries shows you which day to investigate.
Orders Over TimeThe 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 TimeRefunds by day; companion timeseries.Cancellations + refunds plotted together = total order-failure timeseries.
Products with Zero/Negative StockThe #1 cause of cancellation spikes.A live OOS event on a top SKU predicts a cancellation spike 24 to 72 hours later.
Fulfillment Over TimeThe shipping-counterpart timeseries.A simultaneous fulfillment dip + cancellation spike on the same day is a stockout signature.
Financial StatusDECLINED cancellations sit here.Bank-decline waves show as a same-day spike on both timeseries.
bigcommerce.cancelled_over_timeSame definition.Documentation cross-link.
adobe_commerce.cancelled_over_timeSame 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.
Why our number may legitimately differ from Shopify Admin:
ReasonDirectionWhy
Time zoneBoundary daysShopify 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 cancelledAtBigShopify 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 ordersOurs slightly higherThe card does not filter Order.test = true.
Sync lagOurs lower for “today”Webhooks fire within seconds; index lag of 5 to 15 minutes. Today’s bar may be slightly under-counted.
Cross-connector reconciliation:
CardExpected relationshipWhat causes legitimate divergence
stripe.failed_chargesDECLINED cancellation days correlate with Stripe failed-capture peaksNot all decline cancellations are Stripe; PayPal and BNPL providers also produce them.
datadog.dd_incident_countWarehouse / 3PL incidents on Datadog can drive cancel spikes 24 to 72h laterIndirect 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:
  1. Stockout cascade. Top SKU sold past available count, ops cancelled the oversells in batch within a few days.
  2. Fraud-filter wave. Shopify Protect retroactively flagged a cohort of orders (rare but happens during model updates).
  3. 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.
  4. Operations day. A planned cancel-all on test orders, abandoned drafts, or duplicate orders. Look for Order.note content for “test” or “duplicate”.
Why is the latest day’s bar lower than the trend? Sync lag. Webhooks deliver cancellations within seconds, but the OpenSearch index can lag 5 to 15 minutes. The latest day’s count rises throughout the day; ignore the final bar’s height for day-of comparisons. Yesterday and earlier are fully caught up. Does this card include refund-only orders? No. A refund without an explicit cancellation does not appear here. Order.cancelledAt must be non-null. To see refund timing, use Refunds Over Time. Some orders appear on both timeseries (cancel-and-refund-together workflows). My weekly pattern shows a Monday peak. Is that a problem? Usually no. Most merchants process the previous weekend’s flagged orders in batch on Monday morning, producing a Monday spike. Only the change in the Monday peak is meaningful: a Monday that runs 3× the trailing 4-week Monday median is investigation-worthy. Multi-store / multi-region, how does this card work? Each Shopify store is a separate integration. The card runs per store. A merchant with 3 stores will see 3 separate timeseries. Cross-store rollups are on the roadmap but cancellation-cause diagnosis is store-specific anyway, the operational story is best viewed per store. Multi-currency, any impact? None on the timeseries shape (count, not money). The 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?
  1. Open Shopify Admin → Orders → filter Status: Cancelled and the spike date.
  2. Group cancelled orders by cancelReason (or visually scan).
  3. If INVENTORY dominates: open Products with Zero/Negative Stock for that date.
  4. If FRAUD dominates: review Shopify Protect decisions; raise a support ticket for false-positives.
  5. If DECLINED dominates: check Stripe / PayPal logs for a bank-side decline pattern.
  6. 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).

Tracked live in Vortex IQ Nerve Centre

Cancelled Orders 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.