Blog ·
I sold a unit I did not have: the two causes of an oversell and the five-minute window between them
An oversell is almost always one of two things: a reservation released late because a cancellation on the marketplace was polled after the stock sweep, or stock received after the last push. Both correct themselves on the next sweep; the cost is the order in between.
What an oversell is
Two channels each believed they could sell the last unit, and both did. The result is an order you cannot fulfil, a cancellation on your record, and on some marketplaces a penalty against your account metrics. It is not a stock-counting problem; your warehouse count was right. It is a timing problem between the moment stock changed and the moment every channel heard about it.
Cause one: the late release
A buyer cancels on the marketplace. The marketplace knows at once; your system learns at the next poll, up to five minutes later. If the stock sweep that pushes available quantity to every channel ran in between, the cancelled order's unit was still reserved during the sweep, and the channels were told one fewer than you had. That direction is safe: it undersells. The unsafe direction is the mirror: an order placed on channel A is polled after the sweep that already told channel B the unit was free.
Cause two: the late receipt
Stock received into a location after the last push is not yet on any channel. That is harmless on its own. It becomes an oversell when a correction is made by hand on one channel's console ("I know we have ten more") that the system does not know about, so the next sweep pushes the old, lower figure to the others while the first channel sells against the hand-typed higher one.
Why available, not on hand
- Channels receive available stock: on hand minus what is reserved for open orders, never the raw on-hand figure. On hand is what the warehouse has; available is what can still be promised.
- Downward corrections are pushed first, because an oversell costs more than a missed sale.
- A reservation is taken on import, before the sweep, so the window is the poll interval, not the sweep interval.
- Never correct stock on a marketplace's own console. Correct it in the one place the sweep reads from, and let the sweep tell every channel.
When it happens anyway
The product says which of the two causes it was, from the timestamps of the order, the poll and the sweep. The order can be cancelled with the marketplace's own reason, or fulfilled from another location if one has the unit. The next sweep already corrected the figure; nothing needs re-typing.