A $50M D2C brand we work with ships from three locations: an in-house warehouse in Texas, an Amazon FBA presence on both coasts, and a 3PL in Pennsylvania for retail wholesale. Every morning, the operations lead opens four browser tabs (Shopify admin, Amazon Seller Central, 3PL portal, the reorder spreadsheet), pulls yesterday's volume from each, and decides where today's orders should ship from. Six days a week, the routing decisions get made manually. Two days a week, the decision gets made wrong and customers get $40 expedited reships at the brand's expense.
This is what multi-warehouse fulfillment actually looks like at $20-100M D2C revenue. Not the textbook version where an OMS algorithmically routes every order. The version where the operations lead's morning routine is the routing algorithm, and the routing breaks whenever she's on vacation.
This is the playbook for fixing it. How routing decisions should actually work, what to automate vs leave to humans, the role of AI as an overlay (not a replacement), and the 90-day rollout pattern that gets multi-warehouse fulfillment running on something other than a spreadsheet.
Why multi-warehouse fulfillment breaks at mid-market
The standard pattern at $20-100M D2C: brands start with one warehouse, add a second when shipping costs to the opposite coast hurt, add a 3PL for retail, then add Amazon FBA for the marketplace. Within 18 months they have 3-4 fulfillment locations and a routing problem nobody designed for.
Five reasons the routing breaks:
- Each location has its own systems. The in-house warehouse runs on the brand's WMS. The 3PL has a portal. Amazon FBA has Seller Central. They don't talk to each other in real time.
- Inventory data is delayed. Stock counts at the 3PL update once daily. Amazon FBA shows "available to ship" but the actual outbound queue is opaque. The brand routes orders based on data that's already 12 hours stale.
- Routing logic lives in someone's head. The operations lead has implicit rules ("expedited orders always from in-house," "California ships from Amazon West"). When she takes PTO, the rules don't follow.
- Carrier rates change weekly. UPS and FedEx adjust rates and surcharges constantly. The "cheapest carrier from each location" answer is different in October than it was in March.
- Exception handling is ad hoc. Out-of-stock at the chosen warehouse, address validation failure, fraud holds. Each exception generates an email chain instead of a workflow.
The fix is not "buy a fulfillment platform that handles this." It's an architecture: real-time stock visibility, codified routing rules, AI on the edge cases, and observability across the entire fulfillment surface.
The four routing decisions every order requires
Every order placed at a multi-warehouse brand needs four decisions made in roughly 30 seconds:
- Where does this ship from? Which warehouse has stock, which is closest to the customer, which has the right carrier mix.
- Which carrier handles it? Standard ground, expedited, or specialty (perishable, oversized, hazmat).
- What does the customer get told? Promised delivery date, tracking, carrier branding.
- What happens if something breaks? Out-of-stock at the chosen warehouse, address issue, fraud flag, customer cancellation request.
At $20-100M brands shipping 1,000-10,000 orders per day, that's 4,000-40,000 micro-decisions daily. Doing them manually doesn't scale. Doing them via static rules in a spreadsheet doesn't handle exceptions. Doing them via AI alone produces hallucinations on real-money decisions. The right architecture is a layered approach.
The layered architecture that works
Three layers of routing logic, in order of precedence.
Layer 1: Hard rules (90% of orders)
The standard cases that should never require AI or human judgment. Pre-codified rules that fire deterministically:
- Customer in CA, NV, AZ, OR, WA → ships from Amazon West or West Coast 3PL
- Customer in TX, OK, AR, LA → ships from in-house Texas warehouse
- Customer in NY, NJ, PA, MA → ships from Pennsylvania 3PL
- Expedited orders → in-house warehouse (control over pick-pack time)
- Wholesale orders → Pennsylvania 3PL (single-pallet handling)
- Subscriptions → Amazon FBA (cost optimization, recurring)
For 90 percent of orders at mid-market, hard rules cover the decision. The OMS executes them automatically with no human or AI involvement.
Layer 2: AI overlay (10% of orders)
The cases where hard rules don't cleanly apply: split shipments, expedited that fall outside the in-house warehouse range, B2B orders with unusual SKU mixes, last-mile carrier failures.
This is where AI earns its place. Given the order, the customer location, real-time stock by warehouse, real-time carrier performance (UPS late to Texas this week, FedEx fine), and the priority signal (gift, repeat customer, VIP), the AI proposes a routing decision and explains why.
Critical constraint: the AI proposes, the system executes if confidence is high, escalates to a human if confidence is low. Every AI routing decision logs to an observability layer so the operations team can audit what happened on any specific order.
Layer 3: Human override (1% of orders)
The cases where neither rules nor AI confidently resolve. The order routes to a queue the operations lead reviews daily. Patterns get analyzed weekly: are the same exceptions repeating? Should they become a Layer 1 rule? Should the AI be retrained on the pattern?
The observability layer here matters more than the AI itself. Without an audit trail showing what each AI decision was based on, exceptions become finger-pointing. With one, exceptions become learning. We covered the broader observability pattern in the OMS guide.
What real-time stock visibility actually requires
Layer 1 and Layer 2 both depend on knowing the real stock count at each warehouse, in real time. This is the single most-skipped technical investment at mid-market.
The pattern that works:
- In-house warehouse: WMS pushes stock movements to the OMS in real time via webhook or every-5-minute sync. Inventory accuracy: 98-99%.
- 3PL: API integration with the 3PL's portal, syncing every 15-30 minutes. Inventory accuracy: 95-98%.
- Amazon FBA: SP-API pull every hour. Lag is the biggest weakness: Amazon's "available to ship" number doesn't perfectly track outbound momentum.
What does not work: daily CSV exports from each location into a spreadsheet. The 12-24 hour lag means routing decisions are based on yesterday's reality.
For brands that can't yet afford WMS API integration with a 3PL, the workaround is to keep a safety buffer (typically 5-10% of stock) at that location and route around stockouts manually. Not ideal, but better than overshipping based on stale data.
Carrier scoring: the layer most brands skip
Multi-warehouse routing without carrier scoring is half a solution. The OMS decides which warehouse, but the warehouse's default carrier may be wrong for that lane this week.
Carrier scoring at mid-market means continuously tracking:
- On-time delivery by carrier × lane × week (UPS to Texas in week 23 might be 88% on-time while FedEx is 96%)
- Damage rate by carrier × lane (some carriers are rougher on certain freight categories)
- Cost per package by carrier × dimensional weight tier × lane
- Customer experience via post-delivery survey or NPS data tagged by carrier
The brands that score carriers find that the "default carrier per warehouse" set-and-forget approach leaves 3-8 percent of fulfillment cost on the table. An AI overlay that overrides the default when the data warrants it recovers that margin without human intervention.
For one supplements brand we work with, carrier scoring + AI overrides on the bottom 10 percent of underperforming lanes cut their per-order shipping cost 6 percent and improved on-time delivery 4 percentage points. The savings paid for the implementation in 90 days.
The 90-day rollout pattern
For a brand currently running multi-warehouse on spreadsheets, this is the pacing that works:
- Weeks 1-2: Audit. Document every routing rule (explicit and implicit), exception path, carrier default, and edge case. Most brands find the implicit rules outnumber the explicit ones 3-to-1.
- Weeks 3-4: Codify Layer 1 hard rules. Push them into the OMS. Run them in parallel with the manual process for a week to validate.
- Weeks 5-6: Real-time stock visibility. Wire WMS, 3PL APIs, and Amazon SP-API into a unified stock view. Validate accuracy against ground truth.
- Weeks 7-8: AI overlay for edge cases. Build the AI router with explainability. Start with low-confidence-required mode (90%+ confidence to auto-execute).
- Weeks 9-10: Carrier scoring. Track on-time, damage, cost, customer experience by carrier × lane. Wire into the AI overlay.
- Weeks 11-13: Embed. Per-team playbooks, daily ops review, weekly carrier review, monthly routing audit.
This follows the SOLVE Framework cadence we apply across every engagement. The broader e-commerce operations architecture is in our e-commerce operations playbook.
What it actually costs at $20-100M
Realistic year-one cost for a brand implementing proper multi-warehouse routing:
- OMS upgrade or extension: $20,000-$80,000 if you need a real OMS, $0 if you already have one (covered in order management systems)
- API integrations (WMS, 3PL, SP-API, carrier APIs): $30,000-$80,000 one-time
- AI overlay build: $40,000-$120,000 one-time + $5,000-$15,000/month operating
- Carrier scoring system: $15,000-$40,000 build + $1,000-$3,000/month operating
- Year-one total: $110,000-$320,000 build + $80,000-$200,000/year operating
For a brand shipping 5,000 orders/day at $50M revenue, the build typically pays back in 6-9 months through reduced expedited reships, lower per-order shipping cost, and the operations lead recovering 10-15 hours per week.
Common failures
- Skipping real-time stock visibility. Routing on yesterday's data ships orders from warehouses that are actually out of stock. Investment in real-time visibility is the prerequisite for everything else.
- AI without observability. The AI makes a routing decision, the customer gets a $40 expedited reship, nobody can tell why. Always log every AI decision with the data it saw.
- No exception handling protocol. Out-of-stock at the chosen warehouse triggers an email chain instead of an automatic re-route. Build the protocol.
- Treating carrier rates as static. They change weekly. Carrier scoring needs to update on the same cadence.
- Operations lead in the middle of every decision. If she goes on vacation and orders pile up, the architecture failed. Codify the rules so they survive her absence.
Frequently asked questions
What is multi-warehouse fulfillment?
Multi-warehouse fulfillment is shipping customer orders from multiple physical locations (in-house warehouses, 3PLs, Amazon FBA) rather than a single facility. At mid-market D2C, most brands end up with 3-4 fulfillment locations within 18-24 months of crossing $20M revenue, requiring intelligent routing logic to decide where each order ships from.
How do you decide which warehouse to ship from?
Three-layer architecture works best at mid-market: hard rules for the standard 90 percent of orders (by zone, by carrier preference, by order type), AI overlay for the 10 percent of edge cases (split shipments, expedited fallbacks, B2B mixes), and human review for the 1 percent that neither rules nor AI confidently resolve.
Do I need AI for multi-warehouse routing?
Not for the standard 90 percent of orders. Hard rules handle those. AI earns its place on the 10 percent of edge cases where multiple data points need to be weighed: real-time stock, carrier performance, customer location, order priority. Building AI without observability is dangerous; always log every AI decision.
What software handles multi-warehouse fulfillment?
The OMS layer (Cin7, Brightpearl, NetSuite SuiteOMS, Microsoft Dynamics 365 Commerce) is the system of record. Real-time stock visibility requires API integration with WMS, 3PLs, and Amazon SP-API. The AI overlay sits on top of the OMS, not in place of it.
How much does multi-warehouse fulfillment automation cost?
Year-one investment for a $50M brand typically runs $110,000-$320,000 (OMS upgrade if needed, API integrations, AI overlay build, carrier scoring system) plus $80,000-$200,000/year ongoing operating cost. Payback typically lands in 6-9 months through reduced expedited reships and operations time savings.
What is carrier scoring?
Carrier scoring is the practice of continuously tracking carrier performance (on-time delivery, damage rate, cost, customer experience) by carrier × lane × week. Multi-warehouse routing without carrier scoring leaves 3-8 percent of fulfillment cost on the table because carrier defaults per warehouse don't reflect real-time performance variance.
Bottom line
Multi-warehouse fulfillment at $20-100M is not a tool problem. It is an architecture problem: real-time stock visibility, codified hard rules for 90 percent of orders, AI overlay for the 10 percent of edge cases, observability across everything. Brands that get this right ship orders from the right location with the right carrier at the right cost without anyone manually deciding. Brands that try to run multi-warehouse on the operations lead's morning routine end up paying for it in expedited reships every time she takes vacation.