Inventory & Channel Sync

How to manage inventory across multiple warehouses without overselling

How to publish accurate available-to-sell for each warehouse so your channels stop overselling.

Last updated September 16, 2026

On-hand is not available to sell. Once stock lives in more than one warehouse, available-to-sell is a decision per channel: on-hand minus reserved, plus inbound only if you truly sell pre-orders, or do not publish the SKU at all for a drop you cannot afford to race.

Hold a buffer on the channel

Overselling is usually latency plus a wrong number, not missing API calls. The channel decrements, the system of record still holds the old quantity, and the next export writes stock back up. Hold a buffer on the channel so warehouse counts stay honest.

A percentage scales with the pile and still holds at least one unit when you are almost out. 500 on hand at 10 percent publishes 450. 10 on hand publishes 9. A fixed buffer of 5 publishes 495, then 5. The fixed number does not shrink, which is why teams use it near sellout. Item-level buffers override channel defaults. If the storefront already holds stock back, do not buffer twice.

Map warehouses and sellable zones

Map every warehouse as a location on the channel. Unmapped sites show as false stockouts. Only the primary sellable zone should publish. Staging, returns, samples, and quarantine should stay out of available-to-sell. If quarantined lots stay visible on the variant, counts look right and you can still oversell.

Move stock with transfer orders

Move stock with transfer orders, not spreadsheet adjustments. In-transit is not in either warehouse until it is received. Sell it only if you chose an availability rule that includes inbound. Cycle-count the 3PL; some 3PLs only update you when a count file lands. FBA ledgers are often a day old. Amazon Reserved can land as on-hand. If the ledger shows 100 and 40 of those are Reserved, publishing 100 to Shopify will oversell the 40.

Why pooled buffers drain one site

A pooled buffer across warehouses can drain one site to zero while another still has stock. East has 20, West has 80. A 10 percent buffer on the combined 100 holds back 10 and publishes 90. Orders can still route to East until those 20 ship. East is then empty, West still has 80, and the next East-preferred order sits. Safety stock per warehouse is what people want and often do not have. Splitting an order across warehouses is normal. Splitting one line between own stock and dropship usually is not.

For an unattended drop: reserve units, set a buffer, or stop exporting that SKU. None of that is a guarantee. Reconstruct the ledger for the SKU and timestamp before you call it an oversell.

Run this with AI

Connect Claude or ChatGPT to your Fulfil data with the Fulfil MCP, then run this prompt on your own numbers.

You are an ops lead for a DTC brand with stock in multiple warehouses, a 3PL, and FBA.
Here is a CSV with columns: sku, location, on_hand, reserved, in_transit_in, in_transit_out, quarantined, amazon_reserved, channel, current_published_qty.
[paste]

Produce:
1. Available-to-sell per sku per location, with a recommended channel buffer (percent vs fixed) and why.
2. Locations that would hit zero first if a pooled buffer is applied to the combined total.
3. Transfer recommendations so no site is left unable to fulfill while another is fat.
4. Rows that should not be published (quarantine, Amazon Reserved, non-sellable zones, flash SKUs).
Flag anything that would oversell if we published on-hand as-is.

See it run on
your data.

Fulfil runs inventory, fulfillment, purchasing, and accounting for scaling DTC brands in one system.