WooCommerce Order Routing with NetSuite — Multi-Warehouse Logic That Works
- Multi-warehouse order routing means deciding which physical location fulfils each order at the moment the order is placed — then writing that decision to both WooCommerce and NetSuite correctly.
- The routing decision must happen before the NetSuite Fulfillment Request is created — changing location after the fact creates inventory discrepancy between systems.
- Three routing strategies: nearest warehouse (distance), availability-first (highest stock), and priority-list (fixed preference per location type).
- NetSuite’s Inventory Detail record is what locks a specific lot or serial number to a fulfillment — required for serialised inventory routing.
Multi-warehouse routing is one of the most operationally impactful capabilities a NetSuite + WooCommerce integration can provide — and one of the most common sources of inventory discrepancy when implemented incorrectly. The key architectural rule: the routing decision is made once, at order placement, and written atomically to NetSuite. Any system that allows the routing decision to be changed after the Fulfillment Request is created will accumulate inventory errors.
The Three Routing Strategies
| Strategy | How it works | Best for | NetSuite complexity |
|---|---|---|---|
| Nearest warehouse | Geolocate shipping address, route to closest location with stock | Perishables, time-sensitive delivery | Medium — requires geocoding service integration |
| Availability-first | Route to location with highest available quantity for the ordered item | High-SKU-count catalogs with uneven stock distribution | Low — SuiteQL inventory query per location |
| Priority list | Fixed priority order per location (e.g., always try Warehouse A, then B, then C) | Operations that want deterministic routing for planning | Low — hard-coded or configurable priority list |
The Correct Integration Flow
Receive the order. Query NetSuite inventory by location for each ordered SKU using SuiteQL. Apply your routing strategy. Select the fulfilment location. Write the decision to WooCommerce order meta (_fulfillment_location) immediately.
Create the SO with the location field set to the selected warehouse. Do not create the SO first and update the location later — the location field on a committed SO affects inventory allocation and should not be changed post-creation.
After the SO is confirmed, create the Fulfillment Request (Item Fulfillment) with the same location. The FR is what physically triggers the pick-and-pack process in the warehouse. If you use a WMS, the FR is the record it polls or receives via webhook.
If your integration writes the routing decision to WooCommerce meta successfully but then fails to create the NetSuite SO with the correct location, the two systems are out of sync. Implement a retry with idempotency check: before retrying a failed SO creation, check whether an SO already exists for this order ID. Never create duplicate SOs for the same WooCommerce order.
References
- NetSuite Item Fulfillment ReferenceOracle NetSuite Help — Item Fulfillment (Fulfillment Request) record fields including location and inventory detail.
- SuiteQL for Inventory QueriesOracle NetSuite Help — SuiteQL queries for inventoryBalance by location used in routing decisions.
- WooCommerce Orders REST APIWooCommerce.com — order meta fields used for storing routing decisions on WooCommerce order records.
Leave a Reply