> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vortexiq.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Cancellation Rate, Shopify

> Cancellation Rate for Shopify stores. Tracked live in Vortex IQ Nerve Centre. How to read it, why it matters, and how to act on it.

**Metrics type:** [Supporting Metrics](/nerve-centre/overview#metrics-types-explained)  •  **Category:** [Ecommerce Platform](/nerve-centre/connectors#connectors-by-type)

## 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](/nerve-centre/kpi-cards/shopify/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

```
COUNT(displayFulfillmentStatus=VOIDED) / COUNT(_id)
  WHERE date BETWEEN [period_start, period_end]
```

## 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       |                        |                                                  |

```text theme={null}
Cancellation Rate  =  299 ÷ 6,840 × 100  =  4.37%
```

vs the prior 30D, where the rate was 1.9%. The card flags a **2.5 ppt jump** and trips the `>3%` sentiment threshold. Five things to notice:

1. **The cause is inventory, not fraud or service.** 47.5% of cancellations are `INVENTORY` (oversold). Cross-reference [Products with Zero/Negative Stock](/nerve-centre/kpi-cards/shopify/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.
2. **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](https://admin.shopify.com/orders?fraud_protection_status=protected) view; if false-positive rate is climbing, log a Shopify support ticket.
3. **Customer-initiated cancellations are stable.** 17% of cancellations from `CUSTOMER` is 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).
4. **`DECLINED` is 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](/nerve-centre/kpi-cards/shopify/financial-status-breakdown), this is a checkout / payment-method UX issue.
5. **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](/nerve-centre/kpi-cards/shopify/cancelled-orders-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](/nerve-centre/kpi-cards/shopify/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](/nerve-centre/kpi-cards/shopify/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](/nerve-centre/kpi-cards/shopify/fulfillment-rate)                                   | When inventory cancellations rise, fulfillment rate drops too. | A simultaneous fulfillment dip + cancellation spike is a classic stockout-induced failure.                  |
| [Financial Status](/nerve-centre/kpi-cards/shopify/financial-status-breakdown)                         | Surfaces `PENDING`, `AUTHORIZED`, `VOIDED` orders.             | `DECLINED` cancellations correlate with a high `VOIDED` count.                                              |
| [Order Count](/nerve-centre/kpi-cards/shopify/total-orders)                                            | The denominator.                                               | A 30% volume spike + flat cancellation count = falling rate; flat volume + rising count = real problem.     |
| [`bigcommerce.cancellation_rate`](/nerve-centre/kpi-cards/bigcommerce/cancellation-rate)               | Same definition for agencies running cross-platform.           | Documentation cross-link.                                                                                   |
| [`adobe_commerce.cancellation_rate`](/nerve-centre/kpi-cards/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](https://admin.shopify.com/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 `cancelledAt` is set; the timing on the card and the app dashboard can diverge by minutes.

**Why our number may legitimately differ from Shopify Admin:**

| 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](/nerve-centre/kpi-cards/shopify/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.                                                                                                              |

**Cross-connector reconciliation:**

| Card                                                                  | Expected relationship                                                | What causes legitimate divergence                                                                                                                                                                     |
| --------------------------------------------------------------------- | -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`stripe.failed_charges`](/nerve-centre/stripe/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`](/nerve-centre/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.                                                                                                                               |

***

<details>
  <summary><em>Same-metric documentation cross-reference (for agencies running multiple platforms)</em></summary>

  The same definition lives on other commerce platforms. This is **not a reconciliation**, your Shopify store does not have a parallel store on BigCommerce or Adobe Commerce. These cross-links exist so agencies running multi-platform client books can navigate between identical metrics across the docs.

  * [`bigcommerce.cancellation_rate`](/nerve-centre/kpi-cards/bigcommerce/cancellation-rate)
  * [`adobe_commerce.cancellation_rate`](/nerve-centre/kpi-cards/adobe-commerce/cancellation-rate)
</details>

## Known limitations / merchant FAQs

**Why is my cancellation rate spiking?**
Three usual causes, in order of likelihood:

1. **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](/nerve-centre/kpi-cards/shopify/products-with-zero-negative-stock).
2. **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.
3. **Bank declines on saved cards.** A bank-side fraud alert or expired saved cards on a re-engagement campaign can produce a spike of `DECLINED` cancellations days after checkout.

**Action:** identify which `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](/nerve-centre/kpi-cards/shopify/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?**

1. Open [Cancelled Over Time](/nerve-centre/kpi-cards/shopify/cancelled-orders-over-time). Find the day the rate spiked.
2. Pull that day's cancelled orders in Shopify Admin. Look at the `cancelReason` mix.
3. If `INVENTORY` dominates: open [Products with Zero/Negative Stock](/nerve-centre/kpi-cards/shopify/products-with-zero-negative-stock), turn off Continue Selling on the affected SKUs.
4. If `FRAUD` dominates: review the Shopify Protect decisions; raise a support ticket if false-positives are climbing.
5. If `DECLINED` dominates: look at payment-gateway logs (Stripe / PayPal). Check whether saved cards expired or a bank issued a fraud-decline pattern.
6. Email customer-service to extend SLA messaging proactively for cancelled customers.

***

### Tracked live in Vortex IQ Nerve Centre

*Cancellation Rate* 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](https://app.vortexiq.ai/login) or [book a demo](https://www.vortexiq.ai/contact-us) to see this metric running on your own data.
