Home › Blog › When Shopify says 12 and the shelf has 7
When Shopify says 12 and the shelf has 7
Every low stock alert is a claim about a number stored in Shopify, not about your shelf. Once those two drift apart the alert is not early or late. It is answering a question about stock you do not have.

On this page
You count a bin because something felt off. Shopify says 12. There are 7.
Nobody took five units in one go. The gap is almost never one dramatic event, which is exactly why it survives: it is five or six small leaks that each look too minor to chase, adding up quietly over a quarter.
That matters more than it sounds, because the number Shopify holds is not just a report. It is the number your reorder decisions run on and the number every low stock alert is measured against. A count that is five units optimistic does not make your alerts noisy. It makes them late, silently, on exactly the variants you watch most closely.
Here is where the units go, which gaps are not actually errors and how much counting is enough.
Where the missing units actually go
In rough order of how often each one turns out to be the culprit.
Damaged returns that got restocked anyway. When you refund an order, Shopify's restock option is on by default. So the unit goes straight back into your sellable quantity the moment you process the refund. Then the physical item turns out to be scuffed, opened or missing a part, so it goes into a box behind the counter instead of back on the shelf. Shopify counted it. Your shelf never saw it. This is the single most common leak in stores that take a lot of returns.
Sales in a shop that outran the sync. If you sell in person as well as online, your POS can take a sale when available stock is already at zero. It warns whoever is on the till, the sale completes anyway and the quantity goes negative or lands late. Every marketplace has a version of this. Two channels selling the last unit within the same minute is not a rare event during a launch. Neither is one channel doing it on its own.
Receiving counted by the packing slip. A delivery arrives, the slip says 48, somebody types 48. The carton actually held 46. Nothing about that ever surfaces until the shelf empties two units early, months later.
Units that left without an order. Samples to a creator, a replacement sent for a damaged delivery, something taken for a photo shoot, staff purchases, genuine shrinkage. Each is defensible. None of them writes itself into Shopify.
Bundles and kits. If you sell a set that draws on component stock, the component quantity only stays honest if whatever builds the bundle actually decrements it. When it does not, the components read high right up until you cannot build the bundle.
Edits that overwrote instead of adjusted. Someone typing a new total into the quantity field, rather than entering the change, wipes out anything that happened between them reading the number and saving it.
The mismatch that is not an error
Before you go hunting, rule out the version of this that is Shopify working exactly as designed.
Shopify holds four numbers per variant per location, not one:
- On hand is everything physically at that location
- Committed is units already sold on orders you have not shipped yet
- Unavailable is stock set aside, including damaged goods a draft order has reserved or an app has held back
- Available is what is left to sell
They relate by a formula worth memorising: on hand equals available plus committed plus unavailable.

So a variant showing 7 available while you count 12 on the shelf is very probably correct. Four are spoken for by orders that have not been picked yet and one is the damaged unit somebody set aside properly. Nothing is missing.
That is the same pair of numbers as the opening of this post, with the opposite meaning. Twelve on hand against seven counted is a real loss of five units. Seven available against twelve on the shelf is five units doing their job. Check which one you are looking at before you spend an afternoon on it, because merchants routinely go looking for stock that was never gone.
The place to check is the variant's inventory breakdown in the admin rather than the number on the product list, which shows available only.
Why drift breaks low stock alerts specifically
This is the part that costs money quietly.
A low stock threshold is a deadline. It says: at this quantity there is still just enough time to reorder before the shelf empties. Set it at 20 because you sell 2 a day and your supplier takes 10 days.
Now suppose your count runs 5 units optimistic on that variant. The alert still fires at 20. Except 20 in Shopify is 15 in the building, so the alert reaches you two and a half days later than you designed it to. You did not lose an alert. You lost most of the slack you built into it.
Worse, drift is not random across your catalog. It concentrates in the variants that sell fastest, get returned most and get handled in a physical shop, which is the same list as the variants you most need the alert to be right about.
Two things follow.
The first is that raising a threshold is not a fix for drift. It hides it, at the cost of ordering earlier than you need to on every variant that is counted correctly. If you have quietly been nudging thresholds up because alerts keep arriving too late, the count is where to look before the threshold is.
The second is that safety stock is meant to absorb demand spikes and a supplier missing a date. When it is silently absorbing count error as well, you are carrying buffer for a problem a twenty minute count would remove.
What to count and how often
Nobody counts their whole catalog on a schedule. You do not need to. Drift is not spread evenly, so counting is not either.
| Variant | Count it | Why it drifts |
|---|---|---|
| Your top 20 by units sold | Monthly | Most transactions means most chances to go wrong |
| Anything with a long restock | Monthly | Being wrong here costs weeks, not days |
| Sold in a physical shop too | Monthly | Two systems, one shelf |
| High return rate | Monthly | The restock leak lives here |
| Components inside bundles | Quarterly | Decrements silently or not at all |
| Everything else | Quarterly | Low traffic, low drift |
| Under one sale a month | Twice a year | Not worth the labour |
Count a variant right after you receive a delivery of it and you will get almost nothing useful, because you just touched it. Count it in the ordinary middle of its cycle instead.
If you hold stock in more than one place, count per location rather than in total. A store with a shop and a warehouse can be perfectly correct overall while both locations are wrong in opposite directions, which is worth reading about in alerts across several locations.
Counting without shutting the shop
Cycle counting means counting a handful of variants at a time on a rota, rather than closing for a full stocktake once a year. It is better on every axis: the errors are found while they are small, the cause is still traceable and nobody loses a trading day.
A workable version takes about twenty minutes.
- Pick the day's list from the table above. Ten to fifteen variants is plenty.
- Count the physical units first, before looking at Shopify. Looking first is how you talk yourself into the number on the screen.
- Compare against on hand, not available. Available will not match and is not supposed to.
- Write down the difference for each one, even the zeroes. The zeroes are the evidence that the ones that moved are worth investigating.
- Adjust in Shopify using an adjustment with a reason, rather than typing over the total.
- For anything off by more than a couple of units, spend five minutes on why before you correct it. The correction is worth one unit. The cause is worth every future unit.
Step 6 is the entire value of the exercise. A count that only corrects numbers buys you an accurate afternoon. A count that finds the returns box behind the till fixes the leak permanently.
The number worth writing down
Track one figure per count: how far off you were, as a share of what Shopify said.
Counted 7 against a stated 12 and you are off by 5 on 12, which is roughly 40 percent. Under about 2 percent on a variant is normal handling noise and not worth chasing. Anything above 5 percent that keeps recurring on the same variant is a process problem with a name. That name is nearly always one of the six in the first section.
Keep it in a spreadsheet with the date, the variant, both numbers and one line on the cause. After three months you will not be guessing about which part of your operation leaks. You will be able to point at it.
That record also tells you when to stop. A variant that has come back clean four counts running has earned a longer interval. Counting is a cost like any other and the goal is not perfect books. It is a number trustworthy enough that when an alert fires you act on it instead of walking out to check.
If you only do one thing this week
Take your ten best sellers and count them. Just those ten.
Most merchants find one variant badly wrong, two mildly wrong and seven fine. The one that is badly wrong is usually the one carrying a stockout you had already half decided was bad luck. Fixing the cause behind it is worth more than any threshold you could tune, because a threshold only ever works as well as the number it is watching.
Once the count is honest, the rest of the system starts behaving. Your reorder points mean what they say, your alerts arrive with the slack you built into them and the work of preventing stockouts goes back to being about supply rather than about arithmetic.
Know before a SKU hits zero
Stockwell watches every variant at every location and emails your team when stock falls under the level you set. Install it from the Shopify App Store and the first alert is running in a couple of minutes.
Get it on the Shopify App StoreFree plan covers 50 SKUs with a daily summary. Paid plans add instant alerts and more recipients. No card needed to start.