A multi-level bill of materials in NetSuite is a BOM whose components include other assemblies, each with a BOM of its own. Get the structure right and planning, costing, and the shop floor all work from one definition of the product. Get it wrong and you spend the next two years fighting work orders that consume the wrong things, sub-assemblies that never get built, and costs that do not roll up. This guide covers how to set multi-level BOMs up, how to decide between an assembly item and a phantom, and the mistakes we see most often when we open a manufacturer’s NetSuite account for the first time.
How multi-level BOMs work in NetSuite
NetSuite builds levels through nesting. A finished good’s BOM lists its components; if one of those components is itself an assembly item with its own BOM, that is the second level, and so on. Each assembly is built on its own work order, and the parent’s work order consumes it as a single line. There is no separate multi-level object to configure. The structure is the sum of the item records and the BOMs attached to them.
With the Advanced BOM feature enabled, BOMs are their own records with BOM revisions: dated versions of the component list that can be scheduled with effective dates, so an engineering change takes effect on a given day rather than being edited live under open work orders. One BOM can be assigned to several assembly items, which matters when the same structure is sold under different SKUs.
Setting one up
- Create the lowest-level items first. Raw materials and purchased parts as inventory items, with unit of measure, supply type, lead time, and costing method set before anything references them.
- Create the sub-assemblies as assembly items, then a BOM for each with a revision listing its components and quantities per one unit of output. Set the supply type, which is covered below, because this is where most structures go wrong.
- Create the finished good as an assembly item and give it a BOM whose components include the sub-assemblies. NetSuite now has a two-level structure.
- Add routings if you cost labor and machine time. Each level can have its own routing, and the operation steps determine where each component is consumed.
- Release a test work order for the finished good. Confirm the sub-assemblies appear as single lines, that planning proposes their work orders, and that the cost rolls up the way finance expects.
For formula-based products, where quantities scale with batch size rather than per unit, we set the structure up in ProShop’s formula master instead of a fixed-quantity BOM, so scaling, substitutions, and yield are recorded per run. The two approaches coexist: discrete sub-assemblies on standard BOMs, formulas where the process is a recipe.
Assembly item or phantom?
This is the decision that shapes everything else, and the rule is simple.
Use an assembly item when you stock the intermediate. It is built on its own work order, received into inventory at its own cost, counted, and consumed later by whichever parent needs it. Sub-assemblies made in batches ahead of demand, shared across several finished goods, or held as spares belong here.
Use a phantom when the work-in-progress moves through quickly. A phantom is a grouping of components that is never stocked: when the parent work order is created, the phantom explodes and its components land directly on the parent. There is no separate work order, no receipt, and no inventory record for the phantom itself. Wiring looms built and fitted in the same shift, a kit of fasteners, or a sub-assembly that only ever exists for the ten minutes between two operations are phantoms.
The cost of getting it backward is real in both directions. Make a phantom an assembly and you create work orders, receipts, and inventory transactions for something nobody ever puts on a shelf, and the shop floor stops recording them. Make an assembly a phantom and you lose the ability to build ahead, count what you hold, or see its cost.
The mistakes we see most
1. The source is not set, or set wrong
Every item in the structure needs a supply source, and it is the setting most often left at default. An inventory item can be sourced from stock or by purchase order. An assembly can be sourced by work order, by purchase order, or from stock. Planning, order generation, and the shop floor all follow that setting. A sub-assembly marked as purchased will never generate a work order however many are needed; one marked as built by work order that is actually bought from a supplier will fill the planner’s screen with work orders nobody can run. Review the source on every assembly level before go-live, and again whenever a make-or-buy decision changes.
2. Phantom and assembly assigned by habit rather than by flow
Structures copied from a previous system, or from an engineering BOM, tend to carry over every intermediate as an assembly because that is how the drawing was organized. The test is not the drawing; it is whether the intermediate is ever held. See the section above.
3. Flat BOMs with hundreds of lines
The opposite mistake: every part on one level, no sub-assemblies at all. It makes the first work order easy to create and every later change painful, because a shared component that changes has to be edited on every finished good that uses it. Levels exist so that a change is made once.
4. Units of measure that disagree
A component bought by the kilogram, consumed by the gram, and listed on the BOM in pieces will cost wrongly at every level. Set the unit-of-measure schedule on the item first, and make the BOM quantity use the consumption unit.
5. Editing the live revision
Changing quantities on a revision that open work orders reference changes what those work orders consume. Create a new revision with an effective date instead, so in-flight orders finish on the old structure and new ones pick up the change.
6. No scrap or yield on the components
If a component is consumed at 1.05 per unit because five percent is always lost, and the BOM says 1.00, the work order backflushes too little, inventory drifts positive on paper, and eventually goes negative in practice. Component yield belongs on the BOM. For batch and formula processes, actual yield recorded per run is what ProShop is for.
BOMs and the rest of the system
A well-structured BOM is the input everything else depends on. Demand and supply planning generate the right work orders and purchase orders only if sources and levels are right. Scheduling in FactorySync places each level’s work order against capacity in the right sequence. Project-based builds in Project2Prod roll the cost of every level up to the customer’s job. And the negative inventory that so many manufacturers fight is, more often than not, a BOM problem wearing an inventory disguise. Reviewing BOM structure is one of the first things Consule does in a NetSuite optimization for manufacturers.
Frequently asked questions
What is the difference between an assembly item and a phantom in NetSuite?
An assembly item is a stocked sub-assembly: it is built on its own work order, received into inventory at its own cost, and consumed by the parent as a single component. A phantom is a grouping only: its components explode into the parent work order and the phantom itself is never stocked or costed. Use an assembly when the intermediate is held; use a phantom when it is built and consumed in the same run.
Do I need the Advanced BOM feature for multi-level BOMs?
For BOMs with revisions, effective dates, and the ability to share one BOM across assemblies, yes: Advanced BOM adds BOM and BOM revision records. Without it, components live on the assembly item record itself, which works for simple structures but makes revision control and multi-level maintenance harder.
How does NetSuite decide whether to build or buy a sub-assembly?
From the supply type and related settings on the item record. An assembly can be sourced by work order, by purchase order, or from stock; an inventory item by purchase order or from stock. Planning and order generation follow that setting, so a sub-assembly marked as purchased will never generate a work order, however many are needed.
How do I handle formula-based products, where quantities scale with batch size?
A standard BOM stores fixed quantities per unit of output. Formula manufacturers usually need quantities that scale to the batch, with substitutions and yield recorded per run. Consule’s ProShop adds a formula master to NetSuite for exactly that, alongside the standard BOM for discrete assemblies.
Not sure your BOMs are structured the way NetSuite expects? Talk to Consule. A structure review takes days and saves months.