When a count looks wrong, the inventory adjustment history is the right first stop. Shopify keeps a record of inventory changes per variant per location: what moved, by how much, when, and the reason attached to it. Open a product, go to its inventory for a location, and the adjustment history is there.
Read three columns together and most questions answer themselves.
The three things every adjustment carries
The quantity. A signed change, not a new total. A return coming back is a positive adjustment; a sale is a negative one.
The reason. Shopify attaches a reason from a fixed list — correction, received, damaged, shrinkage, restock and a dozen more. restock is the one that means a returned unit went back into sellable stock. The reason is what makes the history readable a month later, so it is worth being consistent about the ones your staff choose; what each reason means covers the full list.
The time and the actor. Enough to line an adjustment up against the order, refund or count that caused it.
Pulling it for more than one product
For a single SKU the per-variant view is enough. Across a catalogue it is not, and this is where most people go looking for an inventory adjustment report. Shopify's analytics can show adjustments over a period, and the Admin API exposes the same records if you or a developer need them in bulk. Either way, you are reading the same underlying rows.
The change it will never show
Here is the limit, and it matters more than anything above.
The adjustment history is a record of changes that happened. It cannot record a change that should have happened and did not.
When a refund is processed with the Restock box left unticked, inventory is never touched. No adjustment is written, because there was nothing to write. The unit may be back on your shelf, but as far as the history is concerned nothing occurred at all. Scrolling the adjustment history for that unit shows you the sale and then silence.
So the cases that cost you the most are exactly the ones absent from the log you would check.
Finding the absences
The only way to see them is to stop reading the adjustment history on its own and compare it against refunds. For each refunded line item, ask whether a matching positive adjustment exists near it. Where a refund has no answering adjustment, you have a candidate — a unit that was paid back to the customer and never returned to your sellable count.
Done by hand this is slow. StockReclaim runs that comparison continuously and lists each case with its order, item, value and age. The headline figure is free; see how the audit works or the plans.