3PL & Fulfillment

How do I add a second 3PL warehouse and route Shopify orders without split-shipment chaos?

Adding a second 3PL and routing Shopify orders to the right one without split-shipment mess.

Last updated September 16, 2026

A second node is a second location, not a second set of books. Map it as its own Shopify location. Publish only the primary sellable zone from each. Route on purpose. The default that "uses whoever has stock" is how one order becomes two cartons, two trackings, and a doubled pick fee.

Age each 3PL file before routing

Each 3PL's on-hand is a file, not a live pick face. Some only send a count at close of their day. Do not treat either portal as a second ledger, and do not route tonight's orders off a file you have not aged. Reconstruct by SKU and timestamp before you call a split an oversell. Stock often existed at order time, just not at the node the map chose. A Tuesday file can be Monday's close. A stale East file plus a fresh West file will send the order West, then bounce it when East's next file lands. That is latency, not a stockout.

Set a default warehouse and fallback

Set a default warehouse per channel. Then add a fallback. Next-available-warehouse should move the order only when one site can take every line. If neither site has the full order, leave it on the default and transfer or wait. That is how you avoid a split. Per-line overflow (East cannot fill this SKU, so send that line West) is a split by design: two parcels, two dates, two customer emails. Allow it on DTC if the customer will tolerate it. Do not allow it on wholesale unless the routing guide says a retail PO may ship from two DCs. Retail almost never does. A retail 850 wants one 856 from one building.

Route by zip or market

East plus West is a zip or market rule, not a stock rule. Create a Shopify location per region, map it to the matching 3PL, and let the channel pick the node. A pooled buffer across both sites can drain one to zero while the other is fat, then park the next order in the empty building. Buffer per published location, not against the combined pile. Available-to-sell is per location. Adding the two files together and publishing the sum is how you sell the same unit twice. Channel-to-location mapping is the silent router. A closed or test 3PL left on the map keeps getting orders. So does a second node you published before its first goods-received-complete.

Move stock on transfer orders

Move stock between nodes on transfer orders. In-transit is in neither 3PL until received. Do not publish in-transit. Value each location; a West receipt at a different landed cost should not silently reprice East. If both locations still publish the same units (old file, new file, and the truck), you double-published. That is leftover cutover, not a routing rule.

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 the ops lead adding a second 3PL (East / West or overflow) on Shopify Plus.
Here is: order_id, channel, sku, qty, warehouse_assigned, east_on_hand, west_on_hand, zip_or_market, split_allowed (yes/no), shopify_location_map.
[paste]

Produce:
1. Orders that would split today, and whether that channel should allow it.
2. A default warehouse plus next-available rule that moves only when one site can take every line.
3. Stale maps (closed or test 3PL still on the channel).
4. Transfers to rebalance so one node is not left at zero.
Do not treat either 3PL portal as the books. Flag in-transit that is being published.

See it run on
your data.

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