Skip to main content
Card class: Non-HeroCategory: Ecommerce Platform
Refund-rate anomaly. Catches batch-quality issues, broken sizing, or coupon misuse before the support inbox does.

At a glance

Real-time refund-rate anomaly: 24-hour rolling refund rate has crossed 2× the 30-day baseline. Catches batch-quality breakdowns, broken-sizing returns, fraud waves, and coupon-stacking abuse before the support inbox catches up.
What it counts(refunds_24h ÷ orders_24h) > 2 × (refunds_30D ÷ orders_30D). Both rates use refund-creation date in the numerator and order-creation date in the denominator. Each refund record is one count regardless of value.
VAT / tax treatmentNot applicable, rate metric.
ShippingNot applicable directly; refunded shipping doesn’t change the count.
DiscountsNot applicable.
RefundsThis is the metric.
Cancelled / voided ordersExcluded from refund count (cancellations create different events).
CurrencyMulti-currency safe (rate metric).
Channels / sourcesAll channels. POS refunds at till count if Shopify creates a refund record (most do).
Time windowRT (5-min poll cadence)
Alert triggerrolling 24h refund rate >2× 30D baseline. Configurable.
Sentiment keyrefund_rate
Rolesowner, operations, finance

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 womenswear brand on Shopify Plus, normal refund rate ~6.8% (returns-friendly fashion). Friday 09 May 26, 16:00 BST. The alert fires: trailing 24h refund rate = 14.2%, 2.09× the 30D baseline of 6.8%. Decomposition of the 24h refund pool:
Refund reason clusterCountShareNote
”Wrong size” / “didn’t fit”4138%Up 3× normal
”Quality issue” / “stitching”2826%Up 5× normal
”Not as pictured”1413%Normal
”Changed mind”1211%Normal
”Late delivery”87%Normal
”Damaged in transit”55%Normal
Total 24h refunds108100%
Six things to notice:
  1. The signal is concentrated. Of 108 refunds in 24h, 69 (64%) are sizing or quality issues; both are up sharply vs baseline. This is a product-quality event, not a generic refund-rate drift.
  2. The cause is likely a single SKU or batch. Drilling into product-level: the new “Verona dress” launched 02 May, customers returning since 06-08 May. 47 of 108 refunds are this single SKU. The dress’s measurements are running 1-1.5 sizes small.
  3. The action is immediate. Pause Verona-dress ads (Google, Meta), update the PDP with revised sizing guidance, email Verona-buyers proactively offering pre-paid return labels with the next size up.
  4. The financial impact is real. 47 dress refunds × £85 average = £4,000 of refund value already booked, with more in the pipeline (the cohort is still receiving and trying on). Pair with Refund Value for the running total.
  5. The repeat-rate impact is bigger. Customers who refund typically don’t reorder for 90+ days. 47 customers is a 3-month repeat-cohort hit. Cross-reference Repeat Customer Rate over the next quarter for the lagging effect.
  6. POS interplay. If the brand has a London showroom, customers can return the dress in person; that creates a refund without a returns-API record but still surfaces here. The split between online-returns and in-store-returns helps localise the issue: heavy in-store returns suggest the photography / sizing chart is the culprit.
Recovery shape: sizing-driven refund spikes typically peak at 24-72h after launch and decline as the at-risk cohort (early adopters) is exhausted. Product fix takes 2-4 weeks; comms fix takes a day. Comms first, product second.

Sibling cards merchants should reference together

The refund-spike alert is the trigger. The diagnostic cards:
CardWhy pair it with this alert
Refund RateThe 30D rolling rate this alert deviates from. Use to confirm the spike is acute, not part of a slow drift.
Refund CountOrder-count companion. Refund value spike with flat count = high-value-item issue; rising count = systematic.
Refund ValueThe £-impact view. Pair to compute the running £ at risk.
Top Refunding CustomersCustomer-level drill-down. Flag potential refund fraud or chronic-returner accounts.
Customer Feedback Spike AlertCompanion canary; usually fires hours before this for product-quality events.
Top Products by RevenueSKU drill-down; concentrated refunds usually trace to a single SKU.
Refund StatusProcess state of the return cohort; helps see whether refunds are flowing through cleanly.
Repeat Customer RateThe lagging consequence; refund spikes hurt repeat rate 60-90 days later.

Reconciling against the vendor’s own dashboard

Where to look in Shopify Admin: Shopify doesn’t expose a single refund-rate-anomaly alert; reconstruct from:
  • Analytics → Reports → “Returns” filtered to the same 24h window: gives the count and value.
  • Orders → Filter by Refunded with date range last 24h: gives the order list.
  • Apps like Loop Returns / Returnly / AfterShip Returns: their dashboards expose return-rate trends.
Why our number may legitimately differ from a manual reconstruction:
ReasonDirectionWhy
Refund timing definitionEitherWe use refund-record creation timestamp; some Shopify reports use original-order date. The two diverge sharply during refund waves.
Time zoneBoundary 24h windowUTC vs store time zone.
Partial refundsCountingWe count one refund record per Shopify refund event. A partial-then-full refund on the same order creates two records and counts as two.
Returns app integrationEitherApps like Loop create their own refund records via Shopify Refund API; usually counted same as native, but watch for duplication if the app retries.
Sync lagOurs lower for “right now”Most-recent 5 to 15 minutes of refund-creation may not be in.
Cross-connector reconciliation:
CardExpected relationshipWhat causes legitimate divergence
stripe.stripe_refundsShould track within 5% for Stripe-gateway ordersRefunds on PayPal, Apple Pay, etc, route through their respective gateways and won’t appear in Stripe.
paypal.paypal_refund_countSame logicSingle-gateway view.
klaviyo.kl_unsubscribe_rateLagging correlationRefund-spike events typically drive unsubscribe spikes 7-14 days later.

Known limitations / merchant FAQs

Why is the multiplier 2×? Should I tune it? 2× is a generic anomaly threshold. Tune based on your category and volume:
  • Low-refund-rate categories (electronics, beauty, B2B): 2× is too tight; small absolute spikes trip it. Use 3-4×.
  • High-refund-rate categories (fashion, footwear): 2× works.
  • Subscription / consumables: 2× is fine, refund pattern is steady.
Why does the alert fire when I run a clearance event? Customers buying clearance often return at higher rates (impulse purchases, sizing risk). A clearance spike isn’t a problem per se, but it’s worth distinguishing from product-quality spikes. Suppress alerts during planned clearance windows or filter by product-type. My subscription billings, do they trigger this? Indirectly. Subscription billings that fail (card declined, address invalid) often result in refund records. If you see a refund spike on a billing day, it’s not necessarily customer dissatisfaction; check Decline Recovery for context. Why does the alert fire on Mondays even when I don’t sell on weekends? Customers who received Friday-shipped goods over the weekend submit returns on Mondays in bulk. The 24h window catches Mon morning’s submission wave. Acceptable false-positive frequency: 2-3/month. If higher, raise the multiplier. Can I distinguish fraud refunds from legitimate ones? Partially. The alert fires on the count; the drill-down shows reasons. Fraud signatures:
  • Customer accounts with very recent first orders + refunds.
  • High-velocity multi-SKU orders refunded within hours.
  • Repeated chargebacks on the same payment instrument.
Cross-reference Top Refunding Customers for chronic-refunder patterns, and Stripe Radar / fraud-engine outputs. Why is the spike not visible on my refund-rate trend chart? The trend chart smooths over 30D; a 24h spike is invisible at that granularity. The alert exists because trend charts hide acute events. Use trend for chronic-issue diagnosis, alert for acute-event response. My multi-region store, can the alert fire on one region only? Not in the default config. The alert is store-wide. Per-region alerting is on the roadmap. For now, drill the refund cohort by ship-to country in Shopify Admin to localise. Action playbook when this fires:
  1. Open the refund list filtered to last 24h. Sort by refund value desc and reason cluster.
  2. Identify the cause cluster: sizing? quality? damage? changed-mind? Each has a different remedy.
  3. Identify the SKU concentration: are 50%+ of refunds on one SKU? That SKU is the issue. Pause its ads, update its PDP, email its buyers.
  4. Identify customer concentration: are 10%+ of refunds from one customer? Possible fraud. Investigate.
  5. Communicate proactively with customers in the at-risk cohort: those who bought the same SKU in the last 7-14 days but haven’t refunded. Offer pre-paid returns or apology credit.
  6. Document the cause in your ops playbook. Refund spikes from the same root cause should not recur.

Tracked live in Vortex IQ Nerve Centre

Refund-Rate Spike Alert 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.