IEMSuite

How to Stop Overselling on Shopify

September 22, 2026 6 min readBy the IEMSuite team

Every guide on this gives the same two answers: sync faster, and hold a safety buffer. Both are reasonable and neither addresses the version of the problem a manufacturer has.

Overselling has three separate causes that get discussed as one. Only the first is about sync speed.

Cause one: the number is stale

The classic. Stock moved and the channel has not heard yet, so it keeps selling from an old figure. Scheduled syncs leave a window; real-time updates narrow it.

This is the cause the whole app category exists to fix, and if you sell the same stock across several channels it is probably your main one. It is also the only one a buffer genuinely helps with.

Cause two: two orders, one unit

Two customers check out a second apart. Both requests read the same remaining quantity, both see one available, both succeed. No sync was late. The count was correct when each of them read it.

The fix is not speed, it is serialisation: the second request has to be made to wait and then fail, rather than allowed to proceed on a figure that was true a moment ago. In IEMSuite allocation runs inside a database transaction with a row-level lock on the source lot, so the loser of that race rolls back instead of creating an oversell.

Cause three: the stock is there and should not be sold

This is the manufacturer's version, and no sync app can see it, because from outside the stock looks fine.

A pallet arrived this morning and is waiting on incoming inspection. A lot is on hold while a customer complaint is investigated. A batch is past its expiry date. Forty kilos of sugar is on the floor, but it is raw material and the channel is selling jars.

In every one of those cases the quantity on hand is real and the sellable quantity is lower. If what gets published to Shopify is on hand, you will oversell stock you genuinely own, and no amount of sync frequency changes that, because the number being synced is the wrong number.

Why the buffer is a confession

A safety buffer holds back a few units of everything so the inevitable error lands inside the margin. It works, in the sense that a thing that does not get sold cannot be oversold.

What it costs is the sales inside the buffer, on every product, forever, plus the stockouts it manufactures during a launch when the last three units were the ones you needed. It is a sensible stopgap and a poor destination, and the tell that you need one is that you cannot say which of your stock is sellable.

Fix the definition and the buffer shrinks on its own.

What to actually do

Publish available, not on hand. Whatever you connect to the channel, make sure the quantity it sends excludes stock awaiting inspection, stock on hold and expired lots, rather than everything physically present.

Make the quality gate structural rather than procedural. If inspection status is a note somebody checks, it will be missed on the day it mattered; if it is a state the allocation engine refuses, it cannot be. Holding and releasing stock covers what that block does, and quality control covers why the gate sits inside allocation.

Check how your sync handles a race, not just a delay. Ask what happens to the second of two simultaneous orders for the last unit, because a real-time sync with no locking is fast and still wrong.

Then test it the boring way. Pick a few SKUs, place an order on each channel, and confirm what happens to the count everywhere. How Shopify inventory sync works sets out which direction each update travels.

Questions people ask

Why does Shopify oversell even with an inventory app connected?

Three different causes get treated as one. The count can be stale, which is a sync problem. Two orders can arrive for the same last unit, which is a concurrency problem. Or the stock can genuinely exist and not be sellable, which is neither, and is the common case for a manufacturer with stock awaiting inspection or on hold.

Do safety buffers fix overselling?

They reduce it by refusing to sell things you own. A buffer is a bet that your number is wrong by less than the buffer, and it costs you the sales inside it on every product, permanently. Useful as a stopgap, expensive as a strategy, and it does nothing about stock that is present but not releasable.

What is the difference between on hand and available?

On hand is what is in the building. Available is what can actually be sold right now, which excludes stock awaiting quality inspection, stock on hold, expired lots, and raw material that is not finished goods at all. Publishing on hand to a sales channel is the most common structural cause of overselling for manufacturers.

Can two orders take the same last unit?

Only if nothing stops them. Two checkouts a second apart can both read the same figure and both succeed unless the allocation is serialised. In IEMSuite allocation runs inside a database transaction with a row-level lock on the lot, so the second one fails the guard and rolls back rather than creating an oversell.

See it in a real system

IEMSuite is lot-tracked MRP for small manufacturers. Free during Early Access.

Start free