Skip to main content

Overview

MBOM imports let you define multi-level part structures in a single CSV — from top-level assemblies down to individual components. ION supports two ways to describe how parts are nested: Depth notation and Level notation. ION automatically detects which one you are using based on the first column header in your CSV.

Import options

OptionDefaultDescription
Auto-create missing partsOnWhen enabled, any parts in the import that do not already exist in the Parts Library are created automatically. When disabled, referencing a part that does not exist causes a validation error.
Always create new versionOnWhen enabled, a new mBOM version is always created. When disabled, the latest version is updated in place if it is a draft; otherwise a new version is created.
Validation onlyOffRun validation without committing changes. Useful for checking a file before a real import.

Columns

ColumnRequiredDescription
depth or levelYesThe first column in your CSV. Determines how the part hierarchy is structured. See sections below.
part_numberYesThe part number for this row.
revisionYesThe part revision.
quantityYesHow many of this part are needed in the parent assembly.
substitutesNoAlternative parts, formatted as part_number[revision];part_number[revision]. Example: BOLT-300-ALT[A];BOLT-300-METRIC[B].
made_on_assemblyNoWhether this part is fabricated as part of the parent assembly. Boolean field (see accepted values).
reference_designatorsNoReference designator strings for the component.
Ensure part numbers and revisions match existing records exactly. Part matching is case-insensitive.

Depth notation

Depth notation describes your BOM structure by indenting parts one level at a time, similar to how you might indent items in an outline. The top-level assembly is depth 1, its direct components are depth 2, their sub-components are depth 3, and so on. To move back up the tree and start a new branch, simply return to a lower depth number. Rows must be listed in the order they appear in the assembly — each component must come after the assembly it belongs to. Example: An assembly (ASSEMBLY-100) contains a bracket and a panel. The bracket itself requires four bolts.
depthpart_numberrevisionquantity
1ASSEMBLY-100A1
2BRACKET-200B2
3BOLT-300A4
2PANEL-400A1
You cannot skip depth levels — for example, jumping from depth 1 directly to depth 3 is not allowed. Each component must be listed directly under its parent assembly.

Level notation

Level notation uses a numbering scheme (e.g., 1, 1.1, 1.1.1) to explicitly identify where each part sits in the assembly tree. This is similar to how work breakdown structures or section numbering works — the number itself tells you the full path from the top-level assembly down to the component. Unlike Depth notation, rows can appear in any order because the level value fully defines each part’s position in the hierarchy. ION sorts and organizes the structure for you. Example: The same assembly as above, with rows intentionally listed out of order to show that ordering does not matter.
levelpart_numberrevisionquantity
1ASSEMBLY-100A1
1.2PANEL-400A1
1.1BRACKET-200B2
1.1.1BOLT-300A4
Here, 1.1 (BRACKET-200) and 1.2 (PANEL-400) are both direct components of 1 (ASSEMBLY-100), and 1.1.1 (BOLT-300) is a sub-component of the bracket — regardless of the row order in the CSV.
Every parent level must exist somewhere in the file. For example, you cannot define 1.1.1 without also having a 1.1 row. However, the rows do not need to be in any particular order.

Cycle detection

ION automatically detects circular references in your MBOM. If assembly A contains part B and part B also contains assembly A (directly or through any chain of intermediate parts), the import will fail with a validation error identifying the cycle. This check also applies to substitute parts. For general import behavior, empty cell handling, and error reporting, see Importers.