This is a fictional but representative case study, based on patterns commonly seen across Shopify stores. The numbers, causes, and fixes are realistic and drawn from real merchant scenarios.
Sarah runs a mid-sized Shopify store selling home decor and lifestyle products. At the start of last year, she had 340 SKUs, was doing about $28,000/month in revenue, and felt like things were running smoothly.
She was wrong — but she had no way of knowing it yet.
Chapter 1: The "Weird" Cancelled Orders
In February, Sarah started noticing something off. Her team was cancelling more orders than usual — 6 to 8 per week, up from the normal 1 to 2.
The pattern: products showing as in stock when customers ordered, then discovered unavailable when staff went to pick and pack.
Her first assumption was staff error. She sent a reminder email, ran a quick training session, and moved on.
The cancellations slowed down for two weeks. Then came back.
"I thought it was just a busy season thing. We were doing more volume, so more errors made sense to me. I didn't dig deeper."
She was looking at the symptom. She wasn't looking for the cause.
Chapter 2: The Numbers Nobody Was Tracking
Four months later, Sarah sat down to do her quarterly review. For the first time, she added up the cancellation numbers properly.
| Month | Cancelled Orders | Avg Order Value | Direct Revenue Loss |
|---|---|---|---|
| February | 24 | $58 | $1,392 |
| March | 31 | $61 | $1,891 |
| April | 28 | $55 | $1,540 |
| May | 29 | $59 | $1,711 |
| Total | 112 | $58 | $6,534 |
$6,534 in direct refunds over four months. But that was just what she could see.
When she factored in customer service time (averaging 20 minutes per incident), refund processing fees, and an estimate of lost repeat customers (based on her average customer LTV of $185), the true cost was closer to $8,000 over four months — roughly $2,000 per month.
$2,000/month is 7.1% of her $28k monthly revenue — effectively a silent tax that had been running for at least four months before she noticed it.
Chapter 3: The Investigation
Sarah picked the 10 products with the most cancellations and ran a physical count. She'd been dreading doing this for weeks. The results were worse than she expected.
| Product | Shopify Count | Physical Count | Discrepancy | At Risk |
|---|---|---|---|---|
| Ceramic Vase Set (3-piece) | 24 | 11 | -13 | $754 |
| Linen Throw Pillow (Sage) | 18 | 7 | -11 | $363 |
| Wooden Candle Holder | 31 | 19 | -12 | $228 |
| Woven Storage Basket | 15 | 4 | -11 | $275 |
| Glass Terrarium (Medium) | 22 | 14 | -8 | $320 |
| Macrame Wall Hanging | 12 | 5 | -7 | $245 |
| Rattan Side Table | 8 | 3 | -5 | $325 |
| Dried Flower Arrangement | 20 | 9 | -11 | $275 |
| Marble Serving Board | 17 | 8 | -9 | $405 |
| Beeswax Candle Set | 35 | 21 | -14 | $210 |
On just 10 products: 101 phantom units, $3,400 in phantom stock value.
:::screenshot /blog/dashboard-overview-anomalies.png|This is what Sarah's dashboard would have looked like if she'd had CoreCaptain — 10 anomalies flagged, value at risk visible at a glance, root causes identified.|CoreCaptain dashboard with active anomalies :::quote "I remember staring at that spreadsheet for a long time. Some of these products were more than 50% phantom. I had no idea. The dashboard looked completely normal." :::
Chapter 4: Finding the Root Causes
Sarah dug into the history on each of the 10 products. Over two days of investigation, three root causes emerged.
Root Cause 1: Returns Restocked Without Inspection
Her virtual assistant logged all customer returns in Shopify and placed the items back on the shelf — quickly, efficiently, without any condition check.
For the Ceramic Vase Set alone, Sarah found 7 returned sets on the shelf. All 7 had either chipped vases or missing pieces. All 7 had been added back to available inventory. All 7 were generating false available stock.
The same pattern repeated across the Macrame Wall Hanging (fragile pieces), the Dried Flower Arrangement (wilted returns), and the Rattan Side Table (damage from shipping).
Phantom units created this way: ~45 across the 10 products
Root Cause 2: A Supplier Who Consistently Short-Shipped
Sarah's primary home goods supplier regularly sent 24–26 units on purchase orders for 30. Her receiving process: log "received" from the PO number, not from an actual count.
Over 18 months of ordering from this supplier, she conservatively estimated 15 short shipments averaging 5 units short each — 75 phantom units from a single supplier relationship.
When she called the supplier, they acknowledged the issue immediately and credited her account. The short shipments had been happening for over a year. Nobody had caught it because nobody was counting at receiving.
Root Cause 3: Discrepancy "Fixes" That Hid the Problem
When staff noticed products running lower than expected, they'd occasionally update the Shopify count to match reality. Well-intentioned. But it meant:
- The root cause was never investigated
- There was no record of why the adjustment was made
- The same problem kept recurring invisibly
Manual inventory adjustments without documentation are one of the most common ways that inventory problems become invisible. The number looks correct now — but the underlying issue is still there, creating the same discrepancy again in 2–3 weeks.
Chapter 5: The Fix (Surprisingly Simple)
None of Sarah's fixes required new software or significant investment. They were all process changes.
Fix 1: Returns Workflow Overhaul
No return goes back to available inventory without: 1. Physical inspection by a named team member 2. Explicit categorisation: "restock" or "write off" 3. If write off: immediate Shopify inventory adjustment with reason noted
Time to implement: one afternoon to update the process doc and brief the team.
Fix 2: Receiving Verification
Every shipment is now physically counted before logging. Any discrepancy vs. the PO: 1. Logged immediately with photos 2. Supplier notified same day 3. Shopify updated to match actual received quantity (never the PO quantity)
Time to implement: 30 minutes to update the receiving checklist.
Fix 3: Required Notes on All Manual Adjustments
Every manual inventory adjustment now requires: 1. Reason (choose from a dropdown: damage, count correction, return write-off, other) 2. If "other": free text explanation 3. Operations lead reviews all manual adjustments weekly
Time to implement: 20 minutes to set up the process.
Chapter 6: The Results
Two months after implementing the changes, Sarah ran the numbers again.
| Metric | Before | After (60 days) | Change |
|---|---|---|---|
| Cancelled orders per week | 6–8 | 0–1 | -87% |
| Estimated monthly loss | ~$2,000 | ~$150 | -92% |
| Inventory accuracy (top 20 SKUs) | 68% | 94% | +26 points |
| Receiving discrepancies caught | 0/month | 3–4/month | Now catching them |
| Returns restocked incorrectly | ~12/month | 0 | Eliminated |
"The frustrating thing is that none of this was technically complicated. I didn't need a new tool or a new system. I needed to actually look at what was happening and fix the process. I just wish I'd done it four months earlier."
What Would Have Changed With Earlier Detection
An automated anomaly detection system would have flagged phantom stock on those 10 products within days of it forming — not four months later in a quarterly review.
The signal was there in the data: inventory depleting faster than sales explained, returns not matching inventory increases, specific SKUs with unexplained count drops.
A human reviewing 340 SKUs manually every week would never catch those patterns. A system monitoring every product every day against its expected behaviour would catch them within 48–72 hours.
The difference: - 4-month problem → 1-week problem - $8,000 loss → ~$500 loss - 112 cancelled orders → ~8 cancelled orders
The Three Lessons
- Phantom stock doesn't look like a problem until it's already expensive. Your dashboard shows green. Everything looks fine. The signal is in the gap between what the system says and what reality is — and that gap is invisible unless you're specifically looking for it.
- The root causes are almost always process failures, not technology failures. Receiving without counting. Restocking returns without inspecting. Adjusting inventory without documenting. These are fixable in an afternoon.
- Detection speed is the variable that determines total cost. Sarah's $2,000/month problem existed for at least four months before she found it. The cost wasn't the rate of loss — it was the duration. Cutting detection time from months to days is the highest-leverage improvement any merchant can make.