Every manufacturer hits a step it cannot — or should not — do in-house. A specialist coating, a certified weld, a machining operation that would sit idle eleven months of the year, or simply overflow work when the shop is full. Subcontracting solves the capacity problem, but it creates a tracking problem: your components leave your building, sit on someone else’s floor, and return as a different product. If that movement lives in emails and spreadsheets, inventory, costing, and lead times quietly drift apart.
Odoo’s subcontracting feature exists to keep that outside work inside the same system as everything else. It is not new in Odoo 20 — the core flows have been stable for several versions — but Odoo 20 tightens the two places subcontracting usually hurts: seeing what is missing before you ship, and valuing what comes back when there is no neat purchase order behind it. This guide covers the three subcontracting models, the setup each one needs, the day-to-day workflow, and exactly what changed in version 20.

What subcontracting means in Odoo
In Odoo, a subcontracted product is a product another company manufactures for you, which you then sell or use as if you had made it. The mechanism is deliberately simple: a bill of materials (BoM) whose type is Subcontracting, plus a vendor pricelist entry that lets you buy the finished product from the subcontractor on a purchase order. The BoM describes what goes into the product; the purchase order is what actually drives the flow.
That design matters. There is no separate subcontracting order type to learn. You raise a purchase order, and Odoo generates the transfers that move components out and bring finished goods in, tied to that order from start to finish.
The three models: basic, resupply, and dropship
Most confusion about Odoo subcontracting comes from mixing up three distinct workflows. Choose based on one question: who supplies the components?
Basic subcontracting
The subcontractor sources their own components, manufactures the product, and delivers the finished good to your warehouse. You configure a vendor and a subcontracting BoM — listing components on the BoM is still useful for costing, even components the subcontractor buys themselves — but no component stock moves from your side. The flow is just: confirm the purchase order, process the receipt.
Resupply subcontracting
You supply the components. This is the model most people mean by subcontracting: your materials, their labour and machines. Components on the BoM are sent from your stock to the subcontractor when the purchase order is confirmed, consumed there in Odoo’s model of the process, and the finished product returns to your warehouse. Stock at the subcontractor is tracked in a dedicated Subcontracting location, so you can see what you own that happens to be sitting in someone else’s building.
Dropship to subcontractor
A third party supplies the components, shipping them directly to your subcontractor instead of to you. The Dropship Subcontractor on Order route creates a request for quotation to the component vendor each time a purchase order for the subcontracted product is confirmed. Do not confuse it with the plain Dropship route, which ships purchased products directly to your end customer. The two routes can even be combined, so components are dropshipped to the subcontractor and the finished product is then shipped from the subcontractor straight to your customer.
Setup, step by step
- Turn the feature on. In the Manufacturing app’s settings, tick Subcontracting under Operations. This adds the Subcontracting BoM type and makes the two subcontracting routes available in Inventory.
- Add the subcontractor as a vendor. On the finished product’s form, open the Purchase tab and add the subcontractor, with the price you pay them for the finished product. Set a single lead time that covers the whole cycle: receiving your components, producing, and delivering back to you.
- Create the subcontracting BoM. Set BoM Type to Subcontracting, name one or more subcontractors, and list every component with its quantity. For costing accuracy, register all components — including any the subcontractor sources directly.
- Set component routes. For resupply, assign Resupply Subcontractor on Order to the components you send. For dropship, assign Dropship Subcontractor on Order to components a vendor ships straight to the subcontractor.
One detail saves a common mistake: do not set a manufacturing lead time on the BoM. You are not manufacturing this product, so the single vendor lead time on the pricelist is the number planning should use — it already includes transit, production, and return delivery.
The resupply workflow in practice
Once configured, the resupply flow runs in three steps:
- Create and confirm the purchase order for the finished product, addressed to the subcontractor. Confirming it automatically creates both a resupply order (the transfer that sends components out) and a receipt (for the finished goods coming back). Both are reachable from smart buttons on the purchase order.
- Validate the resupply order when the components physically leave. This moves them in Odoo from your stock to the subcontracting location.
- Validate the receipt when the finished product returns. Behind the scenes, Odoo records the components moving from the subcontracting location into a production location, being consumed, and the finished good moving back through the subcontracting location into your stock.
Because the subcontracting location is an internal location, sending components out does not remove them from your inventory valuation — they still belong to you, they are just somewhere else. That single design choice is what makes the costing below work.
Replenishment can also be manual when you prefer to work ahead of orders: create a transfer using the Resupply Subcontractor operation type and specify which subcontractor it goes to, or raise a dropship purchase order with the subcontractor as the delivery address. If components are lot- or serial-tracked, the receipt is where you record them: a Record Components button appears when needed, letting you register the component lots consumed and the finished product’s own lot or serial number — the traceability chain survives the trip outside your walls.
What is new for subcontracting in Odoo 20
Odoo 20 does not redesign subcontracting, but the Manufacturing section of the release notes lists three targeted improvements:
- Subcontracting MO overview. The Component Status and the manufacturing order overview are now also available for subcontracting production. In practical terms, you can check which components are missing for subcontracted work and order them directly, instead of discovering a shortage when the resupply transfer cannot be validated.
- Reception valuation without a purchase order. If no purchase order is linked, the subcontractor cost is now assigned at the product’s reception based on the vendor pricelist. Receptions that arrive outside the tidy PO-first flow no longer land in stock without the subcontractor’s cost attached.
- Component costs in MO cost. The cost of subcontracted product replenishments shown in the MO overview now takes component costs into account, and the MO Cost field in general shows a provisional cost while an order is in progress and the real cost once it is complete.
Those changes pair well with two general Odoo 20 manufacturing additions: the To Replenish filter on the MO overview, which surfaces orders still needing supply, and expiration dates in the traceability report, useful when subcontracted batches carry shelf-life constraints.
Costing: what a subcontracted product is really worth
Odoo’s documentation expresses the valuation of a subcontracted product as:
P = C + M + S + D + x
- C — the cost of components you supplied;
- M — the price paid to the subcontractor for manufacturing the product;
- S — shipping components out and finished goods back;
- D — dropshipping cost, when components or finished goods move that way;
- x — other associated costs, such as import taxes.
Not every job includes every term — a basic subcontract with no dropshipping has no D. The discipline is on the product form: the vendor price should represent what you actually pay the subcontractor (their materials plus their service), while components you supply keep their own cost through the subcontracting location. Mix those up and margins on the finished product will be wrong in a way that is hard to spot later. The subcontractor’s bill should then match the purchase order, priced from the finished product.
Keeping control once work is out the door
- Watch the subcontracting location. It is your live answer to “what of ours is at their site, and for how long?” Review it like any other stock location.
- Use quality checks on receipt. Subcontracting concentrates your quality risk at one moment — the return delivery. Trigger checks on the receipt operation so inspection happens before the goods merge into sellable stock.
- Keep lead times honest. The vendor lead time drives expected arrival dates everywhere downstream. If a subcontractor slips, update the pricelist rather than letting planners work around stale dates informally.
- Record tracked components at receipt, every time. Skipping the Record Components step breaks lot traceability for recalls — the exact scenario traceability exists for.
Subcontracting will always involve trust: your materials and your customers’ deadlines are in someone else’s hands. What Odoo removes is the guesswork. Components, costs, dates, and finished goods all move through one set of records — and in Odoo 20, the overview, component status, and reception valuation cover subcontracted work as completely as work done on your own floor.
Further reading
- Odoo 20 Release Notes — the Manufacturing section: subcontracting MO overview, reception valuation, and MO cost changes.
- Resupply subcontracting — Odoo documentation — configuration and the three-step resupply workflow.
- Subcontracting — Odoo documentation — the three workflows and the subcontracted product valuation formula.
