Skip to main content
Card class: StandardCategory: Ecommerce Platform
The percentage of orders in a Cancelled status over the window, a direct read on how often confirmed orders fall through before fulfilment.

At a glance

Cancellation Rate is the share of orders that ended up in a Cancelled status during the window, expressed as a percentage of all orders in that window. It is a health gauge for the gap between “order placed” and “order fulfilled”. A creeping cancellation rate usually points at a specific, fixable cause: stock that was oversold, a payment method that authorises but fails to capture, a fraud-screening rule that is too aggressive, or customers changing their minds because delivery promises slipped.
What it countsOrders whose order_status_id maps to a Cancelled status, divided by the total order count over the window, as a percentage.
Status treatmentOpenCart statuses are configurable in oc_order_status. The gauge keys on the status(es) you have mapped as “Cancelled”, not on a hard-coded name. Stores that distinguish “Cancelled” from “Voided” or “Failed” can map each appropriately.
RefundsA Refunded order is usually a different status from Cancelled in OpenCart. This gauge counts Cancelled only; refunds are tracked by Refund Rate.
Failed ordersOrders that never completed payment are typically Failed, a separate status. They are counted here only if you have mapped Failed into the Cancelled set.
CurrencyNot relevant. This is a ratio of order counts, so multi-currency stores are unaffected.
DenominatorAll orders in the window across the configured statuses. A narrow denominator (excluding incomplete orders) raises the apparent rate; a wide one lowers it.
Multi-storeAggregates across store_id storefronts by default.
Time window30D vsP (default 30 days vs prior period)
Alert trigger> 3%
Rolesowner, operations

Calculation

COUNT(orders) WHERE order_status IN [cancelled_statuses]
  AND date BETWEEN [period_start, period_end]
/ COUNT(orders) WHERE date BETWEEN [period_start, period_end]
* 100

Worked example

A Malaysian electronics store on OpenCart 4.x. The 30-day window covers 14 Mar 26 to 12 Apr 26. The store maps “Cancelled” as its own status, separate from “Refunded” and “Failed”.
PeriodTotal ordersCancelled ordersCancellation rate
Prior 30 days3,100561.8%
This window (full)3,2401173.6%
of which: oversold stock-71-
of which: customer changed mind-28-
of which: suspected fraud, staff-cancelled-18-
What’s interesting here:
  1. The rate doubled and tripped the alert. At 3.6% the window is over the 3% trigger and up from 1.8% prior. Something changed inside the window, and the breakdown points straight at it.
  2. Oversold stock is the dominant cause. 71 of the 117 cancellations were staff-cancelled because the item was not actually in the warehouse when the order arrived. That is a stock-accuracy problem, and it links directly to a Stock-Out Burst that fired earlier in the window when a feed wrote bad quantities.
  3. Cancelled is not the same as Refunded. None of these 117 are in the refund numbers, because this store maps the two statuses separately. A merchant who lumped them together would double-count the financial impact.
  4. The fix is upstream of the order. Tightening stock accuracy (better feed validation, a buffer on fast-movers) cuts the 71 oversold cancellations directly. The 28 changed-mind cancellations are largely irreducible; the 18 fraud cancellations are arguably a good outcome, not a problem.

Sibling cards merchants should reference together

CardWhy pair it with Cancellation Rate
Refund RateThe sibling downside metric. Cancellations happen before fulfilment; refunds after. Together they bound your order-fallthrough.
Failed Orders (24h)Failed orders that never paid are distinct from cancellations of paid orders. Pair to separate payment failures from genuine cancellations.
Order Status DistributionShows the full status mix so you can see whether cancellations are rising at the expense of completions.
Stock-Out BurstOversold stock is a leading cause of cancellations. A burst here often precedes a cancellation spike.
Order Processing BacklogA long backlog leads to slipped delivery promises and customer-initiated cancellations.
Revenue at Risk (live)Puts a value on the orders that may yet cancel.

Reconciling against OpenCart

Where to look in the OpenCart admin: Sales → Orders, filtered to your Cancelled status for the date range, gives the numerator; the same view with no status filter gives the denominator. Reports → Sales → Orders breaks down totals by status, which is the quickest way to see the cancelled count alongside the total. OpenCart admin views that look like the same number but aren’t:
  • Sales → Orders filtered to Cancelled is a count, not a rate. You must divide by total orders yourself.
  • Reports → Sales → Orders by status can blend Cancelled, Refunded, and Failed if those statuses are similarly named; check the exact status IDs.
  • The Dashboard shows no cancellation figure at all.
Why our number may legitimately differ from the OpenCart admin:
ReasonDirection of divergence
Status mapping. If your store has both “Cancelled” and “Voided” (or “Cancelled - Reversed”), which ones count depends on the mapping. A mismatch with your admin filter changes the numerator.Either direction
Denominator scope. OpenCart often creates a Pending/Missing-Orders skeleton for abandoned checkouts. Whether those count in the denominator shifts the rate noticeably.Wider denominator lowers the rate
Timezone. Store timezone in the admin vs UTC in Vortex IQ moves boundary orders between windows.Minor at the edges
Multi-store. All store_id storefronts aggregate by default; a single-store admin filter will differ.Either direction
API / DB sync lag. A very recent cancellation may not yet be reflected.Self-resolves at next sync
Cross-connector note: if you run a payment connector, a payment-side void or chargeback may register there but appear in OpenCart only when staff manually move the order to Cancelled. A gap between processor voids and OpenCart cancellations usually means the manual status update is lagging.

Known limitations / merchant FAQs

Is a cancellation the same as a refund? Not in OpenCart, unless you have mapped them to the same status. A cancellation typically happens before fulfilment and money is voided rather than returned; a refund happens after payment was captured. This gauge counts only your Cancelled status. Refunds are on Refund Rate. Why is 3% the alert line? For most stores a steady-state cancellation rate sits comfortably below 3%; crossing it usually signals a specific cause (oversold stock, a payment-capture fault, an over-tight fraud rule) rather than random variation. High-consideration or made-to-order stores may sit higher naturally and should tune the threshold up. My rate looks high but I think the denominator is wrong. That is common. OpenCart can create order skeletons for abandoned or failed checkouts, and whether those land in the denominator changes the rate a lot. Check which statuses are included in the total, the most frequent cause of a “too high” reading is a denominator that excludes incomplete orders. Staff cancel a lot of suspected-fraud orders, does that hurt my number? It raises the rate, but it is often a healthy signal, you caught fraud before shipping. Read the cancellation rate alongside why orders cancelled. A high rate driven by fraud prevention is very different from one driven by oversold stock. Does it count Failed (never paid) orders? Only if you mapped Failed into the Cancelled set. By default Failed is a separate status tracked by Failed Orders (24h). Keep them separate so you can tell payment failures from genuine cancellations. My status is called “Voided”, not “Cancelled”, does the gauge work? Yes, as long as you map “Voided” into the cancelled-status set. OpenCart status names are fully configurable in oc_order_status; the gauge keys on the mapping, not the label. Why use 30 days vs prior rather than a live count? Cancellations are lumpy, one bad stock feed can cluster them. The 30-day-vs-prior comparison shows whether the rate is genuinely trending or just had a noisy week, which is why the alert is evaluated on the rolling window.

Tracked live in Vortex IQ Nerve Centre

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