All posts
Integrator10 min read

Multi-step routes and putaway rules in Odoo Inventory: pick-pack-ship and putaway strategies

Configure Odoo multi-step routes (2-step and 3-step picking), define putaway rules by product category and capacity, and understand how the route engine chains operations.

Odoo Inventory's route and putaway system lets you model complex warehouse operations: two-step picking (pick then ship), three-step picking (pick → pack → ship), and intelligent putaway based on product category, lot, or capacity. This guide covers the full configuration.

Understanding routes#

A Route is a sequence of rules that Odoo follows when moving goods. Routes chain procurement rules (for inbound) and push/pull rules (for outbound and internal moves).

Routes are assigned at multiple levels:

  • Product - override default route for specific products
  • Product Category - apply to all products in a category
  • Warehouse Operation Type - default for all moves through a given operation
  • Warehouse - configure inbound and outbound steps globally

Setting inbound steps#

Go to Inventory → Configuration → Warehouses → [your warehouse]. Under Shipments, configure:

  • Receive in 1 step: goods go directly from vendor to stock (Receipts → Stock)
  • Receive in 2 steps: goods go to an input area first, then putaway moves to stock (Receipts → Input → Stock)
  • Receive in 3 steps: quality control step between input and stock (Receipts → Input → Quality Control → Stock)

For most operations, 2-step receiving allows a quality inspection before stocking without full QC module complexity.

Setting outbound steps#

Under the same warehouse configuration → Shipments (outbound):

  • Ship in 1 step: pick directly from stock and ship (Stock → Delivery)
  • Ship in 2 steps (Pick + Ship): separate the picking operation from the loading/delivery (Stock → Output → Delivery)
  • Ship in 3 steps (Pick + Pack + Ship): add a packing area between pick and ship (Stock → Pick → Pack → Delivery)

When to use 3-step#

3-step makes sense when:

  • Pickers work in the warehouse aisles (bulk picking from racking)
  • Packers work at a dedicated packing station (boxing, labelling, manifesting)
  • Shippers load trucks from a staging area (output dock)

Each step is a separate operation type with its own responsible team, which enables parallel work: while packers are packing yesterday's picks, pickers are picking today's orders.

How the route engine works#

When a sale order is confirmed, Odoo runs procurement rules starting from the delivery destination and working backward:

  1. Delivery order needs goods at Output location → a rule says "pull from Stock" → creates a Pick transfer
  2. If 3-step: Pick order creates demand at Pack → another rule says "pull from Pick" → creates a Pack transfer
  3. The chain terminates when the source location is a procurement location (supplier) or a stock location

This is the Pull routing strategy. There is also a Push strategy where operations trigger the next step automatically upon validation (used in manufacturing flows).

Putaway rules#

Putaway rules tell Odoo where to put goods when they arrive at a receiving location. Without putaway rules, everything goes to the default destination on the receipt (usually WH/Stock).

Configure putaway rules under Inventory → Configuration → Putaway Rules → New:

FieldDescription
Having ProductMatch by specific product
Having Product CategoryMatch by product category (broader)
On Receipt of Lot/SerialMatch by lot or serial characteristics
Store inThe destination sublocation
CapacityMaximum quantity before overflowing to next rule

Evaluation order: Product-specific rules take precedence over category rules. Capacity constraints trigger overflow to the next matching rule.

Example: category-based putaway#

You have three zones in your warehouse:

  • WH/Stock/Frozen - frozen goods (capacity: 200 pallet positions)
  • WH/Stock/Refrigerated - refrigerated goods
  • WH/Stock/Ambient - ambient goods

Create putaway rules:

  • Product Category Frozen Food → Store in WH/Stock/Frozen
  • Product Category Fresh Produce → Store in WH/Stock/Refrigerated
  • Product Category Non-perishable → Store in WH/Stock/Ambient

When a frozen item arrives, Odoo's putaway logic automatically routes it to the Frozen zone.

Capacity-driven overflow#

If Frozen is full (capacity reached), the next putaway rule for the same category with a different destination (e.g., an overflow Frozen-2 location) activates. Capacity tracking requires Storage Locations enabled in settings and the Putaway Strategies setting set to Product or Category + Putaway Rules.

Operation types and source/destination defaults#

Each operation type (Receipt, Internal Transfer, Delivery, Pick, Pack) has default source and destination locations. Open Inventory → Configuration → Operations Types → [operation]:

  • Operation Type: Receipt, Internal Transfer, Delivery, etc.
  • Default Source Location: where goods come from
  • Default Destination Location: where goods go to

For a 3-step pick-pack-ship warehouse:

OperationSourceDestination
PickWH/StockWH/Packing Zone
PackWH/Packing ZoneWH/Output
DeliveryWH/Output(partner location)

Never set the source and destination to the same location - this creates zero-move transfers that confuse reporting.

Cross-docking route#

The Cross-Dock route bypasses stock: inbound goods go directly to the outbound area to fulfill a waiting order. To enable:

  1. Enable the Cross-Dock route on the warehouse
  2. On the sale order, set the route to Cross-Dock on the product line
  3. When the receipt arrives, a linked Transfer directly moves the goods to the Output zone

Cross-docking requires careful coordination between receiving and shipping teams and a same-day SLA on the inbound shipment.

Reporting: operation throughput#

Inventory → Reporting → Inventory Analysis shows move volumes by operation type and location. Use this to measure:

  • Average time from Receipt confirmation to WH/Stock (inbound lead time)
  • Average time from Pick creation to Ship validation (outbound cycle time)
  • Backlog of open Pick/Pack/Ship operations

Common configuration mistakes#

  • Putaway rules not firing: Check that the Storage Locations and Putaway Strategies settings are both enabled in Inventory → Configuration → Settings.
  • 2-step picking not creating a Pick transfer: The route on the product must be Buy + 2-step (not just Buy). Verify the product routes tab or the product category route.
  • Internal transfers stacking up between steps: Each step requires a human to validate it. If operators aren't validating the intermediate transfers (e.g., the Pick step), the next step (Pack) never starts. Review the transfer pipeline for stalled intermediate operations.
  • Products going to WH/Stock instead of sublocation: No matching putaway rule exists for the product or category. Check rule priority and that the product's category matches the rule's category.

Use ERPeek to query your Odoo route configuration: "Which products have the Cross-Dock route but no waiting sale orders?" or "Show me all putaway rules for the Frozen food category" - directly against your warehouse setup.

Try ERPeek on your own Odoo module - ask questions, scaffold tests, and explore your codebase in plain language.

Get started free