A multi-level BOM in ERPNext is a bill of materials that contains sub-assemblies, each with its own BOM, nested inside a parent product. You build it by creating a BOM for every sub-assembly first, then referencing those sub-assemblies as items in the parent BOM. ERPNext rolls the cost of each level up into the finished product automatically.
Most real products are not made in one step. A machine has sub-assemblies; a piece of furniture has a frame and a finish; an electronic device has boards and housings. Modelling these as a flat, single-level BOM loses the structure — and the accurate costing and planning that come with it. Multi-level BOMs are how ERPNext represents products the way they are actually built.
A multi-level BOM is not a complication to avoid — it is the honest structure of your product. Build it right and ERPNext plans material, schedules sub-assembly production, and costs each level correctly on its own. I am Manoj, an ERPNext and Frappe implementation consultant at MithTech in Bengaluru, and this guide walks through the setup.
How do I create a multi-level BOM in ERPNext?
You create a multi-level BOM in ERPNext by building a BOM for each sub-assembly first, then creating the parent BOM and adding those sub-assembly items to it — ERPNext recognises an item as a sub-assembly when that item has its own active BOM. This bottom-up order matters, because the parent can only roll up a sub-assembly's cost if the sub-assembly's BOM already exists.
Here is the setup I use on a client system.
- Create BOMs for the lowest-level sub-assemblies first, listing their raw materials and operations.
- Create BOMs for any intermediate sub-assemblies, referencing the lower-level ones as items.
- Create the parent (finished-goods) BOM, adding raw materials and the sub-assembly items.
- Mark each sub-assembly as manufactured or purchased, so ERPNext knows whether to make or buy it.
- Submit and verify the rolled-up cost on the parent BOM, checking each level's cost is correct.
Skimmable summary: Build bottom-up — create sub-assembly BOMs first, then the parent BOM referencing them, mark each sub-assembly make-or-buy, and verify the rolled-up cost. ERPNext treats an item as a sub-assembly when it has its own active BOM.
How does cost roll up in a multi-level BOM?
Cost rolls up in a multi-level BOM when each sub-assembly's cost — its own material plus operations — is carried into the parent BOM as the value of that sub-assembly item. ERPNext calculates each level's cost from its BOM and passes it upward, so the finished product's cost is the sum of all raw materials and operations across every level, not just the top one.
This is the main reason to model multi-level rather than flat. A flat BOM that lists only raw materials misses the operation cost of building each sub-assembly, understating the true product cost. Correct roll-up depends on every sub-assembly having an accurate BOM with material and operation cost — which ties directly into finished-goods costing.
Skimmable summary: Each sub-assembly's material-plus-operation cost carries into the parent as that item's value, and ERPNext sums every level into the finished cost. A flat BOM misses sub-assembly operation cost, understating the true product cost.
Should I make or buy each sub-assembly?
You decide make-or-buy per sub-assembly in ERPNext by marking whether the item is manufactured in-house or purchased from a supplier, and this choice changes how ERPNext plans it. A manufactured sub-assembly generates its own work order and consumes raw material; a purchased one is procured as a component and simply consumed by the parent's work order.
The same physical product can be modelled either way as your sourcing changes — bring a sub-assembly in-house and switch it to manufactured, or outsource it and switch it to purchased or subcontracted. ERPNext's Production Plan reads these settings to decide what to make, buy, or subcontract. Getting the make-or-buy flags right is what makes material and production planning accurate.
Skimmable summary: Mark each sub-assembly manufactured or purchased — manufactured ones get their own work order and consume material; purchased ones are procured as components. The Production Plan reads these flags to decide what to make, buy, or subcontract.
What are the common multi-level BOM errors in ERPNext?
The most common multi-level BOM error in ERPNext is a sub-assembly item that has no active BOM, so ERPNext cannot roll up its cost or plan its production. Other frequent issues are circular BOM references (a BOM that indirectly contains itself), un-submitted sub-assembly BOMs, and stale sub-assembly costs that never refreshed after material prices changed.
Fixing these is usually straightforward once identified: ensure every manufactured sub-assembly has a submitted, active BOM; avoid circular references; and re-cost BOMs after material price changes so the roll-up stays current. When a parent BOM's cost looks wrong, the cause is almost always one level down — an incomplete or outdated sub-assembly BOM.
Skimmable summary: The top error is a sub-assembly with no active BOM, blocking cost roll-up and planning; others are circular references, un-submitted BOMs, and stale sub-assembly costs. A wrong parent cost is almost always caused one level down.
Complex product? Let's model the BOM properly.
I set up multi-level BOMs, routing, and costing in ERPNext so complex products plan and cost correctly at every level. See the ERPNext product page or the ERPNext manufacturing guide.
Frequently asked questions
How do I create a multi-level BOM in ERPNext?
Build it bottom-up: create a BOM for each sub-assembly first, then create the parent BOM and add those sub-assembly items to it. ERPNext treats an item as a sub-assembly when it has its own active BOM, and rolls that sub-assembly's cost up into the parent. Mark each sub-assembly as manufactured or purchased so planning knows whether to make or buy it.
Does ERPNext support nested sub-assemblies?
Yes. ERPNext supports multiple levels of nested sub-assemblies — a parent BOM can contain sub-assemblies, which themselves contain lower-level sub-assemblies, and so on. Each level has its own BOM, and ERPNext rolls cost and material requirements up through all of them. This lets you model complex products such as machinery and electronics the way they are actually built.
How does ERPNext roll up cost in a multi-level BOM?
Each sub-assembly's cost — its material plus operations — is carried into the parent BOM as that item's value, and ERPNext sums every level to produce the finished-goods cost. This means the final cost includes the operation cost of building each sub-assembly, not just the raw materials. Correct roll-up requires every sub-assembly to have an accurate, submitted BOM.
Can I make some sub-assemblies and buy others?
Yes. You set each sub-assembly as manufactured or purchased in ERPNext. Manufactured sub-assemblies generate their own work orders and consume raw material; purchased ones are procured as components. You can change a sub-assembly between make and buy as your sourcing changes, and the Production Plan will plan it accordingly.
Why is my multi-level BOM cost showing zero or wrong?
Usually because a sub-assembly item has no active BOM, so ERPNext cannot roll up its cost, or because a sub-assembly BOM was never submitted or is out of date. Check that every manufactured sub-assembly has a submitted BOM with current material and operation costs, and look for circular references. A wrong parent cost is almost always caused by an issue one level down.
About the author
Manoj is an ERPNext and Frappe implementation consultant at MithTech in Bengaluru. He models multi-level BOMs, routing, and costing in ERPNext so Indian manufacturers of complex products plan and cost accurately at every level.