How to Prevent Inventory Discrepancies
Why Shopify inventory numbers drift from reality — overselling, sync lag, receiving errors, shrinkage — and the process fixes that stop it recurring.
Your Shopify admin says you have 42 units of a SKU. The shelf has 37. Nobody stole five candles overnight. Something in your process let the numbers drift apart, and once you know where to look, a discrepancy stops being a mystery and starts being a short list of usual suspects.
This post is about those causes and the process fixes that stop them recurring. It won't walk you through running a count or logging a single adjustment (those have their own guides, linked below); this one is about why the number was wrong before you ever opened the count screen.
Why discrepancies happen
Shopify tracks three numbers per product per location: Available, Committed, and Unavailable. On hand is just the sum of the three. A discrepancy means one of those three drifted from reality without anyone catching it at the time — an order that should have committed stock didn't, a return that shouldn't have restocked did, or a shipment that arrived was never logged. Every cause below is one specific way that happens.
A discrepancy isn't a mystery. It's a specific event that changed a number without anyone confirming it against the shelf.
Overselling & sync lag
Draft orders are the most common blind spot. Shopify doesn't move a draft order's items into Committed unless someone explicitly clicks "Reserve inventory." Until that happens, the units stay fully Available and sellable through your storefront at the same time you're quoting them to a phone customer. If your team builds phone or wholesale orders as drafts without reserving, you will eventually sell the same unit twice.
The other sync-related cause is structural, not a mistake anyone makes: a single Shopify location holds one quantity per product, and if more than one channel or app writes to that number, a write from one can lag or overlap with a write from another. This isn't a documented Shopify warning. It's a consequence of how the inventory model works.
If you sell bundles or kits, add one more line to your suspect list: whether selling a bundle actually decrements each component's stock is genuinely worth confirming in your own store. Secondary sources disagree on the default behavior, and we're not going to guess at it here. Check it directly rather than assuming either way.
Receiving errors
"Received" is one of Shopify's own built-in adjustment reasons, which tells you Shopify expects receiving mistakes to be common enough to name explicitly. The usual version: a box of 24 gets counted as 20 during a rush, or a shipment meant for your warehouse location gets logged against your retail location instead. Neither shows up as wrong until the next count.
A quieter version happens in bulk tools. Shopify has two different inventory-related CSVs that are easy to confuse: the product-export CSV's "Variant Inventory Qty" column, and the dedicated inventory CSV's "On hand (new)" column. They aren't interchangeable. Mixing them up during a receiving update can silently overwrite good numbers with stale ones.
Returns are receiving in reverse, and they carry the same risk. The "Restock inventory" checkbox on order cancellation and the "Restock items" checkbox on refunds are both selected by default, so a staff member processing a refund for a damaged or unsellable item, without thinking to uncheck it, adds unsellable stock straight back into Available. That's a discrepancy that looks fine in the system and wrong the moment someone tries to sell it.
Manual adjustment mistakes
Shopify's inventory adjustment reasons are Correction, Count, Received, Return restock, Damaged, Theft or loss, and Promotion or donation, and Correction is the default selection. A store where staff always leave the reason on the default has a full audit trail of numbers changing, but no record of why, which makes root-causing a recurring discrepancy much harder six weeks later. Picking the actual reason takes five extra seconds and saves you the guesswork.
Retention matters too. Each product's adjustment history covers the last 180 days on the product page (Shopify doubled this from 90 days in November 2024). For anything older, or a store-wide view, the Inventory adjustment changes report goes further back and can be filtered by SKU, location, staff member, app, and reason.
For the mechanics of making a single adjustment correctly (which UI path, which reason to pick, how the audit trail records it) see our guide to adjusting inventory in Shopify. This post is about why the wrong adjustment happens in the first place, not how to make a correct one.
Theft & shrinkage
Theft or loss is, again, one of Shopify's own named adjustment reasons: evidence that shrinkage is treated as an expected, recordable event, not an edge case. Prevention here is mostly operational, not a Shopify setting: reconcile shrinkage against a specific count rather than a running guess, and log it under its actual reason so a pattern shows up later instead of disappearing into "Correction."
Prevention checklist
None of this needs new software to fix. It needs a few habits applied consistently:
- Reserve draft orders the moment you promise a customer stock, not after. An unreserved draft is still fully sellable to anyone else.
- Uncheck "Restock" on any refund or cancellation involving damaged or unsellable goods.
- Pick the real adjustment reason every time, not the Correction default, so the audit trail actually explains what happened.
- Standardize which CSV your team uses for receiving updates, and don't let the product-export CSV and the inventory CSV get mixed up.
- Reconcile with a real count on a schedule rather than only when something looks wrong. See our stock count guide for the execution steps and cycle counting vs. a full physical count for choosing how often.
- If you're new to how Shopify's Available, Committed, and On hand numbers actually move, our tracking mechanics guide covers the state machine this whole post assumes you understand.
Manual reconciliation works until you're chasing this pattern across dozens of SKUs a month by hand. That's usually the point where stores look at a dedicated inventory app instead of a spreadsheet and a saved filter view. StockCue is ours — the audit-log export below is the part that matters for this particular problem.
STOCKCUE
Tracing a discrepancy back to who adjusted what, and when, gets slow once you're past a handful of SKUs. StockCue's Growth plan exports a full inventory audit log so you can filter by SKU, location, or reason in a spreadsheet instead of clicking through 180 days of history one variant at a time.
Install StockCue on Shopify →Frequently Asked Questions
Why does my Shopify inventory count never match what's on the shelf?
Because Shopify's On hand number only reflects what the system was told happened, not what's physically true. Discrepancies come from a short list of usual suspects — unreserved draft orders, refunds that silently restock damaged goods, receiving counts entered into the wrong place, or shrinkage nobody logged. A regular stock count is what catches the gap between the two.
Can overselling cause inventory discrepancies in Shopify?
Yes. Draft orders don't reduce Available inventory unless you explicitly reserve them, so the same units can be sold again through your online store before the draft is completed. Multiple sales channels or apps writing to the same inventory record can also lag or conflict, producing an oversell that later needs a manual correction.
How do receiving errors cause inventory to drift?
A miscounted box, a shipment logged against the wrong location, or a quantity typed into the wrong CSV column all push a number into Shopify that doesn't match what actually arrived. Shopify has two separate inventory-related CSVs with different column names, and mixing them up during a bulk update is a common, avoidable source of drift.
What's the fastest way to find where a discrepancy came from?
Start with Shopify's Inventory adjustment changes report, which you can filter by SKU, location, staff member, app, and adjustment reason. Each product's own adjustment history also shows the last 180 days directly on the product page, which is usually enough to spot the day something went wrong.
For the fundamentals this post builds on, start with our inventory management fundamentals guide.