What phantom stock actually is
Phantom stock is any mismatch between the quantity WooCommerce shows for a product and the quantity that physically exists. It runs in both directions — WooCommerce can show '12 in stock' when there are really 3 left, or it can show 'out of stock' on a product that's sitting on the shelf in plain sight.
The first version costs you refunds and angry customers. The second version costs you sales you never even see — a customer hits 'out of stock', assumes you don't have it, and buys from a competitor instead. Neither shows up as an obvious problem in your dashboard. It just quietly drains revenue.
Where phantom stock actually comes from
Phantom stock isn't one bug — it's the accumulated effect of every place stock changes hands without WooCommerce being told. Most SA stores hit at least three or four of these:
| Source | What happens |
|---|---|
| Manual counting errors | Someone counts 47, types 74. WooCommerce trusts it completely. |
| Damaged/expired stock written off, never removed | Physically gone, still counted as available. |
| Multiple sales channels | Sold on Takealot or in-store, WooCommerce never hears about it. |
| Returns processed late | Customer returns an item, it sits in a box for two weeks before anyone updates the count. |
| Supplier short-shipments | You ordered 100, received 85, but received all 100 into stock. |
| Staff picking the wrong item | The SKU that got picked isn't the SKU that got deducted. |
| Bulk imports overwriting real counts | A CSV re-import resets careful manual adjustments back to stale numbers. |
It's not a WooCommerce problem
WooCommerce's stock field does exactly what it's designed to do: hold a number and decrement it when an order is placed on that store. It was never built to reconcile physical reality, multiple channels, or human error — that job belongs to whatever sits between your warehouse and your store.
What phantom stock actually costs you
Phantom stock doesn't show up as a line item anywhere, which is exactly why it survives for years in most stores. It shows up as smaller, harder-to-trace costs that add up fast:
- Refunds on oversold items — you took the money, then had to give it back, and paid the payment gateway fee twice
- Cancelled orders that still cost you a courier booking fee
- Customers who hit 'out of stock' on something you actually had, and bought elsewhere
- Staff time spent manually reconciling counts that should have been accurate to begin with
- One-star reviews from customers who waited a week to be told their order can't be fulfilled
- Bad restocking decisions — you reorder a SKU the system says is low, when it's actually sitting in a bin somewhere
A rough back-of-envelope number
If even 3% of your monthly orders touch a phantom-stock SKU — oversold, refunded, or lost to a false 'out of stock' — that's 3% of revenue either refunded outright or never captured. On a store doing R200,000/month, that's roughly R6,000/month quietly leaking out, every month, indefinitely.
Signs your store has a phantom stock problem
Phantom stock is easy to miss because none of these symptoms look like an inventory problem on their own. Together, they're a pattern:
- You regularly refund orders because an item 'wasn't actually available'
- Staff have started manually double-checking stock before confirming orders — a workaround, not a fix
- Your 'in stock' count and your last physical count don't match, and nobody's sure when they diverged
- Popular SKUs go 'out of stock' online while units are visibly sitting in the warehouse
- You've stopped fully trusting the numbers in WooCommerce, so you're running a shadow spreadsheet alongside it
Rather than guessing, you can check your own store's stock accuracy for free right now — no account, no signup, results in under a minute.
Scan my store for freeHow the free Fulnex Store Scanner finds it
The Store Scanner is a free tool that connects to your WooCommerce store's public data and checks for the patterns that usually mean phantom stock — no login, no API keys, no account required. It's the fastest way to get an honest read on where your store actually stands before deciding whether it's worth fixing properly.
| What it checks | What it's looking for |
|---|---|
| Stock vs. sales velocity | Products that sell steadily but show static, round stock numbers — a sign nobody's updated them in a while |
| Zero-stock products still visible | SKUs marked out of stock that are still being shown, or vice versa |
| Suspiciously stale timestamps | Products whose stock hasn't changed in a way that matches their order history |
| Duplicate/conflicting SKUs | The same SKU used on multiple products — a common root cause of stock confusion |
| Overall accuracy score | A single score summarizing how much you can trust the numbers you're seeing right now |
It only reads public data
The scanner only looks at what your storefront already shows publicly — product pages, stock status, pricing. It never touches your WooCommerce admin, your database, or requires API access. You'll get a real result even if you've never heard of Fulnex before today.
Fixing phantom stock properly (not just patching it)
A scan tells you where the problem is. Fixing it for good means removing the root cause — WooCommerce being the only source of truth for a number that depends on things happening outside WooCommerce entirely.
The proper fix has three parts:
- One shared, authoritative stock count that lives outside any single store — not spreadsheets, not each store's own number
- Every stock-moving event (a sale, a pick, a return, a stock receive) updates that one source immediately, not on a nightly batch
- Every store reads from that source, so 'in stock' always means the same thing everywhere it's shown
How Fulnex applies this
This is exactly what Fulnex's warehouse layer does — the same shared stock pool used for multi-store sync and phone-guided picking. Once stock lives in one place and every pick, pack, receive, and sale updates it immediately, phantom stock stops being possible by design instead of something you check for occasionally.
See how Fulnex keeps stock accurate across picking, packing, receiving, and every connected store.
Read the full fulfillment guideFrequently asked questions
Is the Store Scanner really free, with no signup?
Yes. Enter your store URL and get a score and findings in under a minute. No account, no card, no WooCommerce API keys required — it only reads what your storefront already shows publicly.
Can phantom stock happen even with only one sales channel?
Yes. Even a single-store, single-channel business gets phantom stock from manual counting errors, damaged stock never written off, returns processed late, or staff picking the wrong SKU. Multiple channels make it worse, but they're not the only cause.
How often should I check for phantom stock?
Manually, most stores catch it only after something goes wrong — an oversell, an angry customer. With a proper shared-stock system, the question doesn't come up, because every action that moves stock updates the count immediately rather than on a schedule.
Does fixing phantom stock require replacing WooCommerce?
No. WooCommerce stays your storefront. What changes is where the source-of-truth stock count lives — outside WooCommerce, in a system that every store (and every warehouse action) reads from and writes to immediately.
What's a 'good' stock accuracy score?
Most unmanaged WooCommerce stores score lower than owners expect once you actually check — sales velocity mismatches and stale stock accumulate quietly over months. The scanner gives you a concrete number so you're not guessing.
Stop guessing whether your stock count is real.
Run the free Store Scanner on your own WooCommerce store right now — no signup, no API keys, results in under a minute.
Scan my store for free