Useful Tools

Troubleshooting

Shopify stock doesn't match reality: diagnose and fix inventory discrepancies

When Shopify's stock number disagrees with the shelf, work a diagnostic tree before you touch anything: is tracking on, what does the adjustment history show, are receipts unrecorded, are SKUs or barcodes duplicated, is stock at the wrong location — and only then count for shrinkage. A cause-symptom-fix table and the safe way to correct.

By Bastien HugonFounder & Engineer11 min readPublished July 10, 2026

TL;DR

When Shopify's stock disagrees with the shelf, diagnose before you correct. Work down a tree: (1) is inventory tracking even on for the variant, (2) what does the adjustment history show — who changed it, when, why (the admin keeps 180 days), (3) are there receipts you never recorded, (4) are SKUs or barcodes duplicated, (5) is stock assigned to the wrong location, and (6) whatever is left is shrinkage — count it. Fix each cause at its source, apply corrections with the reason "Count", and never overwrite a number blindly, because a blind overwrite hides the cause and creates the next discrepancy.

"Shopify says 3, the shelf has 7" — or worse, an item shows out of stock while it is sitting in front of you. The instinct is to type the right number and move on, but that fixes the symptom and buries the cause, so the same gap reappears next week. Discrepancies almost always trace to one of six causes, and each has a different fix. This page is the diagnostic order to work them in, from cheapest to check to most laborious, so you count for shrinkage only after ruling out the causes a count would not solve.

The diagnostic tree

  1. 01

    Is inventory tracking on for the variant?

    Open the product's variant and confirm "Track quantity" is enabled. An untracked variant has no on-hand to be right or wrong — it can read as unavailable or as always available depending on your settings. If tracking is off and you expect Shopify to manage the number, that is the whole problem; turn it on and set the correct on-hand.

  2. 02

    Read the adjustment history

    On the variant, open the inventory adjustment history to see who changed the quantity, when, and under which reason. The admin retains this for 180 days; older changes come from the "Inventory adjustment changes" report. A single wrong bulk edit or a mis-scanned sale often shows up here immediately, telling you the gap is a recording error, not missing stock.

  3. 03

    Check for unrecorded receipts

    If the shelf has more than Shopify, look for stock that arrived and got shelved without being recorded — a delivery received while the app that adds it was skipped, or a return put back without a restock adjustment. Record those receipts with the right reason (Received or Return restock) rather than lumping them into a count.

  4. 04

    Look for duplicated SKUs or barcodes

    Two variants sharing a SKU or barcode split the truth: a scan or an import can land on the wrong one, so one variant looks short and its twin looks long. Search for duplicate SKUs and barcodes across the catalog; deduplicate before you count, or the count will just move the error around.

  5. 05

    Check multi-location assignment

    With more than one location, stock can be correct in total but assigned to the wrong place — the warehouse shows the units the storefront thinks it is out of. Confirm each location's on-hand, and check that the sales channel is stocked from the location that actually holds the goods.

  6. 06

    Whatever remains is shrinkage — count it

    Once tracking, history, receipts, duplicates, and locations are ruled out, the residual gap is genuine shrinkage: theft, breakage, or miscounts. That is the part a physical count fixes. Count the affected items and apply the corrected on-hand with the reason "Count".

Cause, symptom, and fix at a glance

CauseTypical symptomFix
Tracking offItem always available or never available regardless of stockEnable Track quantity; set on-hand
Bad adjustment / mis-scanSudden jump in history with a wrong reasonCorrect the line; use reason Correction or Count
Unrecorded receiptShelf higher than Shopify on recently delivered itemsRecord with Received or Return restock
Duplicate SKU / barcodeOne variant short, a near-identical one longDeduplicate SKUs and barcodes, then recount
Wrong location"Out of stock" online while stock sits elsewhereReassign to the correct location; fix channel stocking
ShrinkageSmall unexplained gap after all else is ruled outPhysical count; apply with reason Count

Shopify's adjustment reasons are a fixed set — Correction, Count, Received, Return restock, Damaged, Theft or loss, and Promotion or donation. Choosing the right one is not cosmetic: it is what makes next month's history readable. A gap fixed under "Count" tells the next person a stocktake happened; the same fix typed in with no context tells them nothing.

Never fix a discrepancy by overwriting the number blindly. A blind overwrite erases the evidence of what caused the gap, so you cannot tell shrinkage from a duplicate SKU from an unrecorded receipt — and the cause, still unaddressed, produces the next discrepancy. Diagnose first, correct at the source, and apply with the reason "Count" so the history stays honest.

What counts as "too far off"

Not every gap needs a full investigation, but there is a line. Shopify's own guidance is to recount when a variance is over 5% — that threshold separates a plausible miscount from a signal that something systemic is wrong. Under it, apply the count and move on; over it, recount before you trust the number, because a large gap on a single line is more often a duplicate SKU, a missed shelf, or a wrong location than real loss.

Doing this with Solvi Stocktake

Solvi Stocktake is built so the final step of this tree — the count — never becomes the next discrepancy. It captures on-hand at the moment of each scan, so a sale landing mid-count is flagged for accept-or-recheck rather than overwritten. Nothing is written until you review the variance report, un-counted items are never zeroed without an explicit opt-in that names how many items would be affected, and every applied count uses the "Count" reason so your adjustment history stays diagnosable. A snapshot lets you roll an apply back in one click if a number looks wrong after the fact. The Free plan covers two counts a month; Starter is $9 and Growth is $19.

Frequently asked questions

What discrepancy rate is acceptable?

Shopify's guidance is to recount whenever a variance is over 5%. Below that, a small gap is usually an ordinary miscount you can correct and move on from. Above it, treat the number as untrusted and recount before applying — a large single-line gap is more often a duplicate SKU, a missed shelf, or stock at the wrong location than genuine loss.

How far back does Shopify inventory history go?

The admin keeps inventory adjustment history for 180 days per variant — who changed the quantity, when, and under which reason. For changes older than that, you use the "Inventory adjustment changes" report rather than the per-variant history. Because both are time-bound, export your counts to CSV if you need a durable record for accounting.

Why is my item showing out of stock when I have it?

Usually one of three things: inventory tracking is off or set wrong for that variant; the stock is assigned to a location the sales channel does not sell from, so the storefront sees zero while the units sit elsewhere; or a duplicate SKU or barcode routed a sale onto the wrong variant, driving one to zero. Check tracking first, then location assignment, then duplicates before assuming the stock is actually gone.

Related guides

Do this in minutes with Solvi Stocktake

Count your stock by scan, review the discrepancies against Shopify, and apply the fix — without ever risking your inventory data.