How to track inventory shrinkage in Shopify

Three methods, what each one keeps when stock goes missing, and where each one stops.

What shrinkage is, and what “adjust the quantity” throws away

Shrinkage is the gap between the stock your records say you have and the stock that is actually on the shelf. It has a handful of causes worth telling apart: theft, damage in the stockroom or in transit, products that expired or spoiled before they sold, units given away as samples or used for marketing, and plain administrative error — a miscount, a receiving mistake, a return that was never restocked. The total matters for your books. The split matters for deciding what to do about it, because a theft problem, a freezer problem and a counting problem have three different fixes.

The reflex when a unit is gone is to lower the quantity in Shopify and move on. The quantity is now right, which is the whole point of the adjustment. But two things are lost in the same motion. The reason is gone, unless you wrote it somewhere the number cannot hold. And the cost is gone, because a quantity change is not a money figure — at the end of the month nobody can say what shrinkage cost, only that some numbers went down. Both facts are known at the moment the loss happens and at no other time, so whichever method you use has to catch them then.

Method 1 — a Shopify inventory adjustment, with a reason selected

Shopify's admin does let you attach a reason. From Products > Inventory, pick the location, click the Available or On hand quantity for the item, use Set to or Adjust by, and before you save click Add reason. The reasons offered are Correction (the default when none is chosen), Count, Damaged, Promotion or donation, Received, Return restock, and Theft or loss. This is free, on every plan, and if you are adjusting by hand today without choosing a reason, start choosing one: your history becomes readable at no cost.

Three limits decide whether it is enough. First, the reason is optional, and an adjustment saved without one appears in the history as “Manually adjusted,” so the discipline has to come from you and from every staff member who touches stock. Second, the list is fixed: theft and loss share one reason, expiry and samples have no reason of their own (Damaged and Promotion or donation are the nearest fits), and the help page documents no note field for which shelf, which batch or which supplier. Third, there is no cost anywhere in it.

What you can get back out later: the adjustment history shows the date, the activity, who made the change and the quantities in each state, for the last 180 days, per product or variant, one variant at a time. For anything older or for a store-wide view, Shopify's analytics let you build an inventory adjustment report with change and count metrics broken down by SKU, location, inventory state and reason — quantities, not value. Putting a dollar figure on shrinkage means exporting that report and multiplying each line by its cost yourself.

Sources: Shopify Help Center — adjusting inventory quantities · viewing inventory adjustment history · inventory adjustment reports

Method 2 — a spreadsheet ledger keyed on SKU

One row per loss: SKU, location, date, reason, quantity, unit cost, and a note column for whatever the reason does not say. Two habits make it work. Enter the row at the moment you make the Shopify adjustment, not at the end of the week, or the two will never agree again. And copy the unit cost from the variant's Cost per item field at that moment, because costs change and a loss in March should carry March's cost, not whatever the field says in June.

This answers the question the admin cannot. A pivot by reason and month gives a costed shrinkage figure your accountant can post as a write-off; a filter by SKU shows the items that keep leaking; a filter by reason shows whether the problem is the door, the freezer or the receiving bench. It is free and nobody has to learn anything new.

The costs are worth being honest about. Every loss is now two entries — one in Shopify and one in the sheet — and they drift apart the first time somebody adjusts stock without opening the sheet. Nothing reminds anyone. Variants with no SKU cannot be keyed this way at all. And counting is a separate exercise with its own sheet: a count shortfall has to be typed into the ledger by hand, with a reason the sheet cannot know.

Method 3 — an app that records each loss against the variant

This is what ShrinkGuard does, and it is the row from method 2 written once instead of twice. You pick the product and variant, enter the quantity, choose a reason and a location, and add a note if you want one. The built-in reasons are Shrinkage, Theft, Damaged, Short shipment, Expired or spoiled, Sample or marketing, Returned to vendor, Count correction and Other, and you can add your own in Settings. ShrinkGuard removes the units from Shopify available stock, never below zero, values them at the variant's Cost per item, and adds the entry to the ledger. Undo restores the stock and removes the entry.

Cycle counts are the same idea applied to a shelf: choose a location, add products, enter what you counted against what Shopify expected, pick a shortfall reason and post. Shortfalls become costed losses and stock is adjusted to what you counted. The Reports page breaks write-offs down by reason, location, vendor and worst-offender products for any period, with an accounting CSV export. The Vendors page separates the losses a supplier is normally answerable for — short shipments, damage on arrival, returns to vendor — and exports a per-supplier claim CSV. Settings can send the costed report by email monthly or weekly, optionally to a Slack or webhook URL as well, with a spike line when the last 30 days are well above your recent average and a once-a-day alert when trailing loss crosses a dollar threshold. History from a sheet can be bulk-imported from CSV so the reports start with real numbers.

What it does not do: it does not detect theft, reconcile your POS or forecast anything, and it is a tool rather than accounting or tax advice. It reads products, inventory and locations, and writes inventory for one purpose — taking the units you record off available stock. It requests no customer or order data, so it stores no names, emails or addresses.

The Free plan covers up to 25 loss records a month, with reports, the shrink rate and the vendor view. Standard is $9.99 per month, or $99.90 per year, with a 14-day free trial, billed through Shopify in USD: unlimited records, cycle counts, CSV exports, the emailed report and alerts.

Which one to pick

If losses are rare and you only need to know roughly why stock moved, select a reason on the admin adjustment and spend nothing — it is a real improvement over an unexplained number. If you need a costed figure for your books, have a catalog small enough that two entries per loss is bearable, and are confident the sheet will be opened every time, the spreadsheet in method 2 is a complete answer and the instructions above are complete on purpose. The app earns its price when losses are frequent enough that the second entry stops happening, when you count shelves and want the shortfall costed without retyping it, or when a supplier owes you for stock that arrived short and you need the lines to prove it.