Odoo Inventory Routes Explained (Push, Pull, MTO)
Odoo inventory routes in plain language: multi-step flows, push and pull rules, make-to-order, putaway and removal strategies, and common mistakes.
Routes are the part of Odoo Inventory that confuses people most, and the part that matters most for warehouse operations. Once you understand them, most "why did Odoo create this transfer?" questions answer themselves.
Start with the warehouse settings
On each warehouse, Odoo lets you pick how many steps incoming and outgoing goods take:
Incoming shipments
- 1 step: receive directly into stock
- 2 steps: receive into an input area, then move to stock
- 3 steps: receive into input, move to quality control, then to stock
Outgoing shipments
- 1 step: deliver directly from stock
- 2 steps: pick to an output area, then ship
- 3 steps: pick, pack, then ship
Choosing these generates the routes and rules for you. Start with the simplest option that matches how your floor actually works. Three steps where one would do just creates extra clicks.
Routes and rules
A route is a set of rules. Each rule says: to get stock into location X, do something.
- Pull from. Take it from another location (creates a transfer)
- Buy. Create a purchase order
- Manufacture. Create a manufacturing order
- Pull & Push and Push to for automatic onward movement
Routes can be set on the warehouse, product category, product or even a sales order line.
Pull rules: demand-driven
When a sales order is confirmed, Odoo asks "where does this stock need to be, and where can it come from?". It walks backwards through the rules:
- Customer needs goods. Rule: pull from Output.
- Output needs goods. Rule: pull from Stock.
- Stock has the goods? Reserve them. If not, and there's a Buy or Manufacture rule, create a PO or MO.
That's how one sales order can create a pick, a pack and a delivery, all linked.
Push rules: arrival-driven
Push rules act when goods arrive in a location. Goods received in Input get pushed to Quality, then to Stock. Nobody has to create those transfers by hand.
Make to order (MTO)
The MTO route tells Odoo to source each order line specifically, instead of taking from general stock. It's used for:
- Custom or configured products
- Expensive items you don't want to hold
- Drop-shipping, where the supplier ships straight to the customer
Combine MTO + Buy to create a PO per sales order, or MTO + Manufacture to create an MO per sales order. MTO is archived by default in recent versions. Unarchive it in the routes list if you need it.
Putaway rules
Putaway rules decide where incoming products land: "Products in category Cables go to WH/Stock/Zone-C". You can also put away by package type and capacity in recent versions. Without putaway rules, everything lands in the warehouse's default stock location.
Removal strategies
Removal strategies decide which stock gets reserved first:
- FIFO. Oldest receipt first
- LIFO. Newest first
- FEFO. Earliest expiry first (needs expiry dates on lots)
- Closest location. Shortest path
- Least packages. Fewest packages opened
Set them on the product category or the location.
Mistakes we fix most often
- Too many steps. Three-step delivery in a warehouse with two people. Simplify.
- Conflicting routes. The same product has routes on the category and on the product, and the result surprises everyone.
- Validating out of order. Completing the delivery without the pick leaves orphaned moves.
- Manual transfers that bypass routes. Stock ends up in Output with no delivery to consume it.
- Reordering rules on the wrong location. A min/max on WH/Stock when stock actually lives in sub-locations works, but on an unrelated location it won't.
Design on paper first
Draw your physical flow: where goods arrive, where they're checked, where they're stored, where they're picked and packed. Then configure routes to match. Not the other way round.
Related reading: Odoo implementation guide, warehouse layout and slotting, and our Odoo inventory service.
Frequently asked questions
What is the difference between push and pull rules in Odoo?
Pull rules create moves in response to demand (a sales order needs stock, so the system pulls it from somewhere). Push rules move stock automatically after it arrives somewhere (received goods are pushed to quality, then stock).
Why are my Odoo transfers stuck in 'Waiting'?
Usually because a previous step in a multi-step route hasn't been completed, or because stock is reserved elsewhere. Check the chain of moves linked to the transfer.
ERP Builders Architecture Group
The engineers responsible for integration design, data migration tooling and performance work across ERP Builders projects.
Related articles
Odoo 20 Inventory: New Reports, Returns and Shipping
Odoo 20 inventory changes for warehouse teams: stock aging, inventory at a past date, suggested reorder levels, simplified returns, CMR, ZPL labels and ShipStation.
3D Warehouse Management: Visualising Stock in 3D
What 3D warehouse management offers: bin occupancy views, slotting decisions, space planning, and how to build a 3D view on ERP location data.
RFID Integration with Odoo: A Practical Architecture
How to integrate RFID readers with Odoo inventory: middleware design, mapping EPCs to products and serials, receiving and counting flows, performance and what to build vs buy.
Next step
Turn the plan into a working system.
Book a consultation with an ERP consultant. No sales script — just an honest look at your situation.