Return abuse detection for Shopify stores: patterns, signals, and a graduated response
Return abuse detection for small Shopify stores: the five patterns, the signals worth checking in admin, and a graduated response that stays fair.
InventoryX is in development and not available today. ClearStock is the live Shopify app.
The same customer just filed their fourth "not as described" claim in six weeks: $31 of phone stands the first time, $26 of hiking socks the third (illustrative numbers). Each claim is small and individually plausible. That's what return abuse looks like at small-store scale — not a heist, but a handful of customers whose refunds quietly outpace everyone else's.
You can't stop it entirely, and most of your returns are honest. But the base rates are real: close to two-thirds of consumers admit to at least one costly returns behavior, and 45% believe "bending the truth" is acceptable when returning (NRF/Happy Returns, 2025 Retail Returns Landscape, released Oct 15, 2025). What you can do is see the pattern in your own numbers, price it, and respond in steps that hold up if the customer pushes back. Here are the five patterns, the three signals worth checking in Shopify, and a four-rung response ladder.
The scale, briefly
Returns ran an estimated 15.8% of annual sales in 2025 — $849.9 billion — and 9% of all returns were fraudulent (NRF/Happy Returns, 2025 Retail Returns Landscape). The prior NRF study counted $101 billion in return-fraud losses, or $13.70 in fraud per $100 of returned merchandise (NRF/Appriss Retail, 2023 Consumer Returns in the Retail Industry, Dec 2023). Those are industry numbers; your store's mix is knowable only from your own data, which is what the next two sections extract.
The five patterns
The fraud-type backdrop comes from retailers themselves: wardrobing led the list at 49% of surveyed retailers, followed by shoplifted or stolen merchandise at 44% and fraudulent or stolen tender at 37% (NRF/Appriss Retail, 2023 — retailer-survey figures, the most recent NRF returns report). Against that backdrop, five patterns matter at small-store scale:
- Wardrobing. Buy, wear once, return as unused. Apparel is the classic; in a general store it's hiking socks after a weekend trip or a dog harness used for one hike. The 49% figure makes it the most commonly reported fraud type — and the hardest to prove without inspection discipline.
- Empty-box claims. "The box arrived empty" or "the item was missing." Among retailers tracking incidents, 71% report increases in overstated return quantities and 65% in empty-box returns (2025 report). These claims are designed to land before anything comes back, which is why they work.
- Item switching (decoy returns). A counterfeit, used, or older item goes back in the box instead of what you shipped — 64% of incident-tracking retailers report increases in decoy returns such as counterfeit items (2025 report).
- Bracketing. Order three sizes, keep one, return two. Not fraud — it's within policy and common in apparel and footwear — but it multiplies return volume on exactly the categories that invite it. Treat it as a cost line, not a crime.
- Serial claimers. The customer-level compounder: repeated "arrived damaged" or refund-after-delivery requests across multiple orders. Each claim is deniable on its own; the aggregate is a pattern, and it's the one your Shopify data can actually surface.
One boundary: what comes back in the box — wear, switching, condition — is an inspection problem, and the returned-inventory processing guide owns that corner, fraud and wear included. This article stays upstream of the box, at the customer level.
The signals you can actually check
Three per-customer signals, all computable from Shopify exports today:
- Return frequency vs your store average. How often does this customer return relative to orders placed, compared with everyone else?
- Refund-to-order ratio. Refunds received divided by orders placed, per customer.
- Repeat refund-after-delivery patterns. Delivery confirmed, complaint filed, refund issued — how many times has that sequence repeated for the same name?
A worked example with illustrative numbers. Say your store did 1,140 orders in the last 90 days with 43 refunds:
Store refund-to-order ratio = 43 ÷ 1,140 = 3.8%
Now Customer A, who surfaces in the export with 9 lifetime orders and 6 refunds:
Customer A ratio = 6 ÷ 9 = 67%
That's roughly 17 times the store average. An illustrative flag rule — a customer at 3× your store average across 3+ orders — puts the line at 3.8% × 3 = 11.4%, and Customer A clears it by an order of magnitude. A customer with 2 orders and 1 refund (50%) doesn't clear the "3+ orders" condition; small samples lie, which is why the rule needs both conditions.
One refinement: weight by dollars, not just counts. Two customers can post the same 67% ratio while costing wildly different amounts — six refunded $24 stationery orders and two refunded $190 phone-stand bundles are not the same problem. Rank the flagged list by refund dollars alongside ratio, and let the dollar column decide how far up the ladder a name climbs.
Mechanically: export orders and refunds to CSV, pivot by customer email, compute both ratios, sort descending. The admin's customer profile shows the same history one customer at a time. The first pass takes an hour; the quarterly refresh takes ten minutes.
The graduated-response ladder
Escalate by evidence, not by mood:
| Rung | Trigger (illustrative) | Action | What it requires |
|---|---|---|---|
| 1. Flag | 3× store average ratio across 3+ orders | Note on the customer record; file every claim with dates | Discipline only |
| 2. Restrict payment options | Pattern continues | Steer their orders to the payment paths you control — as of October 2026 Shopify has no native per-customer payment restriction, so this is a review-and-hold workflow or an app | A written internal rule |
| 3. Restocking fee | Returns keep coming | Apply your published restocking fee to their returns | A policy published before the dispute |
| 4. Refuse with documentation | Pattern persists despite rungs 1–3 | Decline the return per your published policy, with the file attached | A complete, dated record |
Fairness rules that keep the ladder legitimate:
- Never accuse. The ladder adjusts commercial terms; it does not announce findings. "Per our published policy" is the strongest sentence you get.
- Document everything, before you need it. Rung 4 without rung 1's paper trail is just a refusal, and refusals get disputed.
- Mind the false positives. Your most loyal bracket shopper looks identical to a wardrobe abuser in the export. That's why the trigger is a ratio sustained across multiple orders, not one large return — and why rung 1 is a note, not a lockout.
What not to do
Two moves that feel good and cost money:
- Public shaming. Naming a customer in reviews, forums, or social posts invites defamation exposure, burns trust with everyone who reads it, and adds nothing to your position.
- Ad-hoc denials. Refusing a return for reasons your published policy doesn't contain converts a service issue into a dispute — and the customer's next stop is their bank, at which point you're assembling an evidence pack under deadline. The chargeback playbook exists for exactly that morning; better to never need it.
The honest scale check
Two calibration facts before you escalate anything. First, most returns are honest: the 9% fraudulent share includes organized retail crime — stolen tender, professional decoy rings — that most sub-$2M stores encounter rarely or never. Second, the response should be priced against impact: a flagged customer whose annual refunds total less than an afternoon of your time warrants rung 1 and nothing more. The way to know is to cost the returns themselves — what one return actually costs in shipping, labor, and markdown — which the cost-of-a-return breakdown works through in full.
The policy substrate matters here too, same as everywhere in returns: rungs 3 and 4 only exist if your policy says they do, in writing, before any dispute. If it doesn't, the Shopify return policy guide covers the structure, and the restocking-fee policy guide covers the fee terms that must be published in advance to survive a challenge.
Common questions
What percentage of returns are fraudulent? 9% of all returns, per the NRF/Happy Returns 2025 Retail Returns Landscape (released October 15, 2025). The share includes organized retail crime that most sub-$2M stores rarely see, so treat it as a ceiling for calibration — a reason to check signals, not a quota to hit.
Is bracketing return abuse? No. Ordering several sizes or variants and returning most of them is within policy and common in apparel and footwear. Treat it as a cost driver, not fraud: respond with better sizing guidance on the product page and, if the volume warrants it, a restocking fee published in advance.
Can I refuse a return from a serial returner? Yes, if your published return policy allows it and your documentation supports the pattern. Work the ladder first — flag, restrict, restocking fee — then refuse with the file attached. An off-policy refusal invites a chargeback, and then you're writing an evidence pack instead of a return note.
How do I track return frequency per customer in Shopify? Export your orders and refunds to CSV and pivot by customer email: orders per customer, refunds per customer, and the refund-to-order ratio for each. Compare every ratio against your store average — an illustrative flag is three times the average across three or more orders. The admin's customer profile shows the same history one customer at a time.
What's the first step when I suspect return abuse? Document before you confront. Pull the customer's full order and refund history, compute their ratio against your store average, and write the pattern down with dates. The ladder starts with a note on the customer record — escalation only earns its keep when the dollar impact justifies it.
Next step
Compute your store's refund-to-order ratio this week from your own exports — refunds ÷ orders, store-wide and per customer — and see who clears the 3× line across 3+ orders. If the answer is nobody, close the file and get back to work. If it's one or two names, start at rung 1: date-stamped notes on the customer record, every claim filed. The ladder only works in order.