Skip to main content
Card class: HeroCategory: Ecommerce Platform
Refunded orders / total orders. Persistent >5% signals product quality or expectation mismatch.

At a glance

The percentage of orders in the period whose displayFinancialStatus resolved to REFUNDED. The blunt count-based view of how often money goes back out the door, not how much.
What it countsCOUNT(orders WHERE displayFinancialStatus = REFUNDED) ÷ COUNT(orders) × 100. Each fully-refunded order counts as 1, regardless of order value.
Partial refundsNOT counted. A £200 order refunded for £40 stays in PARTIALLY_REFUNDED state and does NOT trip this metric. Use Refund Value for the £-leakage view that catches partials.
VAT / tax treatmentNot applicable. This is a count ratio, not a money figure. The orders being counted may include or exclude VAT depending on Order.taxesIncluded, but the rate itself is currency-agnostic.
ShippingNot applicable (count metric). The underlying totalPrice includes shipping but it doesn’t affect the rate.
DiscountsNot applicable (count metric).
RefundsThis IS the refund metric. Only orders flipped to REFUNDED in Shopify count; orders in PARTIALLY_REFUNDED, PENDING, or VOIDED are excluded from the numerator.
Cancelled / voided ordersExcluded from the numerator (VOIDED is a separate status), but they DO sit in the denominator, which inflates the denominator and slightly lowers the rate. See Cancellation Rate for the void-side view.
CurrencyMulti-currency safe, this is a ratio not a sum. A store taking GBP, EUR, and USD orders gets one valid rate.
Channels / sourcesNot filtered. Online Store, Shop POS, Buy Button, Shop App, TikTok Shop, B2B / wholesale orders all contribute. POS refunds (in-store returns) push the rate up disproportionately for hybrid retail brands; B2B refunds are rare but each one moves the needle on a small-volume wholesale book.
Time window30D vsP (default 30D vs the prior 30D)
Alert trigger>5%, sustained refund rate above 5% triggers the refund_rate sentiment key
Rolesowner, operations

Calculation

COUNT(displayFinancialStatus=REFUNDED) / COUNT(_id)
  WHERE date BETWEEN [period_start, period_end]

Worked example

A US homewares brand on Shopify Advanced. Period: 12 Mar 26 to 11 Apr 26 (30D), comparing against the prior 30D (10 Feb 26 to 11 Mar 26).
Status (in window)Order countShareNote
PAID2,14084.3%Clean orders, no refund activity
PARTIALLY_REFUNDED1847.2%Damaged-in-transit replacements, partial £ back
REFUNDED1927.6%Full refunds, this is the numerator
VOIDED220.9%Cancelled before payment captured
Total orders (denominator)2,538100%
Refund Rate  =  192 ÷ 2,538 × 100  =  7.56%
vs the prior 30D where the rate was 4.9% (108 / 2,204). The card flags a +2.66 ppt rise and trips the >5% sentiment alert. Five things to notice:
  1. The £ leakage is bigger than the count suggests. 7.2% of orders are partially refunded, those don’t show in this rate but they’re real cash going back. Always pair this card with Refund Value, which sums totalRefunded across all refund states.
  2. The headline number jumped because the denominator shrank. Order count dropped from 2,204 to 2,538 doesn’t explain the spike on its own; the numerator nearly doubled (108 to 192). Something changed.
  3. Likely cause: a single SKU. Drilling into Top Refunded Products would typically show one or two SKUs accounting for 40 to 60% of refunds. A common pattern for this homewares vertical is a glass / ceramic item arriving broken; the brand replaces (partial) or refunds (full) at the customer’s choice.
  4. Channel mix matters. If 30% of refunds come from POS returns (customers walking back into the store), the online refund rate is structurally lower than the headline. The card doesn’t split by channel today, but a manual filter in Shopify Admin → Orders by Sales channel gives the same view.
  5. vsP is the diagnostic, not the headline. A flat 7.6% week-over-week is just “this is the brand’s natural rate.” A sudden jump of >2 ppt is the signal Vortex IQ Nerve Centre is engineered to catch, the alert is calibrated to the change, not the absolute number.

Sibling cards merchants should reference together

Refund Rate is a count ratio. It hides a lot. Pair it with these to make decisions:
CardWhy pair it with Refund Rate
Refund ValueThe £ view. Catches partial refunds that this card misses. A flat refund rate but rising refund value means partials are growing, possibly a damaged-in-transit pattern.
Refund CountThe raw numerator. Useful when order count is shifting fast (sale week, viral moment), the rate can move just because the denominator changed.
Top Refunded ProductsTells you which SKUs are driving refunds. 80% of refunds usually come from 20% of SKUs; this card surfaces them.
Cancellation RateCousin metric. Cancellations (VOIDED) happen before payment captures; refunds happen after. Both signal customer dissatisfaction but call for different fixes.
Total OrdersThe denominator. Always sanity-check the denominator before reading the rate, a small-volume week can produce noisy rates from 2 or 3 refunds.
Refunds Over TimeDaily / weekly trend. Catches step-changes (a bad batch landing on Monday) that the 30D average smooths out.
Stripe Refund RateCross-check against the payment processor. If Stripe’s rate is materially different, the gap is informative (gift cards, manual refunds, COD orders).

Reconciling against the vendor’s own dashboard

Where to look in Shopify Admin: Reports → Returns over time under the Sales category. Set the same date range you’ve selected here, and look at the Returns count alongside Net sales. The closest one-to-one comparison is Shopify’s own Refund return rate tile in the same report (calculated as returns ÷ orders). Other Shopify Admin views that look like the same number but aren’t:
  • Home → Average return rate widget: this is a lifetime rolling figure, not a 30D snapshot. It will read lower than this card if your refund rate has been climbing recently.
  • Orders → Filter “Refunded”: counts every order ever refunded, not just orders created in the window. Useful for ops, useless for trend reconciliation.
  • Reports → Refunds by product: this is a £-value view, not a rate. It pairs with Refund Value, not this card.
  • Settings → Returns → Return rate: only available on Shopify Returns Beta accounts; uses a different denominator (fulfilled orders, not all orders).
Why our number may legitimately differ from Shopify Admin: A small gap is normal. The usual suspects:
ReasonDirectionWhy
Time zoneBoundary daysShopify reports run in the shop’s configured time zone (Settings → General); Vortex IQ uses UTC for period boundaries. Refunds processed near midnight on the boundary days fall on different sides.
Status definitionTheirs higherShopify’s Returns over time report counts both REFUNDED and PARTIALLY_REFUNDED as a “return”. Vortex IQ counts only REFUNDED for this rate. To match Shopify’s number, use the Refund Count card and divide by Order Count manually.
Multi-currencyEitherIf multi-currency selling is enabled, Shopify’s UI reports in shop currency. The rate is currency-agnostic so this rarely causes divergence, but the underlying refund counts can differ if some orders are excluded from one report’s currency filter.
Refund-period overlapTheirs lowerA refund issued on 12 Apr 26 against an order placed on 28 Feb 26. Vortex IQ counts that order as REFUNDED in the period when the order was created (Feb), so the rate goes up retroactively. Shopify’s report can attribute refunds to either order date or refund date depending on the view.
Draft / test ordersOurs slightly higherShopify Admin can hide test orders. Vortex IQ does not yet filter Order.test.
Internal identity (within Shopify): shopify.refund_rate = shopify.refund_count ÷ shopify.order_count × 100 These three cards are mathematically tied. If they don’t match it’s a sampling or rounding artefact, not a real disagreement. Cross-connector reconciliation. Stripe vs Shopify: stripe.stripe_refund_rate should sit close to this card for stores that route most payments through Stripe / Shopify Payments (which is Stripe under the hood). Expected gaps:
CardExpected relationshipWhat causes legitimate divergence
stripe.stripe_refund_rateStripe ≈ Shopify, often within ±0.5 ppt for Stripe-only storesStripe sees only Stripe-routed refunds. PayPal refunds, gift-card returns, manual / COD refunds, and Klarna / Afterpay reversals are invisible to Stripe but counted by Shopify.
paypal.pp_refund_valuePayPal subset of ShopifyOnly PayPal-checkout refunds. Subset by definition.
Net of all processors: if you sum Stripe refund count + PayPal refund count + manual refunds, the total should match Shopify’s refund_count. A persistent gap > 5% means a payment processor is missing from the Vortex IQ workspace, or one is double-counting (rare; usually a misconfigured webhook).

Known limitations / merchant FAQs

Why is my Refund Rate higher than Shopify’s “Average return rate”? The Shopify Home dashboard tile is lifetime (often calculated over all orders ever placed), so it benefits from years of low-refund history pulling the rate down. This card is a 30-day window; recent refund spikes are not yet smoothed out by historical baseline. Use Shopify Admin → Reports → Returns over time with the same date range you’ve selected here for an apples-to-apples reconciliation, not the dashboard tile. Does this card include partial refunds? No. Only orders that flipped fully to displayFinancialStatus = REFUNDED count in the numerator. Orders sitting in PARTIALLY_REFUNDED are excluded, even if 90% of the order value has been returned. To capture the £-leakage from partials, watch Refund Value which sums totalRefunded across every refund-bearing order regardless of status. My refund rate spiked but I don’t see a problem in any specific SKU. Why? Three usual causes that hide at the SKU level: (1) a delivery carrier issue causing damage in transit, look at refund tags / reasons in Shopify Admin; (2) a sizing or expectation gap from a recent ad creative (people bought based on a misleading image), check ad set landing pages; (3) an internal payment-processing glitch where Shopify auto-refunded some duplicate-charge orders, look at Settings → Payments → Activity log. The headline rate moves before any single SKU does. Why doesn’t the Stripe refund rate match this card? Stripe sees only Stripe-routed refunds, which is most of your money but not all. PayPal refunds, gift-card returns, manual cash refunds, and Klarna / Afterpay reversals don’t appear in Stripe. Expect Stripe’s refund rate to read slightly LOWER than Shopify’s, often 0.5 to 2 ppt lower depending on PayPal share. A Stripe rate that matches Shopify exactly suggests the merchant runs Shopify Payments only. Does multi-currency affect the rate? Not directly, this is a count ratio. But if your store sells across GBP, EUR, and USD, returns from one currency tend to cluster (EU stores see higher refund rates than US for fashion, lower for electronics). Per-currency refund rates are on the roadmap; for now use Shopify Admin’s currency filter to slice manually. B2B / wholesale orders, do they count? Yes. Every order in the index contributes to both numerator and denominator. B2B orders are usually low-volume (fewer wholesale buyers than retail), high-value (large basket sizes), and rarely refunded (returns happen via credit-note rather than refund). So they barely move the rate. The exception is a one-time large B2B refund (a single £15,000 wholesale order returned), which on a small-volume week can spike the rate by 2 to 4 ppt on its own. My subscription store, do recurring billings count? Yes. Each Shopify Subscriptions billing event is a separate order. Customers cancelling a subscription mid-cycle and receiving a partial pro-rata refund show up in PARTIALLY_REFUNDED (excluded). Customers cancelling within the refund window and getting a full refund show up in REFUNDED (included). Subscription churn that doesn’t trigger a refund (just a future cancellation) is invisible to this card; pair with Churn Risk for that view. The card says “>5%” alert, is that the right threshold for my industry? 5% is a coarse default for direct-to-consumer brands. Apparel and footwear typically run 15 to 30% even in healthy operations (sizing returns); homewares and consumables run 2 to 5%; electronics 5 to 10%. The threshold is configurable per workspace in Nerve Centre → Alerts. The right number is whatever signals “abnormal for THIS brand”, typically baseline + 2 standard deviations. Action playbook when this card alerts:
  1. Open Refund Value and Top Refunded Products, look for SKU concentration.
  2. Check Refunds Over Time for a step-change date, ties to a specific batch / shipment / ad campaign.
  3. Pull refund reasons from Shopify Admin → Orders → Refunded. Three most common: damaged in transit, sizing, doesn’t match description.
  4. If concentrated on one SKU: pause its ads, audit listing photos and copy, talk to the supplier.
  5. If spread across SKUs but tied to a date: investigate carrier / warehouse / payment-processor incident.
  6. If spread across SKUs and time: brand-level expectation gap, audit recent creative and merchandising.

Tracked live in Vortex IQ Nerve Centre

Refund 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 or book a demo to see this metric running on your own data.