Skip to content

Shopify inventory adjustment reasons: what each one means, and the one that is missing

Every inventory adjustment in Shopify carries a reason, and the list is fixed. Here is what each reason is for, which ones a small store actually uses, and why the most common returns loss has no reason at all.

When inventory is adjusted in Shopify, a reason goes with it. The list is fixed rather than freeform, which is the point: a month later, the reason is the only thing that makes the adjustment history readable.

The reasons, grouped by what they are for

Counting and correcting

  • correction — an inventory error, or a general adjustment when nothing else fits
  • cycle_count_available — a discrepancy found between the actual quantity and the recorded one. This is the stocktake reason.

Goods moving

  • received — inventory the merchant received
  • movement_created, movement_updated, movement_received, movement_canceled — a transfer or purchase order at each stage

Units leaving, or held back

  • damaged — removed because the unit is damaged
  • shrinkage — actual levels are less than recorded, through theft or loss
  • promotion — removed for a promotion or donation
  • quality_control — on hand, but in inspection and not sellable
  • safety_stock — held back to guard against overselling
  • reservation_created, reservation_deleted, reservation_updated — units temporarily set aside

Returns

  • restock — add a returned unit back to available inventory so it can be resold

Everything else

  • other

Shopify documents the full list under managing inventory quantities and states.

Which ones a small store actually uses

In practice most stores touch six: correction, cycle_count_available after a count, received on new stock, damaged and shrinkage for losses, and restock when a return comes back. The rest belong to transfers and reservations, which smaller catalogues rarely run.

The reason that does not exist

Read the list again with one question in mind: which reason covers more stock on the shelf than the admin says?

shrinkage is explicitly the other direction — actual less than recorded. There is no counterpart for actual more than recorded. That direction has no name in Shopify's vocabulary, so when it turns up it gets logged as a correction, alongside every unrelated typo and fat-fingered count.

This matters because the direction without a name is not rare. It is what a store gets when a refund is issued with the Restock box left unticked: the customer is paid, the unit returns to the stockroom, and the count is never touched. And because inventory was never adjusted, there is not even a correction to find — nothing is written at all until someone notices and corrects it by hand.

So the loss that has no reason code also leaves no row. It is the one kind of inventory problem you cannot audit from the adjustment history, and that is precisely why it persists.

StockReclaim finds these by comparing refunds against the adjustments that answered them, and lists each case with its order, value and age. The headline figure is free; see how the audit works or the plans.


← All posts · StockReclaim finds refunded items that never made it back to your shelf. See plans.