A stocktake is simple to describe and tedious to do: count what is physically there, compare it to what Shopify says is on hand, and adjust the difference. The value is not in the counting. It is in what the difference tells you.
Running one
Count by location, not by store. Shopify tracks quantities per variant per location, so a count that mixes locations produces a gap that is real in total and meaningless per line.
Freeze movement while you count. A sale or a return landing mid-count creates a discrepancy that is not a discrepancy. Quiet hours exist for this reason.
Record the adjustment with a reason. Shopify has one for exactly this — cycle_count_available, a discrepancy found between the actual quantity and the recorded one. Use it rather than a bare correction. A stocktake that leaves a trail of unexplained corrections is worth less next quarter than one you can read back.
On Shopify POS the flow is the same, with the counting done on the device against the location it is assigned to.
Reading the gap, by direction
This is the part usually skipped, and it is where the diagnosis lives.
Fewer on the shelf than the admin says. The familiar direction. Shrinkage, breakage that was never written off, picking errors, or stock received into the wrong location.
More on the shelf than the admin says. Less familiar, and more often ignored — a surplus feels like good news. It is not. It means units exist that your store believes it has already lost, so they are not being sold. Receiving errors cause some of this. Returns are the usual cause.
Why returns produce a surplus
When a refund is issued with the Restock box left unticked, the customer gets their money and the unit comes back to your stockroom, but inventory is never adjusted. Shopify still believes the unit was sold and left the building. The item is on your shelf and your count says zero.
Multiply that by a quarter of refunds, and a positive stocktake gap on exactly the SKUs with the highest return rates is not a mystery. It is a signature.
It is also a direction Shopify has no word for. shrinkage covers actual levels being less than recorded; nothing covers the opposite, which is why a surplus gets logged as a nameless correction and never counted — see the adjustment reason that is missing.
The same goes for a return marked lost, a return still open weeks after the refund, and a restock that was recorded but never moved the count. Each ends with stock you own and cannot sell.
After the count
Correcting the number puts today right. It does not stop the gap reappearing, because the process that created it has not changed — and a stocktake is expensive enough that most stores run one a quarter at best.
StockReclaim watches the refund side continuously, so the cases that would have shown up as next quarter's surplus are listed as they happen, each with its order, value and age. The headline figure is free; see plans.