Creating an assembly BOM
Creating an assembly BOM (defines a subassemblySubassemblyA reusable assembly block that composes into bigger bills: define it once, include it in any bill of materials, and Assemblified expands it into its own components at execution time. Its definition is an assembly BOM. Read more → ) is a two-step job: create the bill, then give it components.
On this page
Section titled “On this page”- Creating one by hand
- Adding materials
- Nesting other assembly BOMs
- Recording what is already on the shelf
- Duplicating an existing assembly BOM
- Creating or updating many at once from a spreadsheet
- Deleting one, and what blocks it
Creating one by hand
Section titled “Creating one by hand”-
Click Assembly BOMs in the app navigation. That opens the assembly BOMs list.
-
Click Create. The dialog is titled Create an assembly BOM and asks for three things:
- Name — required. Pick something descriptive (“Candle base”, “Wick assembly”).
- SKU — optional, and yours to define. It is not bound to anything in Shopify, and it is what the importer and the exporter use to find the bill.
- Description — optional free-form notes.
Confirm with Create. The bill is created empty, with both behaviour settings off and no pre-assembled stock, and you land on its detail page.
-
Open the Materials tab. This is where the BOM lives: materials, nested assembly BOMs and additional costs, in the order they are costed.
-
Add materials. In the Components card, use Add materials. The menu offers four sources: Shopify materials, Virtual materials, New virtual material, and Import from CSV/XLSX. Each row then carries:
- Quantity — how many of this material one unit of the assembly consumes.
- Waste — an optional percentage, applied when the line is consumed.
- Location — an optional override. Left empty, the line is consumed from the order’s location (or from your default location, when multi-location adjustments are off).
The row also shows Available, Cost and Total, and its
⋯menu offers Edit notes and Remove material. -
Optionally nest other assembly BOMs. Assembly BOMs can contain assembly BOMs. In the Subassemblies card, use Add subassembly and pick from the bills you already have. Set the quantity; the picker hides anything that would create a loop (see below).
-
Optionally add additional costs. The Additional costs card on the same tab attaches cost rates (labour, packaging, overhead) to the bill. Additional costs are part of the Enhanced plan.
-
Save. The page’s save bar appears as soon as anything on the Materials tab is dirty, and it blocks navigation until you save or discard.
The assembly BOM is now ready. Reference it from any finished good’s Subassemblies card, or from another assembly BOM.
The Overview tab carries a Structure card: a preview of this bill’s own component graph with nested assemblies opened out. Its Open action takes you to the full canvas, where the same BOM can be read and edited as a graph. See Structure panel.
Nesting other assembly BOMs
Section titled “Nesting other assembly BOMs”Assembly BOMs can contain assembly BOMs, to any depth. Add them from the Subassemblies card on the Materials tab, with a quantity per nested bill, exactly as you would a material.
What you can’t do is close a circle. An assembly BOM cannot contain itself, directly or through any chain of nested bills, and a save that would close such a loop is refused. The message names the two bills and the chain between them, so you can see which link to remove.
The refusal applies however you make the nesting: the Materials tab, the structure canvas, a bulk material edit or a version restore. The pickers also hide the bills that would be refused, so in normal use you never reach the message.
Recording what is already on the shelf
Section titled “Recording what is already on the shelf”If you already have built units of the assembly sitting on a shelf, record them from the Overview tab. The Stock by location card has one row per location; the pencil beside a location’s pre-assembled figure opens the Quick build dialog already set to Correction (count) for that location.
A correction moves no component stock, and it doesn’t take the count below zero. The full set of reasons Quick build offers (build, correction, the two disassembly reasons, write-off) is covered on Pre-assembled stock.
Every pre-assembled change belongs to a location. If you don’t name one and your store has no default location set, the change is refused rather than applied somewhere you didn’t choose. Set a default location in Settings if you run a single location.
Duplicating
Section titled “Duplicating”If an existing assembly BOM is almost what you want, duplicate it.
- From the list, open the row’s
⋯menu and choose Duplicate. - Give the copy a name, and optionally a SKU. The copy starts without a SKU unless you give it one.
- Confirm with Duplicate.
The copy keeps the whole BOM (materials with their quantities, waste and location overrides; nested assembly BOMs; additional costs) and it keeps the per-location rules and both behaviour settings, because those describe the BOM rather than its stock. What the copy does not inherit is stock: it starts with no pre-assembled units at any location. Its cost is recalculated from the copied BOM right after it is created.
Creating many at once from a spreadsheet
Section titled “Creating many at once from a spreadsheet”For catalogue migration, use the spreadsheet importer instead of the create dialog. Open More actions → Import from CSV/XLSX on the assembly BOMs list. The same import also updates assembly BOMs you already have: their components, their price and both behaviour settings. Pre-assembled stock is not part of this import: to set it for many assembly BOMs at once, use Importing pre-assembled quantities.
The dialog is titled Import assembly BOMs from a spreadsheet, and it wants one row per component: it groups the rows by assembly and creates (or updates) one assembly BOM per group.
-
Upload. Pick a CSV or XLSX file. The dialog reads it in the browser and shows you the headers it found.
-
Map the columns. Tell it which column is the assembly name, which is the SKU, which is the material, the quantity, and so on. You can come back to this later with Change mapping without uploading the file again.
-
Review. One row per assembly BOM, with badges for anything wrong. You can remove an assembly from the run, or use Exclude the blocked ones to drop every blocked assembly BOM in one go. There is no per-cell editing here on purpose: fix the data in the file or fix the mapping, then re-review.
-
Set the creation settings and create. The import runs in batches, with a progress bar and a Stop button. If a batch fails the run stops rather than carrying on, and Resume picks up from where it stopped rather than from the beginning.
-
Read the result. The final screen names every assembly BOM that was created and every one that failed, with its reason.
The columns
Section titled “The columns”Every row is one component of one assembly BOM. Use one way of naming things throughout the file: assembly and material by SKU, by ID, or by name.
| Column | Required | Blank means |
|---|---|---|
| Sub-Assembly SKU, Sub-Assembly ID or Sub-Assembly Name | One of them | Which assembly BOM the row belongs to. Rows that share it become one bill. |
| Sub-Assembly Description | No | No description. On an update, a blank description clears the stored one. |
| Material SKU, Material ID or Material Name | One of them, the same kind as the assembly column | The component. |
| Material Type | No | A material. The other value is Subassembly, for nesting an assembly BOM. |
| Quantity | Yes | — |
| Waste % | No | No waste. |
| Location | No | No location override. An unknown location is cleared, and the component is imported without one. |
| Notes | No | No notes. |
| Selling price | No | New bill: 0. Existing bill: the price is left as it is. A number, 0 or more. |
| Keep assembled on return | No | New bill: off. Existing bill: left as it is. Yes or no. |
| Only consume pre-assembled | No | New bill: off. Existing bill: left as it is. Yes or no. |
The last three columns describe the assembly BOM, not the component, so a bill’s value is simply repeated on each of its rows. It is enough to fill it in on one row and leave the others blank. The unit cost is not a column: it is always calculated from the components.
Assembly BOMs that already exist
Section titled “Assembly BOMs that already exist”The importer looks up which assembly BOMs in the file you already have, matched on the column the file uses (SKU, ID or name), and badges them Already exists. Assembly BOMs that already exist is the decision:
| Option | What happens |
|---|---|
| Create new only (skip existing) | Rows that match an assembly BOM you have are left alone. |
| Update existing only | Only the matching assembly BOMs are written; new ones are ignored. |
| Create new and update existing | Both. |
Updating replaces that bill’s components with the ones in the file. Its price and its two behaviour settings change only where the file has a value for them.
If nothing in the file matches an assembly BOM you already have, the choice isn’t offered: every bill is created new.
Deleting one
Section titled “Deleting one”Delete from the row’s ⋯ menu, from the bulk bar, or from More actions → Delete on the detail page. Every
route opens the same dialog, and the dialog previews what would be deleted before you confirm: the component
references, the nested assembly references, the additional-cost links, the pre-assembled units on the shelf and
the group memberships.
Two things block a delete:
- Used by other BOMs. If a finished good or another assembly BOM references the bill, the delete is refused outright and the dialog names what references it. There is no override. Remove the references first.
- An active reservation holds stock. This one can be overridden: tick Release the reservations and delete, and the reservations are released before the delete. If any release fails, nothing is deleted.
Pre-assembled stock on the shelf is a warning, not a blocker. The dialog says Pre-assembled stock is on the shelf and will be removed and lets you go ahead.
Common gotchas
Section titled “Common gotchas”- Assembly BOMs have no Shopify product. They are never sold on their own. If you need to sell something, create a finished good, which links to a Shopify variant.
- Editing an assembly BOM affects every bill that references it, immediately. There is no version pinning. Add a material to an assembly BOM and the next order that fires any referencing finished good consumes it too. If you want a record of what the BOM was, save a version first.
- Waste is per line, not per layer. See Nesting & execution.
Where to next
Section titled “Where to next”- The assembly BOM page — a tour of the six tabs.
- Nesting & execution — what happens when a parent bill expands this assembly at order time.
- Pre-assembled stock — how to manage the shelf.