Skip to Content

Multi-Warehouse Inventory in Odoo: Routes, Replenishment, and Where Teams Get Stuck

June 3, 2026 by
Multi-Warehouse Inventory in Odoo: Routes, Replenishment, and Where Teams Get Stuck

By the end of this tutorial, you'll be able to configure two or more warehouses in Odoo, set up inter-warehouse replenishment routes, and run reordering rules that pull stock from the right location automatically. You'll also know the three spots where most teams lose time during setup. Prerequisites: Odoo installed with the Inventory app active and at least one product in your system. Budget about 45 minutes the first time through.

Phase 1: Create Your Warehouses

Each warehouse in Odoo gets its own set of stock locations, routes, and operation types. Getting the structure right here saves you from having to untangle pick/pack operations later.

  1. Go to Inventory → Configuration → Warehouses and click New.
  2. Fill in Warehouse Name (e.g., "Chicago DC") and a short Short Name (e.g., "CHI"). The short name prefixes all operation types, so keep it to 3 to 5 characters.
  3. Under Shipments, choose your inbound and outbound routes. For a distribution center, "Receive in one step" and "Ship in one step" keeps things simple until you've confirmed the basic routes work end to end. You can add multi-step later.
  4. Save the record. Odoo automatically creates a View Location, a Stock location, an Input location, and a set of operation types for that warehouse.
  5. Repeat for each additional warehouse. A second warehouse, say "Atlanta DC" with short name "ATL", gets its own parallel set of locations.

Verify your work by going to Inventory → Configuration → Locations. Filter by Usage: Internal. You should see one "Stock" child location per warehouse under the Physical Locations parent.

Phase 2: Enable Multi-Warehouse Routes

Routes tell Odoo how stock is supposed to move. Without the right routes enabled, replenishment rules will either error out or silently fall back to something you didn't intend.

  1. Go to Inventory → Configuration → Settings. Under the Warehouse section, confirm that Multi-Step Routes is turned on. While you're here, also check Storage Locations if it isn't already enabled.
  2. Go to Inventory → Configuration → Routes. Click New to create an inter-warehouse resupply route.
  3. Name the route clearly, for example "Chicago DC → Atlanta DC". Under Applicable On, check Products (you'll assign it per-product later) and optionally Warehouses if you want it available as a warehouse-level default.
  4. In the Rules tab, add a rule:
    • Action: Transfer from another warehouse
    • Source Location: CHI/Stock
    • Destination Location: ATL/Stock
    • Operation Type: CHI: Receipts (this triggers a pick at the source and a receipt at the destination)
  5. Save the route. You can add more rules to the same route if you have intermediate quality-check or staging steps.
Worth noting: Odoo also has a built-in resupply shortcut. On the Atlanta warehouse record (Inventory → Configuration → Warehouses → ATL), scroll to the Resupply tab. Check "Resupply from Chicago DC." Odoo auto-generates a route for you. The manually-built route above gives you more control over operation types and multi-step logic; the checkbox is faster but less configurable. Both are valid starting points.

Phase 3: Assign Routes to Products

A route only fires if the relevant product knows about it. This is the step teams most often miss when they're testing and wondering why no transfer was created.

  1. Open a product (e.g., from Inventory → Products → Products) and go to the Inventory tab.
  2. Under Routes, check the route you just created ("Chicago DC → Atlanta DC"). If you used the built-in resupply checkbox on the warehouse, that route will already appear here as an option.
  3. Set a Responsible user if your team uses that field for ops ownership. Otherwise leave it blank.
  4. Save. Repeat for any other products that should flow through this inter-warehouse route.

If you have dozens of SKUs, you can bulk-update routes via Inventory → Products → Products, select all relevant products, and use Action → Update Quantity... actually, for routes specifically, use the list view and the Action → Set Routes option if your Odoo instance has that customization, or update them through an import. Out of the box, route assignment is per-product, so a short import via the built-in CSV/Excel importer at Inventory → Products → Products → Action → Import is the fastest path for bulk updates.

Phase 4: Configure Reordering Rules

Routes define the path. Reordering rules define when Odoo walks it. This is where multi-warehouse setups pay off operationally: each location can have its own min/max thresholds, and replenishment can be triggered automatically on a scheduler or manually on demand.

  1. Go to Inventory → Operations → Replenishment. Click New.
  2. Set the Product to the item you configured the route on.
  3. Set Location to the destination warehouse's stock location, e.g., ATL/Stock. This is critical: the reordering rule must live on the location that needs the stock, not the source.
  4. Set Route to "Chicago DC → Atlanta DC".
  5. Set Min Quantity (reorder point) and Max Quantity (order-up-to level). For example: min 50 units, max 200 units. When ATL/Stock drops below 50, the rule triggers a replenishment transfer to bring stock up to 200.
  6. Set Quantity Multiple if your pallet or case quantities require it (e.g., cases of 12).
  7. Save. Repeat for each product-location combination you want to automate.

To trigger replenishment manually, click Run Scheduler from the Replenishment view. To have Odoo run it on a schedule, go to Settings → Technical → Automation → Scheduled Actions and confirm the "Run Minimum Stock Rules" action is active. Most teams set this to run nightly.

Phase 5: Test the Full Flow End to End

Don't skip this. Routes have a few failure modes that only show up when you actually push a transfer through.

  1. Manually reduce the on-hand quantity at ATL/Stock below your reorder min (use Inventory → Operations → Physical Inventory to set it directly for testing).
  2. Go to Inventory → Operations → Replenishment and click Run Scheduler.
  3. Navigate to Inventory → Operations → Transfers. Filter by operation type for your inter-warehouse route. You should see a new transfer from CHI/Stock to ATL/Stock with the correct quantities.
  4. Validate the transfer. Check that ATL/Stock has increased and CHI/Stock has decreased accordingly.
  5. Check your accounting entries under Accounting → Accounting → Journal Entries if you're using costed inventory (FIFO or Average Cost). An inter-warehouse transfer should generate a stock valuation move between the two warehouse accounts, not an income or expense entry. If it doesn't, your inventory valuation method or product category may need review.

Where Teams Get Stuck

After working through this setup with multiple distributors, the same three friction points come up repeatedly.

1. Operation Type Mismatch

The route rule's Operation Type must exist in the source warehouse, and the destination receive step must be configured correctly in the destination warehouse. If you set the operation type to "ATL: Receipts" in a rule that lives on the CHI side, nothing will trigger. The rule's operation type drives where the picking happens; the destination automatically gets a corresponding receipt. When a replenishment creates no transfer, this is the first place to check.

2. Location Hierarchy Confusion

Odoo's location tree has parent-child relationships. A reordering rule set to the parent location "Physical Locations" instead of the specific warehouse's stock location will behave unpredictably. Always set the rule's location to the specific stock location, e.g., "Atlanta DC/Stock", not a parent or view location. You can verify the exact path by going to Inventory → Configuration → Locations and expanding the tree.

3. Forgetting to Assign the Route to the Product

A route exists, a reordering rule exists, but the replenishment still doesn't fire. Nine times out of ten, the product's Inventory tab doesn't have the route checked. The reordering rule can point to the right route, but Odoo also validates that the product is eligible for that route. Check the product's Inventory tab → Routes section. Both the reordering rule and the product need to agree on the route.

How This Connects to the Broader Odoo Picture

What makes multi-warehouse inventory worth configuring properly in Odoo (versus managing it in spreadsheets or a standalone WMS) is that the same stock data feeds your sales orders, purchase orders, and financials in real time. When ATL/Stock triggers a replenishment pull from CHI, your purchase team sees the updated Chicago on-hand quantities before they cut a new PO to the supplier. Your sales reps see Atlanta availability without calling the warehouse. And your CFO's inventory valuation report reflects both locations in one view.

That's the integration story worth keeping in mind as you build out the route and replenishment logic: you're not just moving boxes between buildings, you're wiring your distribution operation into a single live dataset that spans inventory, finance, purchasing, and sales. A good implementation partner can accelerate the route configuration significantly, especially if you're running three or more warehouses with complex multi-step operations, and they'll know which of the stuck points above to check first.

Is Odoo What You Need? 

Our team will help you discover if Odoo is the right fit, and get you a tailored demonstration of Odoo for your use case.





Keep Learning About Odoo

Your Dynamic Snippet will be displayed here... This message is displayed because you did not provide enough options to retrieve its content.
Archive