A return in Shopify is a small chain of records. Knowing what each one does makes it much easier to work out where a unit went when the count looks wrong.
The chain
The return is created. Either through the admin, or by a returns app acting through the API. This says which line items are coming back and why. Nothing has moved yet.
The item is received. In Shopify's model this is a reverse fulfillment order. Each received item gets a disposition: restocked, damaged, missing, or not restocked. This is the moment the physical decision is recorded.
Inventory adjusts. If the disposition is restocked, Shopify raises the available quantity at the chosen location. This is the only step that changes a number a customer can buy against.
The refund is issued. Money goes back to the customer. A refund can also carry its own Restock checkbox, which adjusts inventory independently of the return flow.
Where units go missing
Each link in the chain can break.
- The return is created but never received, so it stays open with the unit in limbo.
- The item is received but dispositioned as not restocked, when it was actually fine.
- A refund is issued on its own, with Restock unticked, and no return record exists at all.
- The disposition says restocked, but the inventory adjustment never happens or happens at the wrong location.
That last one is the quiet one. Everything reads as done, and the count is still wrong.
Which records to compare
The useful comparison is always between a claim and an adjustment. A refund line with a restock quantity should have a matching inventory adjustment. A reverse fulfillment disposition of restocked should have one too. When the claim exists and the adjustment does not, you have found the unit.
Shopify does not keep a long historical log of adjustments, so this comparison works best when it runs continuously rather than once a year.
Two habits that keep the chain intact
Receive returns through the return itself, not just by refunding the order, so the disposition gets recorded. And once a week, look at any return older than your normal turnaround that is still open.
StockReclaim watches each link in this chain and lists the breaks as exceptions, priced and aged. See the four rules.