A customer orders the last three units of your best seller. Your picker walks to the bin and finds one. Now someone has to email the customer, refund two units, and wonder how many other listings are wrong.
Shopify usually shows stock you don't have for one of five reasons: refunds and cancellations restock by default, shipped orders were never marked fulfilled, a variant can sell below zero, a location is set up differently than you think, or an app or import overwrote the count. Each one leaves a trace you can read.
What is this costing you?
Work it out with your own numbers before you decide how much effort the fix deserves. Over the last 30 days, count:
- orders you cancelled or part-refunded because the item wasn't there;
- the staff time each one took: the apology email, the refund, the recount;
- listings someone set to zero "just in case", which then sold nothing;
- the hours your last full stock count took.
For example, a warehouse that oversells four orders a week, at 20 minutes of staff time each, spends about 70 hours a year on apologies and refunds alone. That is before the customers who quietly buy elsewhere next time.
Why does Shopify's count drift from the shelf?
Shopify splits your stock into states. On hand is everything at a location. It is made up of Committed (units in unfulfilled orders, reserved in draft orders, or in transfers marked ready to ship), Unavailable (set aside as damaged, quality control, safety stock or other) and Available, which is what you can sell. Incoming stock from purchase orders or transfers can't be sold until it is received. Most drift comes from something moving units between those states that nobody noticed.
Refunds and cancellations put units back by default
When you cancel an order, the Restock inventory option is selected by default. When you refund one, Restock items is selected by default too. If the item came back damaged, never came back, or went in the bin, Shopify still adds it back to the count you sell from.
Shipped orders that were never marked fulfilled
When an order is placed, its units are Committed, so they can't be sold twice. On hand includes Committed units, and Shopify's help doesn't say in one sentence when they leave it; in practice they come out when the order is fulfilled, so check how your own store behaves on one order. If your team ships boxes in the morning but marks orders fulfilled in a batch on Friday, or a label tool never marks them at all, On hand includes units that have already left the building. Count the shelf that day and the two numbers won't agree. Correct it then, and it will be wrong again once the backlog is marked.
Selling below zero is switched on
If "Continue selling when out of stock" is on for a variant, Shopify keeps taking orders at zero and below. Shopify's own help is plain about it: "Order routing doesn't prevent overselling."
Locations aren't set up the way you think
Shopify lets you turn off "Use inventory at this location to fulfill online orders" for a location; when it's off, that location's stock is removed from the product's online quantity. A dash in the Available column means the variant is inactive at that location.
Apps, channels and imports write to the same number
In the adjustment history, the Created by column names the staff member, app or sales channel behind each change. Inventory apps, marketplace connectors and warehouse tools can all change quantities. An inventory CSV imported in the Available format overwrites the number with whatever is in the file; Shopify's help says that format "doesn't provide protection against accidental overwrites." Then there is ordinary loss: Shopify's adjustment reasons include damage and theft or loss, and a correction reason for mistakes.
How do you fix it yourself?
Start with five SKUs (stock-keeping units) you know are wrong, not the whole catalog.
- Read the history. Open Products, select the product and the variant, and in the Inventory section click View adjustment history. Read the Created by and Activity columns for each change. The screen shows the last 180 days; older changes are in the Inventory adjustment changes report. If one app or one person appears again and again, you have your lead.
- Clear the fulfillment backlog. List the orders that are still unfulfilled and ask the warehouse which ones have actually shipped. Mark those fulfilled before you count anything.
- Check the overselling setting. On each product or variant, in the Inventory section, see whether Continue selling when out of stock is selected. Leave it on only for items you sell to order or on preorder on purpose.
- Check your locations. Go to Settings > Locations, open each location and check whether "Use inventory at this location to fulfill online orders" is on. Then look for dashes in the Available column on the products you sell online.
- Agree a restock rule. Decide when staff should untick restock on a cancellation or refund: for example, when the item isn't coming back or comes back damaged. Units that return damaged can be recorded as Unavailable, with Damaged as the reason, rather than added back to Available.
- Count with the built-in tool. Stocky, Shopify's old counting app, was delisted on February 2, 2026 and stopped being available on August 31, 2026. Its replacement is in the admin: Products > Inventory > Stock counts > Create count. Each count covers one location, and approving it updates your inventory levels. Approval can't be undone, so check the count first. You can't create a stock count for bundles.
- Correct in bulk with care. For many corrections at once, go to Products > Inventory > Export, choose the All states format, fill in the On hand (new) column and import the file soon after. Shopify skips any row whose inventory changed after your export, which protects orders placed in the meantime. The file can't be larger than 15 MB.
Then watch the same five SKUs for two weeks. If they stay right, widen the check. If they drift again, the history from step 1 will show what moved them.
When does doing it yourself stop working?
These steps work when Shopify is the only place your stock is recorded. They stop working when:
- a warehouse system, marketplace connector or ERP (enterprise resource planning) system also writes quantities, and nobody has decided which system owns the number;
- the drift comes back within weeks of every count;
- you sell from several locations and channels, and the adjustment history is too long to read by hand;
- the cause sits inside a sync you can't see, such as an app that pushes its own idea of "sellable" stock on a schedule.
At that point the job is less about Shopify settings and more about the connection between systems: what each one sends, when, and what happens when two of them disagree.
What are your options?
| Option | Good when | Watch for |
|---|---|---|
| Do it yourself | One location, few apps, and someone with a few spare hours a month | The fix fades if the habit behind it (restocking every refund, fulfilling late) doesn't change |
| Buy an inventory app | You need features Shopify lacks, such as multichannel listing or a warehouse system | One more system writing quantities; decide which one owns the number before you install |
| Hire a freelancer | The cause is known and the fix is a defined change | They fix the setting you describe, which may not be the cause you haven't found yet |
| An outside team that learns how you work and builds on your data | The cause crosses systems and people, and you want it traced, fixed and written down | Needs a few hours of your team's time to show how stock really moves |
What can you hand off, and what should stay with your team?
You can hand off the detective work and the plumbing: reading months of adjustment history across many SKUs, mapping which app or channel writes to which number, fixing the connection that drifts, and setting up a daily comparison between Shopify and your warehouse records so a mismatch shows up in a day rather than at the next count. That is the kind of job Fixes & connections covers: the software you already pay for, connected and corrected in your own account, with notes on what changed and how to undo it.
Keep the physical counts, decisions about damaged and returned stock, which locations sell online, and the rule for when a refund goes back on the shelf. Those are judgment calls about your business, and any fix only holds if your team owns them.
Questions to ask anyone you hire, us included
- Which system will own the stock number when you're done, and what happens when another one disagrees?
- Will you test the change in a copy or development store before it touches live orders?
- How do I undo it if something goes wrong?
- What access do you need, and can it start read-only?
- How will we both know it worked? For example, five SKUs matching the shelf for two weeks in a row.
- What will you write down for whoever looks after this next?
Whoever you talk to, show them one real order on screen rather than describing it. That is how a walk-through works, and it surfaces the habits a written brief misses.
Frequently asked questions
Does Shopify take stock off when an order is paid or when it ships?
When an order is placed, its units are Committed, so they can't be sold twice. On hand includes Committed units and, in practice, they leave it when the order is fulfilled; check this on one test order in your own store.
Is Stocky still available?
No. Shopify delisted Stocky on February 2, 2026, and it stopped being available on August 31, 2026. Counts now happen in Stock counts in the Shopify admin, and in Shopify POS.
Can I undo a stock count?
No. Approving a count can't be undone. If a count was wrong, make a new adjustment and note the reason.
Why does the Available column show a dash?
The variant is inactive at that location, per Shopify's help. Check its location settings.