Odoo Configure to Order: Variants, Configurator, BOMs and Routing
Set up configure to order in Odoo 19 and 20: variant modes, the product configurator, one dynamic BOM, routing per variant, MTO and where custom starts.
Many manufacturers of configurable products keep the option logic in a spreadsheet, then re-key the result into a sales order and a work order. Odoo can hold that logic in the product itself. This guide shows how, the way we set it up on Odoo ERP for manufacturing projects.
Related service: Odoo implementation services — fixed-scope implementations with a named senior team.
It is written for operations heads, production planners and sales engineers at machine builders, furniture makers and other order-driven plants on Odoo 19 or Odoo 20. If you need the basics first, start with our Odoo BOM and production planning guide.
What is configure to order in Odoo?
Configure to order in Odoo means the customer picks from predefined options and Odoo builds the matching product variant, bill of materials and manufacturing order. Nothing is engineered from scratch, because every option was defined in advance.
Odoo has no app called configure to order. The process uses four standard pieces: product attributes and variants, the product configurator in Sales, a BOM with variant-specific lines, and the Replenish on Order (MTO) route.
Configure to order vs make to order
Configure to order manufacturing sits between make to order and engineer to order. The table shows where each strategy starts and which Odoo tools carry it.
| Strategy | What the customer decides | What exists before the order | Main Odoo tools |
|---|---|---|---|
| Make to stock | Quantity only | Finished goods | Reordering rules |
| Make to order | Quantity of a standard item | BOM and routing | MTO route |
| Assemble to order | Options built from stocked sub-assemblies | Sub-assemblies in stock | Variants, MTO, multilevel BOMs |
| Configure to order | Options from a fixed menu | Option rules and one BOM for all variants | Variants, configurator, Apply on Variants |
| Engineer to order | A new design | Little or nothing | Project, PLM, a BOM per job |
Which Odoo product variants mode fits configure to order?

For configure to order, set stock-relevant attributes to Dynamically and purely informational ones to Never, and keep Instantly for small catalogs sold from stock. This one field, Variant Creation, shapes the whole setup.
Each attribute, such as width, motor or finish, has a Variant Creation mode. Odoo's product variants documentation warns that the mode cannot be edited once the attribute is added to a product.
| Question | Instantly | Dynamically | Never |
|---|---|---|---|
| When is the variant created? | As soon as values are added to the product | When the combination is added to a sales order | No variant is created |
| Stock, barcode and cost per option? | Yes, for every combination | Yes, once the combination is sold | No, the choice stays on the order line |
| Best use | Small catalogs sold from stock | Configure to order products | Finish, engraving, notes |
| Effect on variant count | Multiplies every combination up front | Adds one variant at a time | Adds nothing |
| eCommerce product card options | Available | Not available | Not available |
| Multi-checkbox display type | Not allowed | Not allowed | Required |
A simple test helps. If an option changes what the warehouse must store, count or cost, make it a variant. If it only changes what the operator does on the day, set it to Never.
How many Odoo manufacturing variants can one product have?
Odoo can hold very large option sets, but by default it will not generate more than 1,000 new variants in one go for a product whose attributes are all set to Instantly. Above that it stops and tells you to create variants on demand.
Take an illustrative conveyor with 5 widths, 6 lengths, 3 motors, 4 belt types and 4 finishes. That is 5 x 6 x 3 x 4 x 4, or 1,440 combinations, which is over the default limit in the Odoo 19 and Odoo 20 source code.
With Dynamically, only the combinations customers really order become products. Moving finish to Never cuts the possible total to 360. Both steps keep the product list, stock reports and barcode labels readable.
Decide this before go-live. Odoo's documentation says that when an attribute is later removed, variants already used in orders are archived, and unused ones are deleted and recreated, which can wipe their customizations.
How does the Odoo product configurator work on a quotation?
The Odoo product configurator is a pop-up that opens when a salesperson adds a product with attributes to a quotation and asks for one value per attribute. The result is one order line with the exact variant and price.
- Add the product: select the configurable product on the quotation, and the Configure a product window opens.
- Pick the values: choose one value per attribute, shown as radio buttons, pills, a drop-down, colors or images.
- Add free text: values flagged "Is custom value" let you type a special request for that order.
- Add extras: a second window suggests optional products such as guards, spare kits or installation.
- Confirm: the order line now carries the variant, any Never values and the calculated price.
Impossible combinations are blocked with exclusions. On the product's attribute line, the Configure button opens each value, where an "Exclude for" field lists the values it cannot be combined with. Enter these early, because they stop bad orders at the quote.
How does variant pricing work in Odoo 19 and Odoo 20?
A variant's sales price in Odoo is the product template price plus the extra price set on each chosen attribute value. Pricelist rules can then target the whole template or one variant.
Odoo's own example is a shirt with a $20 template price and a $3 extra for red, which sells at $23. A machine works the same way: base price, plus an extra for the heavy motor, plus an extra for stainless steel.
Odoo 20 adds one useful change. Our Odoo 20 Sales release notes show that the Sales Price of a single variant can now be edited directly in the Product Variants list. In Odoo 19 it could change only through the template price and the attribute extras.
Cost is stored per variant, so a heavy-motor variant can carry a higher cost than the base one. Our guide to Odoo manufacturing cost accounting explains how work order costs reach that figure.
How does one Odoo variants BOM cover every configuration?
One Odoo bill of materials can serve all variants because each component line has an Apply on Variants field that limits it to chosen attribute values. Lines left blank are used in every variant.
Odoo's guide to BOMs for product variants gives the matching rule: values of the same attribute work as OR, and values of different attributes work as AND. The illustrative conveyor BOM below shows it.
| Component | Apply on Variants | Used when |
|---|---|---|
| Frame rails | Blank | Every variant |
| 0.75 kW motor | Motor: Standard | Standard motor is chosen |
| 1.5 kW motor | Motor: Heavy | Heavy motor is chosen |
| PVC belt | Belt: PVC | PVC belt is chosen |
| Stainless side guard | Width: 800, Width: 1000, Finish: Stainless | Width is 800 or 1000, and finish is stainless |
This is what people usually mean by an Odoo dynamic BOM: one list that resolves itself per order. A few setup rules keep it reliable.
- Product Variant field: leave it empty on the BOM; it is only for a BOM dedicated to one variant.
- Settings: enable Variants in the Inventory settings, then show the Apply on Variants column from the column menu.
- Consumed in Operation: set it on variant-specific components so each one is issued at the right step.
- By-products: they follow the same matching logic as components.
- Kits: use a kit BOM for option packs that ship unassembled with the machine.
Quantities are fixed per line, so a quantity that depends on an option needs one line per value. Newer versions also seem to accept Never attributes on BOM lines, as one Odoo forum user noticed. Test that on your version first.
Can routing and work orders change per variant in Odoo?
Yes, each operation on an Odoo BOM has its own Apply on Variants field, so a work order appears only for the variants that need it. Odoo's bill of materials documentation says to leave it blank for operations that apply to all variants.
In the conveyor example, powder coating would apply to Finish: Painted only, and a load test to Motor: Heavy only. Cutting, welding and assembly stay blank and run for every order.
Two limits matter. An operation's duration is set per operation, not per attribute value, so a longer weld for a longer frame needs a separate operation line. If a variant needs a completely different routing, give it its own BOM through the Product Variant field.
How does a configured sales order become a manufacturing order?
With the Replenish on Order (MTO) route on the product, confirming the sales order creates a manufacturing order for the exact variant, linked to the order by a smart button. The MO lists only the components and operations of that variant.
This is the Odoo make to order flow, and the Replenish on Order documentation adds three points worth knowing.
- Always created: an MO is created on confirmation even if the variant is in stock.
- Do not cancel: a canceled MO is not regenerated, and a manual one cannot be linked back to the sales order, so edit it instead.
- Odoo 19 routes: the Buy and Manufacture routes are hidden on the product form by default and applied automatically.
Odoo 20 helps where engineering wants a look first. Per our Odoo 20 Manufacturing release notes, a new Auto Confirm Production option on the Manufacturing operation type lets MTO create draft MOs that you confirm yourself.
Components still need their own planning. Long lead-time parts used only by some variants are the usual cause of late orders, so pair this with reorder rules and MRP shortage alerts.
What changed for configure to order between Odoo 19 and Odoo 20?
Odoo 20 keeps the same variant and BOM model as Odoo 19 and adds tools that make large option BOMs easier to maintain. Nothing in it forces a redesign of a working setup.
| Area | Odoo 19 | Odoo 20 |
|---|---|---|
| Variant sales price | Template price plus attribute extras | Also editable per variant |
| MOs created by MTO | Created as confirmed | Draft or confirmed, set per operation type |
| Comparing BOMs | Open each BOM | Compare BoMs pivot from the BOM list |
| Replacing a component | BOM by BOM | Used In lists the BOM lines, with multi-edit |
| Fixed overhead per unit | No dedicated BOM field | Extra Cost field on the BOM |
The Used In change matters most for configure to order. A master BOM for a configurable product can run to hundreds of lines, and swapping one obsolete part across several BOMs used to mean opening each one.
Where does standard Odoo configure to order stop?
Standard Odoo configure to order stops at fixed option menus: it does not calculate dimensions, price by formula or handle options that depend on several other choices. Past that point you need customization.
Users hit this wall often. In an Odoo forum thread on customizable BOMs, the answer was that variants are "only viable if you have a fixed number of ways your BOM can be configured". The fallback offered was a blank BOM and a draft MO edited by hand.
| Need | Standard Odoo | Typical approach |
|---|---|---|
| Free dimensions, such as cut to length | Free text on a custom value, no calculation | Custom fields on the order line that drive quantities |
| Formula pricing, such as per square meter | Template price plus extras | Custom price computation on the order line |
| Dependent rules across three or more options | Exclusions between pairs of values | Custom rule checks in the configurator |
| Component quantity that varies by option | Fixed quantity per BOM line | One line per value, or a computed quantity |
| Drawing or data sheet per configuration | Worksheets on operations | Custom PDF report built per order |
Studio can add fields and approvals, but calculation logic needs a Python module. Our comparison of Odoo Studio vs custom development covers where that line sits.
Hosting matters too. Custom modules do not run on Odoo Online, so a custom configurator needs Odoo.sh or your own servers on the Custom plan, listed on the Odoo pricing page at US$61.00 per user a month billed yearly in the US.
Which industries use Odoo configure to order?
Configure to order fits any manufacturer that sells one product family in many option combinations. The pain differs by industry, and so does the Odoo setup.
| Industry | Pain or cost driver | Odoo approach | How iVentureTeam helps |
|---|---|---|---|
| Machinery and equipment | Motors, voltages and guards re-keyed from spreadsheets | Dynamic variants, exclusions, variant operations | Model options, build the master BOM |
| Furniture and joinery | Sizes, fabrics and finishes multiply SKUs | Never attributes for finish, MTO route | Cut the variant count, add dimension logic |
| Electrical panels and enclosures | Component choice depends on rating | Apply on Variants on components | Add rule checks beyond pair exclusions |
| Packaging and print | Price depends on size and print blocks | Custom values, custom price logic | Build pricing into the order line |
| Vehicles and trailers | Accessory packs and regional rules | Optional products, kits | Set up option packs and documents |
How do you roll out configure to order in Odoo?
Roll out configure to order one product family at a time, and settle the attribute design before any data is loaded. These are the steps we follow.
- Pick one family: start with the product line that has the most orders and the most re-keying.
- List every option: mark each one as stock-relevant or informational.
- Set creation modes: choose Dynamically or Never per attribute, since the mode cannot be changed later.
- Enter exclusions: capture what sales and engineering already know cannot be built.
- Build one BOM: add Apply on Variants to components and operations.
- Replay real orders: run past orders from quote to MO and check components, work orders and cost.
- Load and control: use Odoo's product import template, then manage BOM changes through PLM engineering change orders.
For budget, our published Odoo implementation cost ranges put a mid-size project at $9k to $27k over 8 to 14 weeks. Custom configurator logic is scoped on top. The free Odoo project estimate tool gives a first figure.
How iVentureTeam helps with Odoo configure to order

iVentureTeam designs the option model first, then builds the Odoo configurator, BOM and routing around it. We have delivered 150+ ERP projects across 35+ countries with 40+ Odoo specialists over 13+ years.
- Option workshop: attributes, values, creation modes and exclusions agreed with sales and engineering.
- Variant-aware BOM and routing: one master BOM per family with components and operations tied to values.
- Custom configurator logic: dimensions, formula pricing and dependent rules through our Odoo customization services.
- Data load: attributes, products, BOM lines and vendor prices imported and checked.
- Wider plant scope: planning, quality and costing, as covered in our ERP for manufacturing guide.
Odoo configure to order case study: Chetan Plastics
A plastics-printing manufacturer needed pricing logic that no option menu could hold, so we built it into the Odoo order line. Chetan Plastics is based in Ahmedabad, India.
The company ran Sales, Purchase, Inventory, Manufacturing and CRM from a shared Excel file. Custom print jobs with dynamic block-based pricing were calculated by hand in a separate spreadsheet, and quotations were re-keyed for repeat orders.
We rebuilt the Excel block calculator inside sales and purchase order lines, with auto-updating calculation notes for traceability. Quotation templates now pre-fill job lines, and each CRM job links down to individual sales order lines.
The phased rollout took 16 weeks and connected 6 core modules, with 10 workflow areas custom-built. Read the Chetan Plastics Odoo manufacturing customization case study.
The bottom line on Odoo configure to order
Odoo runs configure to order well when your options form a fixed menu, and it needs targeted custom work when options depend on formulas or free dimensions. The attribute design decides which side you land on.
Use Dynamically for options that change stock, Never for the rest, one BOM with Apply on Variants, and MTO to link the order to production. Replay real orders before go-live, and customize only what those tests prove is missing.
Ready to map your product options in Odoo?

Send us one product family and its option sheet, and we will show how it fits Odoo variants and where custom logic is needed. Request a configure to order review, call +91-90235-15208, or email business@iventureteam.com.
Frequently Asked Questions
Does Odoo support configure to order manufacturing?
+
Yes. Odoo covers it with product attributes and variants, the sales product configurator, a BOM with Apply on Variants lines and the Replenish on Order route. There is no separate app, so the result depends on how you set up these four pieces.
What is the difference between configure to order and make to order?
+
Make to order builds a standard item after the order arrives. Configure to order also lets the customer choose from predefined options, so the product, BOM and routing are resolved per order from rules set in advance.
Do I need one BOM per product variant in Odoo?
+
No. One BOM can cover all variants of a product. Each component and operation has an Apply on Variants field, and lines left blank apply to every variant. A separate BOM per variant is only needed for very different builds.
What does Dynamically mean for Odoo product variants?
+
It means a variant is created only when that combination is added to a sales order. Your product list then holds only the configurations customers have ordered, not every possible combination.
Is there a limit on product variants in Odoo?
+
There is a default limit of 1,000 new variants generated in one go when attributes are set to Instantly. Dynamic attributes avoid it because variants are created one at a time when sold.
Can the Odoo product configurator calculate prices by size?
+
Not as standard. A variant price is the template price plus fixed extras per attribute value. Pricing per meter, per square meter or by formula needs a custom module on the order line.
Can different variants have different work orders in Odoo?
+
Yes. Operations on the BOM have an Apply on Variants field, so steps such as painting or testing appear only for the variants that need them. Operations left blank run for all variants.
Does the Odoo product configurator work on Odoo Online?
+
The standard configurator, variants and variant BOMs work on Odoo Online. Custom configurator logic written as a Python module does not, because Odoo Online does not accept custom modules. That needs Odoo.sh or on-premise.
Free manufacturing walkthrough
Planning production in Odoo?
Our manufacturing consultants map your BoMs, routings and planning in Odoo and show what to configure first.
Free, with no obligation. A senior consultant replies within 12 business hours.
Free Odoo tools
All tools- Odoo Health CheckVersion, modules, findings and upgrade cost
- Odoo App SelectorWhich apps you need, by industry
- Odoo Project EstimateIndicative cost and timeline in minutes
- Odoo Implementation Cost CalculatorImplementation cost and timeline, in minutes
- Odoo Migration Cost CalculatorVersion jump or legacy ERP, priced in minutes
Continue reading
Spreadsheets After ERP Implementation: Why Odoo Users Keep Excel
Why teams keep Excel after an Odoo go-live, the hidden risks of shadow spreadsheets, and a fix plan using Odoo 20 Spreadsheet, Dashboards and imports.
Manufacturing ERP in Saudi Arabia and Egypt: Odoo Cost and Rollout
Manufacturing ERP in Saudi Arabia and Egypt: Odoo costing, ZATCA Phase 2, Egypt ETA e-invoicing, multi-company setup, budget ranges and rollout plan.
Odoo ERP Implementation in Saudi Arabia: ZATCA, Arabic, Cost, Timeline
Odoo ERP implementation in Saudi Arabia: Odoo 19 vs 20, ZATCA Phase 2 onboarding, Arabic invoices, GOSI and WPS payroll, hosting, cost and timelines.
