Odoo Inter-Warehouse Transfers: How to Resupply One Warehouse from Another for Australian Wholesalers
Odoo inter-warehouse transfers need Storage Locations, Multi-Step Routes and the Resupply From field. The route creates a linked delivery and receipt.
By Josh Craig, Managing Director, Auboros ·
Odoo inter-warehouse transfers need two settings and one field. Turn on Storage Locations and Multi-Step Routes, then tick the supplying warehouse in Resupply From on the receiving warehouse. Odoo creates an “X: Supply Product from Y” route; a reordering rule, MTO order or manual Replenish on it raises a delivery at one site and a receipt at the other, linked through transit. Standard in Odoo 20, 23 October 2026.
At a glance
- Who it is for: Australian wholesalers, distributors and retailers on Odoo 18, 19 or 20 that hold stock in more than one place, typically a central warehouse in Brisbane, Sydney or Melbourne feeding branches, trade counters or shops
- Problem it solves: branch stock topped up by phone calls and spreadsheets, internal transfers keyed twice, and stock that disappears from one site before it appears at the other
- Platforms: Odoo Inventory, Community or Enterprise; the inter-company variant needs multi-company, which sits on the Custom plan
- Typical cost: no extra Odoo licence for a second warehouse; odoo.com/pricing listed Standard at A$43 per user per month ex GST (A$34.40 for the first year) and Custom at A$80 (A$64 for the first year) as at 5 October 2026, and the configuration sits inside Odoo implementation cost in Australia rather than being quoted on its own
- Typical timeline: in our projects, half a day to configure the warehouses, routes and rules for a branch on a test database, then a stock count at the branch before the first live transfer
- Last verified: 23 October 2026 against the Odoo 20 inter-warehouse replenishment documentation and warehouses documentation
The second warehouse is where a lot of Odoo sites get untidy. The first one was configured carefully during the implementation. The branch came later, got added as a warehouse, and from then on stock moved between the two on internal transfers someone remembered to create. The Brisbane team ran out of a line while Sydney had 400 on the shelf, because nothing in the system knew the branch was meant to be topped up from head office. Odoo has a standard answer to this, and it is a route, not a module. This post is a spoke off our broader guide to Odoo inventory management in Australia and sits alongside the reordering rules guide, because the two features do their best work together.
What does Odoo create when one warehouse resupplies another?
Two linked transfers and nothing else. The Odoo 20 documentation describes the result of a triggered resupply route like this:
- An outgoing transfer at the supplying warehouse. Stock moves from that warehouse’s stock location to the transit location. If the supplying warehouse ships in one step, this is a single delivery. If its Outgoing Shipments setting is two or three steps, it is a pick (and pack) followed by the delivery, exactly as a customer order would be. Our post on Odoo pick, pack and ship covers that setting.
- A receipt at the receiving warehouse. Stock moves from the transit location into the branch, followed by whatever the branch’s Incoming Shipments setting adds. The receipt sits at Waiting until the delivery from the supplying warehouse is validated.
The transit location is the part people miss. Between validation of the delivery and validation of the receipt, the stock is in a location called Inter-warehouse transit. It is not on the shelf at either site, which is accurate, because it is in a truck on the Pacific Motorway. Stock that “disappears” between sites on a spreadsheet system is visible here in Odoo, and the Waiting receipt is the branch’s reminder that something is on its way.
One more detail from the same page: a delivery created manually at the supplying warehouse, addressed to the receiving warehouse, also generates the receipt at the other end, and a return of that receipt goes back to the supplying warehouse. So the route handles the ad hoc transfer as well as the automated one.
How do you set up Resupply From in Odoo 20?
The setup is four screens. The order matters because the route only appears once the warehouses are configured.
- Settings. In Inventory, Configuration, Settings, enable both Storage Locations and Multi-Step Routes. The second one is the step that gets skipped, and without it the Resupply From field and the one, two and three-step options never show on the warehouse form.
- Warehouses. In Inventory, Configuration, Warehouses, every site must be its own warehouse, the central warehouse and each branch alike. Open the branch, go to the Warehouse Configuration tab, and in Resupply From tick the central warehouse. You can tick more than one supplier warehouse if a branch can be fed from two sites. The field only appears once the database has at least two warehouses.
- Products. On each product’s Inventory tab, the Routes section now lists a route named “X: Supply Product from Y”, where X is the branch and Y is the central warehouse. Tick it. Products that should never be transferred, such as a branch-only line, simply don’t get the route.
- Trigger. Pick how the transfer gets raised: a reordering rule at the branch, Replenish on Order (MTO), or a manual Replenish from the product form. The next section compares them.
Warehouse short names deserve a sentence. Each warehouse has a code of up to five characters that appears on every document, and the documentation suggests something memorable rather than WH1 and WH2. BNE, SYD and MEL cost nothing and save a lot of mis-picks when the two sites’ transfers look alike.
Reordering rule, MTO or manual: which trigger suits a branch warehouse?
Three ways to fire the route, and most wholesalers end up using two of them.
| Trigger | How it works | Best for | Watch-outs |
|---|---|---|---|
| Reordering rule at the branch | A rule on the branch’s stock location with the resupply route, Min and Max; fires when the branch’s forecast drops below Min, on the daily scheduler or on a sales order confirmation | Fast movers the branch always carries | The rule must sit on the branch location, not the central one; with Manual trigger the line waits on the replenishment report for a person to click Order |
| Replenish on Order (MTO) | The product carries both the resupply route and Replenish on Order (MTO); a quotation with the branch set as Warehouse on its Other Info tab creates the transfer on confirmation | Slow movers, special orders, bulky lines the branch should not stock | The MTO route must be enabled in settings before it appears on the product; the customer waits for two transfers, not one |
| Manual Replenish | From the product form, Actions, Replenish, set Quantity and Scheduled Date, choose the resupply route as Preferred Route, confirm | One-off top-ups before a promotion or a trade show | Nothing stops a second person raising the same request an hour later |
Our rule of thumb for a branch: reordering rules on the lines it sells every week, MTO on the lines it sells twice a year, and manual Replenish kept for the exceptions. A 0/0 reordering rule, which the Odoo documentation itself uses as its example, is the neat way to run a branch that holds nothing speculatively: every confirmed sale at the branch pulls exactly that quantity from the central warehouse.
The branch reordering rule is the setting we check first on any multi-site Odoo review. Nine times out of ten the rule exists, it is pointed at the wrong location or the wrong route, and head office has been buying stock the branch already had.
Josh Craig, Director, Auboros
Where do inter-warehouse transfers go wrong?
The failures we see on Australian sites are configuration, not software.
- Multi-Step Routes left off. The branch was created, the Resupply From field never appeared, and someone concluded Odoo could not do it. Enable the setting and reopen the warehouse form.
- Rules on the wrong location. A reordering rule written against WH/Stock instead of BNE/Stock reorders for head office. Rules live per location, which is also why a branch added after go-live often has no rules at all; our reordering rules guide covers the Min and Max maths.
- Transfers validated at the wrong end. If the branch validates its receipt before the truck arrives, the stock is on the branch’s shelf in Odoo and in transit in reality. Keep the receipt at Waiting until the delivery is validated, which Odoo enforces, and then until the goods are counted in.
- Freight on the internal move. Odoo’s landed costs apply to receipts of purchased stock; the delivery between your own sites is a stock move, not a purchase, so the interstate freight needs its own treatment in accounting. Decide that with your accountant before go-live rather than after the first BAS.
- Branch counted, head office not. The receiving site gets a stock count before the first transfer and the supplying site does not, so the second transfer fails to reserve. Count both.
What changes when the branches are separate companies?
Groups that run each state as its own legal entity can still use the same route. In a multi-company database, the documentation says a warehouse can be resupplied from a warehouse belonging to another company without creating inter-company sales or purchase orders. The product must be shared between the companies (its Company field left empty), the user needs access to both companies with both selected in the company switcher, and the Resupply From field then lists the other company’s warehouses. The delivery belongs to the supplying company and the receipt to the receiving one, through an Inter-company transit location that is itself not valued. The receiving company’s stock valuation uses the product’s value before it left the supplying company.
Two practical notes for Australian groups. Multi-company is a Custom plan feature, so a Standard subscription will need to move up before this works. And the absence of an inter-company sales order means the transfer pricing, GST and intercompany invoicing between your entities are a separate accounting workflow, which is often why a group chooses to run proper inter-company orders instead. The Moves Analysis report in Inventory, Reporting has an Intercompany Deliveries filter that lists every completed move through the transit location, which is the audit trail your accountant will ask for.
If you’d rather see a two-site setup running on your own product list before deciding, that’s a normal first conversation for an Odoo partner in Brisbane to have, and it fits the stock and margin work we describe on our ERP for wholesale distribution in Australia page.
Goes well with
- Odoo reordering rules: how to set Min and Max stock levels for Australian wholesalers
- Odoo pick, pack and ship: one, two and three-step deliveries
- The AI inventory exception agent: how it finds stockouts and excess stock across every warehouse
Adding a second warehouse to Odoo, or untangling the first one you added?
We configure multi-warehouse Odoo for wholesalers and distributors across Brisbane, the Gold Coast and the rest of Queensland, and we’re happy to look at an existing site where the branch transfers have never quite worked. Book a free consultation and bring your warehouse list; we’ll tell you which routes and rules you actually need.
FAQ
Frequently asked questions
How do you transfer stock between warehouses in Odoo?
Enable Storage Locations and Multi-Step Routes, then on the receiving warehouse tick the supplying warehouse in the Resupply From field. Odoo creates a route named X: Supply Product from Y. Tick it on the product, and a reordering rule, an MTO sales order or a manual Replenish produces a delivery at the supplying site and a receipt at the receiving site.
Does Odoo charge extra for a second warehouse?
No. Odoo prices per user, not per warehouse, and the Inventory app supports multiple warehouses on any paid plan. The exception is resupplying between warehouses that belong to different companies, which needs multi-company and therefore the Custom plan.
What is the Inter-warehouse transit location in Odoo?
It is the location stock sits in between the delivery leaving the supplying warehouse and the receipt being validated at the receiving warehouse. Stock in transit is on hand at neither site, which matches reality while it is on the truck. Between companies the equivalent location is Inter-company transit, which is not valued.
Can a reordering rule move stock from another warehouse instead of buying it?
Yes. Create the rule on the receiving warehouse's stock location and set its Route to the X: Supply Product from Y route. When the forecast at that location falls below Min, Odoo raises an inter-warehouse transfer up to Max instead of a purchase order.
Why does the receipt at my branch warehouse stay at Waiting?
By design. The receipt from the transit location is Waiting until the delivery at the supplying warehouse is validated. Once that delivery is done the receipt becomes Ready, and the branch validates it when the goods are counted in.