Ecommerce

How to Stop Ecommerce Overselling: Two-Stage Stock-Reservation + Real-Time Sync

GoWarehouse Editorial Team · Published2026/05/06 · 7 min read

Overselling is the single biggest pain in multi-channel ecommerce. This guide unpacks GoWarehouse's two-stage stock-reservation design (channel × product dimensions) and compares auto-sync vs manual sync. The key point: manual sync is how you sidestep API rate limits and race conditions — and stay stable through 11.11 spikes.

Why Sellers Oversell: Four Structural Causes

Overselling isn't bad luck — it's the predictable result of a system that wasn't designed for multi-channel sync. When you sell across Shopee, Momo, Shopify, and your own site simultaneously, oversells leak in from four places:

  • Channels manage stock in isolation — Shopee's backoffice shows 10 units left, but Momo has already sold 8 and never told Shopee.
  • API sync latency — Cross-channel stock pushes lag anywhere from 30 seconds to 5 minutes. Orders keep arriving during that window.
  • Race conditions — Multiple channels place orders simultaneously, before the system can deduct stock. By the time anything updates, both orders are already confirmed.
  • Manual reconciliation gaps — Staff dumping each channel's orders into Excel daily means there is always a time lag.

The Real Cost of an Oversell: Refunds Are Just the Tip

A single oversell costs far more than the refund itself. Broken down:

Cost itemPer incidentMonthly accumulation
Refund processing feeNT$ 30–100NT$ 3,000–15,000 / month
Customer-service time15–30 minutes per case5–20 hours of labor / month
Channel rating penaltyShopee / Momo score dropsLower search rank, lost traffic
Lost customer lifetime valueCustomer never repurchasesEach lost customer = NT$ 3,000–10,000 LTV
Wasted ad spendAcquired orders get refundedROAS distorted

Run the math: 50 oversell incidents in a month = roughly NT$ 50,000–100,000 of hidden cost. That dwarfs the monthly fee for a WMS.

The Two-Stage Stock-Reservation Solution (GoWarehouse's Approach)

GoWarehouse's core anti-oversell logic is "pre-allocate, then deduct in real-time" — a two-stage defense. Instead of letting channels fight for stock as orders pour in, you pre-allocate sellable stock to each channel up front, and each channel can only sell within its quota.

Stage 1: Channel-Level Allocation

A single backoffice screen, where you set what percentage of total stock each channel gets:

ChannelAllocationSellable ceiling
Shopee40%Total stock × 40%
Momo30%Total stock × 30%
Shopify (own site)20%Total stock × 20%
Reserved (distribution / in-person)10%Not open to online sales

When Shopee's quota runs out, Shopee auto-delists the item — but Momo still has its 30% to sell, untouched. Overselling is physically impossible.

Stage 2: Product-Level Fine-Tuning

Some hot SKUs need a different allocation strategy. For example:

  • Hot product A — You know Shopee drives the most traffic, so override to "Shopee 80% / Momo 15% / Shopify 5%".
  • Long-tail product B — Sells anywhere; override to "50% on each of three channels" (sum = 150% is fine — see next section).
  • Clearance product C — Limit to one channel: "Shopee 100% / others 0%".

Product-level settings override the channel-level defaults, giving you per-SKU precision.

Flexible Design: Allocations Don't Have to Sum to 100%

This is the biggest difference between GoWarehouse and competitors — allocation percentages don't have to add up to 100%.

  • Sum = 100% — Traditional strict allocation (Shopee 40 + Momo 30 + own site 30 = 100); channels are mutually exclusive.
  • Sum > 100% (e.g., 100% on all three channels) — "Single-pool" sharing mode. All three channels see full stock as sellable, but GoWarehouse uses pessimistic locking internally to deduct in real-time. Whichever order lands first wins the stock; the other channels are immediately set to 0.
  • Sum < 100% (e.g., 30% each across three channels = 90%) — Reserve the remaining 10% for distribution, in-person sales, or peak-season buffer. That 10% is never touched by online orders.

Why does this flexibility matter? Different business models have totally different needs. A 3C brand may want strict allocation (sum = 100%). Fast fashion may want single-pool sharing (sum = 300%). A brand with a distribution channel may need reserved stock (sum = 90%). GoWarehouse doesn't force one logic on you.

Two Trigger Modes for Real-Time Stock Sync

Once allocations are set, the next question is: when stock changes, how do we push it to the channels? GoWarehouse offers two trigger modes:

Mode 1: Auto-Sync — Push on Receiving (System Default)

  • Trigger — When stock increases (receiving completed, return-to-stock, finished kitting), the system auto-pushes the new sellable quantity to each channel.
  • Why only push increases, not decreases — Decreases (shipments) are handled by each channel's own order mechanism; double-deducting would cause errors.
  • Best for — Steady daily receiving volume, no need for precise channel-sync timing.

Mode 2: Manual Sync — One-Click Button (Top Pick for Peak Season ⭐)

There's a "Real-Time Stock Sync" button in the backoffice — press it once and all changed stock is pushed to the corresponding channels. The benefits of manual mode map directly to the three structural risks of auto-sync:

RiskAuto-syncManual sync
API rate limitPushes on every receiving event; peak season can trigger many pushes in a short window, hitting the channel's API rate limit and failing all subsequent syncsBatches multiple changes into a single push, lowering API call frequency and avoiding rate limits
Race conditionHigh-frequency sync + simultaneous order spikes mean push order may not match deduction order, causing brief stock mismatchesSync during low-traffic windows (after shipping, end of day), avoiding the race-condition window
Sync timing controlSystem decides — not controllableYou decide: "after shipping wraps", "before the morning open", "before close" — aligned to your operational rhythm

Recommended manual sync timing:

  • Sync after shipping — After the 4–5pm shipping peak ends, push the day's actual remaining sellable stock to all channels in one shot → by next morning the numbers on every channel are accurate.
  • Sync before shipping — Run one sync before opening the warehouse in the morning to reconcile last night's orders with today's stock.
  • Sync before close — Prevents overnight order spikes from creating chaos by morning.
  • Sync before peak events — One hour before 11.11 goes live, before lunch, before the 8pm livestream — aligned to your traffic curve.

The key mental model: "Real-time" sync isn't better the more often it runs. In multi-channel ecommerce, letting you decide when to sync is more stable than the system hammering the API on autopilot — because you understand your own traffic curve best.

Pairing With GoWarehouse's Full Stack

Two-stage stock-reservation plus manual sync are the two core defenses. GoWarehouse's full anti-oversell stack also includes:

  • Safety stock thresholds — Set per-product safety stock (e.g., lock from shipping when below 5 units) so the last few units aren't fought over across channels.
  • Four real-time alerts — Below threshold / abnormal turnover / slow-moving detection / nearing expiry — instant notifications.
  • Pessimistic locking — Stock is locked the instant an order is confirmed, preventing concurrent orders from deducting the same unit.
  • Two-person QC check — Barcode scan match before shipping — that's how the 0.01% shipping error rate is achieved.

Frequently Asked Questions

QIsn't manual sync slower than auto?

A"Fast" and "accurate" are not the same thing. Auto-sync is fast but easily hits rate-limit failures; manual sync is slower but accurate. In multi-channel ecommerce, accurate usually beats fast — better to sync 5 times and have all succeed than sync 100 times and have 30 fail.

QWhat is an API rate limit and what does it affect?

AA rate limit is a cap on API calls per time window set by the channel platform — e.g., Shopee may limit you to 60 calls per minute. Once you exceed it, calls are rejected until the next window. Most likely to hit during peak season with high-frequency auto-sync.

QCan I schedule auto-sync a few times a day?

AYes. GoWarehouse supports scheduled sync — set it to run automatically at 9:00 / 12:00 / 18:00 daily, combining the control of manual mode with the safety net of "you won't forget".

QCan I adjust allocation percentages dynamically?

AYes. Drag the slider in the backoffice, and the change takes effect on the next sync. Right before 11.11, push Shopee to 70% and drop Momo to 20% in one click — no problem.

QAn oversell already happened — what now?

AFirst, "intercept" the offending order in the GoWarehouse backoffice (the system has 8 built-in interception reasons) to prevent the wrong shipment. Then have customer service proactively contact the customer to explain, refund, or backorder. The system logs the root cause of each oversell event so you can refine allocations afterward.

Ready to digitize your warehouse?

7-day free trial · No credit card · No extra hardware · From US$ 8/day