Mercur

Inventory Synchronization on a Marketplace: Stock Levels and Overselling

Orders and logistics~17 min
Inventory Synchronization on a Marketplace: Stock Levels and Overselling

Inventory synchronization on a marketplace is the pipeline that carries a stock level from the seller's warehouse to your product page, and because every hop is a queue, the real decision is how stale that number may be and who pays for the gap.

A stock level is a number you do not control and cannot verify without somebody else's consent. If you do not settle how stale it is allowed to be and who pays for the gap, your seller's tool will settle it for you.

This article breaks down:

  • What does the staleness window cost?
  • Which 3 synchronization regimes can you run?
  • How do you size a safety buffer?
  • Which 4 ways out does an oversold order have?

Key insights

  • The staleness window costs cancellations in direct proportion: one hundred offers turning over a unit an hour produce about 110 phantom orders a month on a fifteen-minute window and about 1,730 on a four-hour one, which is €194,400 of commission and three support people.
  • The three synchronization regimes are a file once a day, a periodic pull, and event-driven updates, and the choice is not always yours: the tool on the seller's side sets the cadence, and some accounts type their stock levels in by hand.
  • You size a safety buffer from the window rather than from preference: the buffer is roughly the item's turnover times its seller's staleness window, because a flat buffer is a regressive tax that takes 6,000 slow-moving offers off the storefront and leaves the bestsellers untouched.
  • An oversold order has four ways out, and all of them are paid for by somebody: cancel the line, hold it until stock returns, substitute an equivalent, or source it elsewhere at your own cost.

Why is a marketplace stock level always out of date?

The hops a stock level travels from the seller's warehouse to your page - the seller's tool, the integrator, your API, the index and the cache - each one a queue rather than a wire, with the wrong question "how do we synchronise this" set against the answerable one about the margin of error you are buying

No marketplace has a true stock level. The goods sit in the seller's warehouse, the number describing them is born in their system, and it travels to your page through several hops: the warehouse, the integrator, your API, the search index, the page cache.

Every hop adds delay, and every one is a queue rather than a wire. Even the regime people call real time is a queue with a tail measured in minutes.

That is why "how do we synchronize this" has no good answer. A different question does have one: what margin of error are you buying, and what does it cost you?

A tolerance can be stated in minutes, converted into orders, and given an owner. Perfect synchronization lets you do none of those three things, because it does not exist.

Inventory management has a term for this: available to promise, the availability you are allowed to commit to. It is defined as an answer computed from current stock, deliveries in transit, and commitments already made, rather than as a field in a database.

That is the right frame for a marketplace, because none of those three ingredients is yours.

The scale is not niche. Retail research has put out-of-stock rates in the single digits, and the sales lost to them at a few percent of turnover.

Those figures come from a world where the goods sit in the warehouse of whoever sells them. On your platform, they do not.

What does the staleness window cost in cancellations?

What the staleness window costs in money: 100 offers turning one unit an hour give about 110 phantom orders a month on a fifteen-minute window and about 1,730 on a four-hour one, and the difference of 1,620 cancellations is €194,400 of commission, €1,425,600 of turnover and 405 hours of handling

Do the math once, out in the open, and the conversation about synchronization stops being a technical conversation.

Overselling, meaning selling above the stock level, happens at one moment only: between the stock running out and that news reaching your page. Call that stretch the staleness window.

The number of phantom orders is the product of three things: how many offers run out of stock, how fast they were moving just before zero, and how long the window is.

The example is hypothetical, and it travels. One hundred offers turning over one unit an hour, each running out of stock once a week, which is about 4.33 times a month.

With a fifteen-minute window, every stockout generates 0.25 of a unit sold into thin air, so 100 × 4.33 × 0.25 gives roughly 110 phantom orders a month. With a four-hour window, the same calculation gives 100 × 4.33 × 4, or roughly 1,730.

A window sixteen times longer means sixteen times more cancellations, because the relationship is directly proportional, with no threshold in it.

Now the money. The canonical example of this series: a €1,000 cart, a 12% commission, €880 left for the seller.

In this calculation, the difference between fifteen minutes and four hours is 1,620 extra cancellations a month: €194,400 of commission that never came into being and €1,425,600 of turnover the seller never saw. Then add the handling.

Contacting the buyer and closing a cancellation is realistically a quarter of an hour, so 1,620 cases come to 405 hours, which is more than three full-time people at six effective hours a day.

The line to carry into the committee meeting: shortening our stock update window from four hours to fifteen minutes is worth roughly €190,000 in commission and three support headcount a month in our model. That is a conversation about money rather than about integration.

Which 3 synchronization regimes can you run?

You choose a regime once, and you pay for it every month. Below is the same example of one hundred offers, run through the three ways a stock level reaches you.

What does each synchronization regime cost?

Event driven (push)

Polling

Batch file

Typical staleness window (minutes)

1

15

240

Phantom orders in this example (units per month)

7

110

1,730

Commission that never happens (€ per month, at €120 an order)

840

13,200

207,600

Support work on cancellations (hours per month, 15 min a case)

2

27

433

Safety stock that closes the window (units on an offer turning 1 unit an hour)

1

1

4

Who has to deliver it

the seller and their tool

the integrator

the seller by hand or by file

Main risk

the event channel dies quietly

the delay grows with the number of offers

an offer missing from the file keeps its old stock level

A file once a day gives more than ten thousand orders; you have nothing to fulfill. That does not make the daily file bad.

It makes it the regime for a catalog that does not turn over. A few thousand items selling one unit a quarter need nothing faster.

Two things this table hides. First, half the time you are not the one setting the cadence.

The tool on the seller's side does, with its own default and its own request limits (the seller panel). Second, some sellers run no regime at all and type their stock levels in by hand.

Practitioners describe that as widespread and permanent rather than as a temporary rollout pathology. An account like that has a window measured in days, and it is that account rather than the average that produces the cancellations.

How do you size a safety buffer?

Why a flat safety buffer is a regressive tax: in a catalog of 20,000 offers where 30% hold no more than two units, a two-unit buffer takes 6,000 offers off the storefront, while a buffer derived from turnover times the seller's window gives one unit at fifteen minutes and 24 units for a seller typing stock in once a day

A safety buffer is the price you pay for the delay, and the only tool that works immediately. The mechanics are simple: you subtract a fixed number from the stock level the seller declares.

A buffer of 5 units means an offer with seven units shows two, and an offer with three shows zero and drops off the storefront.

And here is the first cost nobody counts. A flat buffer is a regressive tax: it leaves the bestsellers alone and wipes out the long tail.

In a catalog of 20,000 offers where 30% of items hold no more than two units, a two-unit buffer takes 6,000 offers off the storefront, and you cannot see it in any sales report, because an offer that vanished generates no event.

Inventory theory says the same thing from the cost side: the higher the service level you want to guarantee, the bigger the buffer, and buffers cost money. The difference in a marketplace is that the seller carries the cost, because the goods are theirs, while you make the decision.

You are setting aside stock they are not allowed to sell. That is why the buffer has to be a derived number rather than a preference: buffer ≈ the item's turnover × the staleness window of its seller.

An offer moving one unit an hour needs four units on a four-hour window and one unit on a fifteen-minute one. A single buffer for everybody is too large for most of the catalog and too small for that one account updating stock once a day.

When should a marketplace reserve stock?

Three reservation variants - none, from checkout entry, and from add to cart - with what each costs, and the limit nobody states: a reservation and a buffer protect you only against your own traffic, never against the same unit selling in the seller's own store

1. No reservation at all

You check the stock level at checkout entry and again when the order is placed.

It costs zero, and you pay within the window between those two checks. This is the default behavior in the solutions we know.

2. Reservation from checkout entry

You lock a unit for the length of the payment, usually ten to twenty minutes.

The cost is small and countable: the frozen units are the rate of entry into checkout multiplied by the length of the lock.

3. Reservation from add to cart

It is tempting, because it removes the disappointment, and it is the variant where the arithmetic surprises people.

An offer holds 10 units and sells one an hour. If every order comes with five carts that never reach payment, and a reservation lives for an hour, then five units are locked at any moment: half the stock on that offer is invisible to the buyers who genuinely want to buy it.

Without an expiry on the reservation, this variant eats the catalog in a week.

And now the most important warning here, the one said least often. A reservation and a buffer protect you only against your own traffic.

In that same minute, the same unit sits in the seller's own store and on three other platforms, and your reservation does not reach there and never will. A lock on your side cuts the risk that you sell the unit twice on your own platform.

It does nothing at all to the risk that somebody else sold it fifteen minutes ago. Anyone who promises otherwise is selling you a certainty nobody on the market has.

What the buyer sees of this between the cart and the payment is described in a cart with several sellers.

How do you compute availability across several warehouses?

Availability as a computed number rather than a field: one seller with 40, 0 and 15 units across three locations gives either an offer that drops off the storefront or a count of 40 that loses 15, against the available-to-promise formula of locations minus reservations minus buffer, filtered by what ships by the promised date

The question is whether availability is a field the seller types into or a number you compute. As long as it is a field, you inherit every error from their side, and you have nowhere to put your own rules.

A seller with three locations holds 40, 0, and 15 units. Suppose the integration maps a single location, which is the default setting in the solutions we know.

With the middle warehouse connected, the offer drops off the storefront even though the seller has 55 units. With the first one connected, you show 40 and lose 15.

Neither number is a lie, and neither one is the truth.

A plain sum is not the answer either, because locations differ in shipping time and in the area they serve. Computed availability is the sum of the locations minus reservations, minus the buffer, filtered by where you can ship from within the promised date.

The promise of the date itself is carried by the delivery date you promise. The difference between one field and a model has to be negotiated before you sign the contract, because adding it later means rewriting the purchase path.

Which 4 ways out does an oversold order have?

Each costs in a different currency. The seller should not be the one choosing, because they will choose whichever is cheapest for them.

1. Canceling the whole order

The cleanest in the books and the most expensive in trust: €120 of commission that never came into being, a quarter of an hour of work, and a buyer who waited for nothing.

The money is often already held, so you trigger a refund. who pays for a refund carries the mechanics and the commission on a refunded order the commission on a refund.

A cancellation also counts against the seller's metrics, but it is only fair when you can tell their empty warehouse apart from your own slow data channel (seller quality thresholds). In some solutions, rejecting a line zeroes the stock level on that offer automatically.

The seller's decision itself and the deadlines on it are carried by a seller accepting or rejecting an order.

2. Partial fulfillment

An order for 5 units, a shipment of 3.

The buyer gets goods, you lose 40% of the line value and gain a second set of amounts: a partial refund, a corrected document, a mismatch between the panel and accounting.

3. Swapping in a different offer

It looks like a courtesy.

It is a change of the party to the contract, and usually of the price. This is the same trap: the buyer calls it an error rather than a rescue.

4. Waiting for stock to come back

The cheapest in money and the most expensive in promises, because you are moving a date you do not control.

It only makes sense with a specific date and an explicit right for the buyer to walk away. What you have to tell them is carried by who delivers the buyer's rights.

What does stock synchronization change about the rest of your build?

The staleness window belongs in the contract with the seller rather than in a paragraph of documentation. If you require an update every fifteen minutes, that is a commercial requirement with a consequence rather than a recommendation.

1. The buffer and the reservation are tools aimed at the same problem, and they stack

Set independently by two teams, they hand you a narrower catalog than anybody intended.

2. Availability is sometimes a criterion for picking the winning offer

The decision belongs elsewhere: the rule that picks the winning offer carries that one. Separately: an item with no sales for months is not a synchronization problem, but a catalog lifecycle problem (retiring what does not sell), and a catalog rule will not repair a stock level (catalog rules).

3. A cancellation for lack of goods costs you three times over

The three costs are the lost commission, the support work, and the seller's metric. That is why this cancellation belongs in the financial plan as well as in the integration backlog.

How do you check stock synchronization with a vendor?

  1. Which route does a stock level arrive by: an event, polling, or a file? Show me the timestamp of the last update on an offer.
  2. Can I see the staleness window per seller? Show me the median and the tail. Without the tail, you do not know who produces the cancellations.
  3. Can safety stock be set per seller and per category, or is it one number for the whole catalog?
  4. What happens to an offer that is missing from the next file? Does it keep the old stock level, or is it zeroed? That is the quietest oversell there is, and the question skipped most often.
  5. At which moment is a reservation created, how long does it live, and what releases it?
  6. Is the stock level one field, or a sum of locations with rules on top?
  7. Can we ship 3 out of 5 without canceling the whole order, and what happens then to the money and to the documents?

Which mistakes do operators make about stock levels?

1. Treating synchronization as a technical topic

Nobody sets the tolerance, so the default configuration of somebody else's tool does. You learn what it is from the number of cancellations.

2. One buffer for the whole catalog

Too large for the bestsellers, too small for the slow sellers, and its cost is invisible, because an offer that vanished leaves no trace.

3. A reservation from add to cart with no expiry

You freeze stock with abandoned carts and manufacture your own stockouts.

4. An offer that dropped out of the file lives on with its old stock level

You are selling goods the seller has already forgotten about. Nobody detects it until someone buys.

5. No timestamp on the stock level

Without an answer to "when did this number arrive", an argument about a cancellation is one person's word against another's, and you cannot tell a worse seller apart from a slower channel.

What do you still have to settle about your own stock pipeline?

This article does not describe what the buyer sees between the cart and the payment or how a seller accepts or rejects an order, and within what time. Nor does it settle whether availability should decide which offer is the default one.

This article does not explain the buyer's rights on a cancellation or the duties to inform.

The movement of money on a cancellation and on a refund is carried by who pays for a refund and the commission on a refunded order.

All the numbers above are openly hypothetical. The arithmetic travels, the values do not: substitute your own turnover, your own count of stockouts and your own window.

And one number you will not read out of any documentation: the distribution of the staleness window across your sellers. A median of fifteen minutes with a ninetieth percentile of eight hours is a different platform from a median of one hour with a percentile of an hour and a half.

Nobody except you knows that number, and without it every decision in this article is a bet.

Summary: How stale may a stock level be?

As stale as you can afford, and the figure is calculable rather than philosophical. The goods sit in somebody else's warehouse, the number describing them is born in somebody else's system, and every hop on the way to your page is a queue, so the honest question is what margin of error you are buying.

Converted into orders, that margin has a price: the difference between a fifteen-minute window and a four-hour one is sixteen times the cancellations, and in the worked example it is €190,000 of commission and three support headcount a month. The buffer that papers over the gap is somebody else's stock you are refusing to sell, which is why it belongs on a formula rather than on a single number for the whole catalog.

Ask a vendor how often each integration pushes stock in practice, and what the buyer sees the moment a unit runs out mid-checkout. Building a marketplace where the staleness window is a number with an owner rather than a property of somebody else's tool?

Talk to us about the build.

Frequently asked questions on inventory synchronization

What is inventory synchronization on a marketplace?

Inventory synchronization on a marketplace is the pipeline that moves a stock level from the seller's warehouse to your product page. It passes through the warehouse system, the integrator, your API, the search index, and the page cache, and every one of those is a queue, which is why even a real-time regime has a tail measured in minutes.

How do you prevent overselling on a marketplace?

Preventing overselling means shortening the window or buying coverage for it, and usually both. A shorter update cadence cuts phantom orders in direct proportion; a safety buffer sized to turnover times the window covers what is left.

Reservation at checkout closes the last gap, between the price check and the order.

How big should a safety buffer be?

A safety buffer should be roughly the item's turnover multiplied by its seller's staleness window. An offer moving one unit an hour needs four units on a four-hour window and one on a fifteen-minute one.

A flat buffer across the catalog is too big for most of it and too small for the account that updates stock once a day.

Ready to build?

We build marketplaces where the staleness window is a number with an owner, and the safety buffer is derived from it rather than typed in once.