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.
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. A flat, single-level BOM loses that structure, and with it the costing and planning of each stage. A multi-level BOM represents the product the way it is built, so the plan still holds when a sub-assembly changes.
A multi-level BOM is not a complication to avoid: it is the real structure of your product. Build it right and ERPNext plans material, schedules sub-assembly production and costs each level. I lead ERPNext and Frappe programmes at MithTech, a team of Frappe specialists 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. On the parent's item row, the sub-assembly's BOM appears in the BOM No field; that link is what makes it a level rather than a raw material. 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.
- Decide make, subcontract or buy for each sub-assembly: the item's Default Material Request Type (Manufacture or Purchase) and the Production Plan's Manufacturing Type per row tell ERPNext which.
- Submit and verify the rolled-up cost on the parent BOM, checking each level's cost is correct.
Skimmable summary: build bottom-up: sub-assembly BOMs first, then the parent BOM linking them, a make-or-buy decision per sub-assembly, then check the rolled-up cost.
How does cost roll up in a multi-level BOM?
Each sub-assembly's cost, its own material plus operations, is carried into the parent BOM as the rate 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 real 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 real product cost.
Should I make or buy each sub-assembly?
You decide per sub-assembly, and the choice changes how ERPNext plans it. A manufactured sub-assembly gets its own work order and consumes raw material; a subcontracted one goes to a job worker; a bought one is purchased as a component and consumed by the parent's work order. If you never make it yourself, tick "Do Not Explode" on the parent's BOM row so planning treats it as a component.
The same product can move between these as your sourcing changes. In the Production Plan, each sub-assembly row has a Manufacturing Type (In House, Subcontract or Material Request), defaulted from the item, which decides what is made, sent out or bought. Getting these right is what makes material and production planning accurate.
Skimmable summary: make, subcontract or buy per sub-assembly. Manufactured ones get their own work order; subcontracted ones go to a job worker; bought ones are purchased. The Production Plan's Manufacturing Type per row decides which.
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 simple once found: give every manufactured sub-assembly a submitted, active BOM; avoid circular references; and update BOM costs after material prices change so the roll-up stays current. When a parent BOM's cost looks wrong, the cause is usually one level down: an incomplete or outdated sub-assembly BOM.
Skimmable summary: the usual error is a sub-assembly with no active BOM, which blocks cost roll-up and planning; others are circular references, unsubmitted BOMs and stale sub-assembly costs. A wrong parent cost is usually caused one level down.
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. The parent's row links each sub-assembly's BOM, and ERPNext rolls that sub-assembly's cost up into the parent. Decide make, subcontract or buy for each sub-assembly so planning knows what to do with it.
+Does ERPNext support nested sub-assemblies?
Yes. ERPNext supports many 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 built. The BOM Explorer report shows the whole tree.
+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. Manufactured sub-assemblies get their own work orders and consume raw material; bought ones are purchased as components; subcontracted ones go to a job worker. You can change a sub-assembly between them as your sourcing changes, and the Production Plan plans 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 usually caused one level down. Saleable scrap or by-products off the same BOM also change the per-unit number; see the scrap, wastage and by-products guide. The ERPNext platform page covers how we work with ERPNext more widely.
Comments & ratings
No comments yet. Start a new discussion.
Manoj · Published on 11 July 2026
Worked with us? Leave a Google review