Selling things you do not have
The pattern is familiar. A customer buys the last three units of something on Shopify at eleven at night. In the morning the warehouse team goes to pick it and there is one on the shelf. Someone writes an apology email, refunds two units, and adjusts the number in Shopify by hand. By the afternoon a different product has the same problem the other way round: plenty in the warehouse, zero on the site, and nobody noticed it had stopped selling.
If your warehouse runs its own system, or a 3PL sends you a stock file, the two numbers are rarely the same for long. The gap is small most of the time, which is why it never gets fixed properly. Then a promotion goes out and the gap becomes a pile of cancelled orders.
The real reason the numbers drift
It is tempting to blame the sync app, or the person who forgot to update a count. Usually the cause sits underneath both.
- Two systems both think they own the stock figure. Shopify decrements on sale, the warehouse decrements on pick, and each overwrites the other on its own schedule.
- Updates travel in batches. A stock file arrives every few hours, so anything sold in between is invisible to the warehouse and anything received is invisible to Shopify.
- Some movements never reach Shopify at all: damaged goods written off, samples taken out, returns put back on the shelf, stock moved between locations.
- SKUs do not match exactly. A trailing space, a variant code the warehouse abbreviates, or a bundle Shopify treats as its own product.
The last one catches people out. A sync can be running perfectly and still skip a product because its code in one system is not quite its code in the other.
What the drift is costing you
Every oversell is a refund, an apology and a customer who is less likely to come back. Every false out-of-stock is a sale you never see, and those are harder to spot because nothing complains.
Then there is the staff time. Someone spends part of each day comparing a spreadsheet export with the warehouse report, and that person becomes the only one who understands why the numbers are wrong. If they are off, nobody checks.
| Symptom | What it usually points to |
|---|---|
| Oversells after a busy evening | Batch sync interval too long for your sales rate |
| Items show zero but are on the shelf | Receipts or returns not flowing back to Shopify |
| One product always wrong | SKU mismatch or a bundle mapped incorrectly |
| Counts right in the morning, wrong by night | Both systems writing to the same figure |
| Marketplace orders oversell too | Shopify is not the only channel drawing on the stock |
How we fix Shopify stock sync
We start by mapping every place stock changes: sales on each channel, picks, receipts, returns, write-offs and transfers. Then we build the sync around that map rather than around whatever the current app happens to support.
- Decide the source of truth. Normally the warehouse system or the 3PL owns physical stock, and Shopify receives an available-to-sell figure from it.
- Clean the SKU mapping. We compare every product in both systems, list the mismatches and fix them at source, then keep a mapping table for anything that genuinely has two codes.
- Sync on events, not on a timer. We use Shopify webhooks for orders and the warehouse or 3PL API for movements, so a change is pushed when it happens. Where the warehouse can only send files, we pick them up as soon as they land.
- Hold a buffer. Fast sellers can show slightly less than is physically there, so a late update does not turn into an oversell. The buffer is a setting you can change per product.
- Run a reconciliation job. On a schedule, the two systems are compared in full and any difference goes into an exception list with the product, both figures and the last movement on each side.
- Give a person the exceptions. Mismatches appear on a simple screen or in a shared channel, with enough detail to decide quickly, instead of being silently overwritten.
If you also sell on Amazon, eBay or in a shop, those channels read from the same available figure, so one physical unit cannot be sold twice.
What changes for the team
Nobody compares spreadsheets any more. The stock figure on the site comes from one place, and when it disagrees with the warehouse, the disagreement is visible with its likely cause next to it.
Promotions become less nerve-racking, because the buffer and the event-based updates cover the busy hours. And when something does go wrong, there is a log of every movement to show what happened, which makes fixing the process much easier than guessing.
Signs this is your problem
- You refund orders because the item was not actually in stock.
- Someone adjusts Shopify stock by hand most days.
- Your warehouse or 3PL sends a stock file rather than updating Shopify directly.
- Returns go back on the shelf but not back on the site.
- You sell the same stock on more than one channel.
If two or more of those are true, the problem is the design of the sync, and it is fixable.