Inventory & Channel Sync

How do I manage inventory across Shopify Plus, my 3PL, and FBA without overselling?

Keeping Shopify, your 3PL, and FBA counts aligned so you stop selling units you cannot ship.

Last updated September 16, 2026

Three buildings, three clocks. Shopify is the storefront. The 3PL is the floor, often a file. FBA is Amazon's ledger from yesterday. Available-to-sell (ATS) is on-hand minus reserved, minus quarantine and returns QC, plus inbound only if you truly sell pre-orders. Published Shopify qty is ATS after a buffer. On-hand is not either number.

Same SKU, three sites. New Jersey own warehouse: 120 on-hand, 8 reserved, 6 in returns QC. California 3PL: 90 on this morning's count file, 4 sitting in staging. FBA: 70 on Amazon's ledger, 18 of them Reserved, 7 in-transit between Amazon warehouses. Honest ATS is 106 in New Jersey (120 minus 8 minus 6), 86 in California if staging is outside the primary sellable zone, and 45 at FBA (70 minus 18 minus 7). Publish those three and you are still one channel buffer short of safe. Publish the FBA 70 as-is and Shopify will sell 25 units Amazon will not ship.

Map each site as a Shopify location

Map every warehouse as a Shopify location. Unmapped sites show as false stockouts. Shopify then chooses which mapped location fulfills the order. You only feed it honest qty per site. Only the primary sellable zone at each site should publish. Staging, samples, and quarantine stay out. If quarantined lots stay visible on the variant, counts look right and you can still oversell.

Move stock with transfer orders, not spreadsheet adjustments. In-transit is in neither warehouse until it is received. Do not add it to ATS unless you chose a pre-order rule.

The clocks create the oversell

The clocks are the oversell. Some 3PLs only update you when a count file lands, not live. That file is the floor at close of their day, or 15 to 60 minutes behind the last pick. FBA imports about once a day. Ending warehouse balance and in-transit-between-Amazon-warehouses can land as on-hand. A connector that writes the channel back into the warehouse will put yesterday's Amazon Reserved, or this morning's already-picked 3PL units, back on the product page.

Hold a channel buffer

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. A fixed buffer does not shrink, which is why teams use it near a sellout. Item-level buffers override channel defaults. If Shopify already holds stock back, do not buffer twice. Turn off continue-selling-when-out-of-stock unless you mean pre-orders.

Why pooled buffers drain a site

A pooled buffer across warehouses can drain New Jersey to zero while California is fat, then route the next order into the empty one. Splitting an order across nodes is normal. Splitting one line between own stock and dropship usually is not.

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 a warehouse, a 3PL, and FBA.
Here is a CSV: sku, location, location_type (own/3pl/fba), on_hand, reserved, in_transit_in, quarantined, staging, fba_reserved, fba_in_transit_amazon, zone (primary/other), 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. Rows that should not be published (quarantine, staging, Amazon Reserved, Amazon in-transit, non-sellable zones).
4. The composed publish qty if New Jersey, California, and FBA are all mapped Shopify locations.
Flag anything that would oversell if we published on-hand or the FBA ledger as-is.

See it run on
your data.

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