Skip to content

Create BOMs in bulk

When you have forty variants that all take the same handful of components, creating them one at a time is the wrong tool. Create BOMs in bulk is one page with one grid: the finished goods run down the side, the components run across the top, and you fill in how much of each component each finished good takes. Nothing is created until you press Create BOMs.

Open it from the Finished goods page: More actions → Create in bulk.

  • Rows: the finished goods
  • Columns: the components
  • Seeing full names and arranging components
  • Filling cells in
  • Selecting cells and setting them all at once
  • Columns from a product you have already modelled
  • Rules
  • Saving and loading a session
  • Creating the bills, and what happens when one fails

A row is one finished good, and it becomes one BOMBill of MaterialsA bill of materials tells Assemblified how to build one unit of a finished good. When a customer orders the finished-good variant, Assemblified deducts the right component quantities from inventory automatically. Read more → . Add rows from the toolbar’s Add rows:

  • Variants — pick individual Shopify variants.
  • Products — pick whole products; every variant becomes a row.
  • Collection — pick a Shopify collection; every variant in it becomes a row.

Each row carries a name for the bill it will create, pre-filled as Product - Variant and editable in place. A variant you have already picked is never added twice.

Every row has a ⋯ menu of its own, beside the name:

  • Replace finished good swaps the row’s variant for another one you pick. The row keeps every component you have filled in, so a row built for the wrong size is fixed in one pick rather than removed and rebuilt. A name you typed yourself stays; a name that was still the pre-filled one is re-filled from the new variant.
  • Remove row takes the row out, after asking. Undo brings it back.

To remove several rows, tick their row checkboxes and choose Remove N rows in the selection bar. This works even before you add a component column. One Undo brings all those rows and their filled cells back. Removing draft rows does not delete any BOMs you have already created.

The row checkboxes determine which rows are removed when any are ticked. With only cells selected, removal is offered for rows whose cells are all selected; a partial row selection does not remove that row. Changing the row search clears selections hidden by the new search, so the button only removes rows you can see.

Assemblified checks the rows against the bills you already have. A finished good that already has a BOM gets a duplicate badge and is left out of the create run — the row stays in the grid so you can see it, rather than disappearing silently.

A column is a component source. The toolbar’s Add column offers five component sources, plus a sixth entry — From existing BOMs — that builds several columns at once and is covered below. The five sources are:

  • Shopify product line — one product, and every one of its variants becomes a choice in that column. This is the column type that makes a size or colour run easy: one column for “Jar”, and each row picks the jar size it uses.
  • Collection — the same, for every variant in a Shopify collection.
  • Single variant — one specific Shopify variant, the same one for every row.
  • Virtual material — one of your virtual materialsVirtual MaterialA material tracked entirely inside Assemblified — not a Shopify variant. Useful for shop-floor consumables (glue, packaging, labour units) where you need quantity tracking but don't want a Shopify product on your storefront. Read more → .
  • Assembly bill — one of your assembly billsSub-assemblyA 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. The app now calls it an assembly bill. Read more → , which goes into the created bills as a sub-assembly, not as a raw material.

The header of each column names the source, shows how many choices it offers, and carries a ⋯ menu with everything you can do to the whole column: set it, fill it by pattern, clear it, duplicate it, collapse it, replace its source, remove it, or save what you just did as a rule.

Duplicate a column when one finished good takes two different variants of the same product — two different jar sizes, say. The two columns then have to use different choices in the same row: Assemblified will not let the same component be used twice in one row from the same source, and the choice already taken is shown crossed out with the reason rather than hidden.

Replace source swaps a column’s product for another and moves the values across by matching variant titles (“Large” lands on “Large”). Any row it could not match is listed by name, so you know exactly which cells you have to fill in again.

Seeing full names and arranging components

Section titled “Seeing full names and arranging components”

Resize a column by dragging the handle on the right edge of its header. You can widen both the finished-good column and component columns to read long names, colours and sizes without renaming anything. With the handle focused, use the arrow keys to change its width. On a small screen, swipe inside the table to reach wide columns. Full details shows the complete name, variant and SKU when you need more room.

Open View to choose Name and variant or SKU separately for finished goods and components. The BOM name remains editable on its own. If a component has no SKU, its name and variant remain visible with a note; products and collections keep their source name in the header.

Widths stay on the current page: editing, filtering, arranging or collapsing a column keeps its width, and expanding restores it. Reset widths restores the defaults. Resizing needs no Save and uses no Undo step. Loading another session or reloading the page can reset widths.

Choose a component order in View:

  • Added order keeps the order you added the columns. This is the default.
  • Name sorts by name. Product-line and collection columns use their source name, even when they currently offer just one choice.
  • SKU sorts single-variant Shopify columns by SKU, with missing SKUs last.
  • Size sorts recognised Shopify variant sizes, such as S, M, L, XL or NB, 3-6M, 6-12M, 12-18M.
  • Arrange columns lets you set a Custom order by dragging or using the keyboard.

For product-line and collection columns, Choice order separately controls the list of variants. Use a column’s Arrange choices action to give that list a custom order. Arranging columns keeps your choice order. SKU and Size leave product-line, collection, virtual-material and assembly-bill column positions in place.

Size sorting recognises whole size values in the variant title, including Small/Medium/Large, XXS/XS, X-Large/Extra Large, 2XL through 6XL and Newborn. Month ranges sort numerically. It groups recognised sizes by product, colour and size family; unrecognised or ambiguous sizes stay at the end of their product group. It does not read size from the SKU. Use Custom for other size groups.

Label and order choices save with the session and support Undo and Discard. Arranging changes the view: it keeps every component assignment, quantity and rule result. Create review retains the original component order.

A cell is how much of that column’s component that row’s finished good takes. Cells behave in one of two ways, depending on the column:

  • A column with one choice (a single variant, a virtual material, an assembly bill) is a toggle. An empty cell shows a small +; clicking anywhere in it switches the component on at quantity 1 and opens the number for editing. Clearing the number, or entering 0, switches it off again. You can fill a long column by pressing down it — Enter and Tab move to the next row.
  • A column with several choices (a product line, a collection) shows the chosen component’s name, which opens the list of choices, with the quantity beside it.

A cell you typed yourself is marked as yours, and the marker tells you where any other value came from — a bulk write, a rule, or a bill you copied columns from. That matters when you apply rules later: rules leave your own edits alone unless you explicitly tell them not to.

Undo reaches back twenty steps, from the toolbar. A bulk write or a rule run undoes as a single step, not cell by cell.

Selecting cells and setting them all at once

Section titled “Selecting cells and setting them all at once”

You can select cells and write them in one go. Selecting is always deliberate — a plain click just puts you in the cell, so the actions bar never jumps over the column headers while you are typing.

Five ways to select:

  • Shift-click a second cell to take the whole rectangle between it and the first.
  • Ctrl-click (Cmd-click on a Mac) to add or remove a single cell.
  • Drag across cells to paint a range.
  • The column checkbox in a column header selects every cell of that column.
  • The row checkbox selects every cell of that row.

Escape clears the selection. The counter shows selected rows when row checkboxes are ticked, otherwise selected cells. If you also select cells outside the checked rows, it shows both counts, such as 1 row and 2 additional cells selected. Cell actions affect both parts; Remove N rows still removes only the checked rows.

With a selection live, the bar at the top of the grid offers Set cells, Clear cells, Apply rule to rows (or Apply rule to cells for a cell selection), Save selection as rule, and Remove N rows when rows can be removed. Before columns exist, checked rows still support Apply rule to rows and Remove N rows; the cell-only actions stay disabled.

Set cells opens one section per column in your selection, because each column has its own choices. Each section names the column (image, product and variant) and then, on one line, lets you say which component to use, what quantity, or that those cells should be emptied. The component defaults to Leave as is, so a selection spanning three columns that you opened only to re-price the quantities never has its components rewritten. An empty cell under Leave as is stays empty, and the message after applying tells you how many were left that way. Filling a whole column is the same action over a whole-column selection.

If some cells could not be written — because the component was already used in that row from the same source — they are named before the dialog closes, with the reason. The rest of the write still goes through.

Columns from a product you have already modelled

Section titled “Columns from a product you have already modelled”

Add column → From existing BOMs builds columns out of a product whose bills you have already made. Pick the product; every component across its bills becomes a column, and the quantities are copied onto your rows by matching variant titles.

Rows the template had nothing for stay empty and are listed by name. If a column for that component is already in your grid, the values land in it rather than creating a second one.

A rule says: when a row’s product title, variant title or SKU looks like this, put these components in with these quantities. Rules are saved for your shop and can be applied to any later session, which is what turns a one-off grid fill into something you reuse every season.

A rule has two halves:

  • The match uses the product title, variant title and SKU. Choose Match all fields (AND) or Match any field (OR). Each condition can be contains, does not contain, starts with, ends with, is exactly or matches the pattern. Use Add condition to check the same field more than once, then choose whether all or any of that field’s conditions must hold. A rule can have up to 20 conditions in total. Blank conditions are ignored when previewing and saving; if every condition is blank, the rule matches every row. The editor tells you live how many of your current rows would match.
  • The actions — one or more components to put in, each with a quantity. The editor lists the actions you have added as a short table and edits one at a time in a card underneath it: fill the card in, press Add to rule, and it joins the table; a row’s ⋯ menu edits or removes it. A card you filled in but did not add is still saved with the rule. A quantity is either a fixed number or read out of the row: out of the SKU or out of the variant title. That is how “a 250 g bag takes 250 g of beans” becomes one rule for the whole size run instead of forty numbers typed by hand. A guided helper builds the pattern for you: type an example, select the part that is the number, and the pattern is written for you.

For example, choose Match all fields (AND), set product title to does not contain mini, and add two SKU conditions: contains x and contains y. Set the SKU field to Match any condition (OR). This matches a product only when its title excludes mini and its SKU contains either token. The rule summary shows parentheses around the SKU alternatives.

Contains, does not contain, starts with, ends with and is exactly ignore upper and lower case unless you enable case sensitivity. Pattern matching keeps the pattern’s casing unless you turn case sensitivity off. A missing SKU behaves like empty text: it matches does not contain a nonempty value. Existing saved rules continue to work with their original matching behavior.

An action can also target a column instead of a specific component, choosing which of that column’s variants each row gets — by matching the row’s variant title, or by reading a code out of its SKU. That is what Fill by pattern on a column header is; its Save as rule button keeps it.

Apply rules (from the title bar, or from the bar above a selection) lists your rules with what each one does, lets you tick the ones to run, choose whether to apply them to every row or only to the selected rows, and shows you what applying would do before it does it: per rule, how many rows match, how many cells would be written, how many of your own hand-typed cells would be kept, and how many quantities could not be read out of a row.

Your own edits are kept by default. The switch “Overwrite cells edited by hand” is off unless you turn it on.

Before applying, Assemblified re-checks the components a rule refers to. A virtual material or assembly bill you have since deleted is reported as missing. A Shopify variant it cannot confirm is flagged as unconfirmed rather than missing — the rule keeps what it knows, and the check happens for real when the bills are created.

Applying a whole rule run undoes in one step.

More actions → Rules lists everything you have saved, with a one-line summary of each (“product title contains Oak · SKU contains -L → 2 components”), and lets you create, edit, duplicate or delete one. Names have to be unique. Deleting a rule changes nothing that it already wrote — a rule is an instruction, never an owner.

The grid is a session, and it is saved work, not created bills. Saving one costs nothing and creates nothing.

  • Save session asks for a name the first time, then updates in place. If someone deleted that saved session in another tab, your grid stays intact and the next Save asks for a new name.
  • Load session lists everything you have saved, newest first, with its size, and lets you delete one. Loading replaces the grid, and you are asked to confirm if you have unsaved changes. If you select another session while loading, your latest selection is used.
  • Leaving the page with unsaved changes is blocked until you save or discard, so a half-built grid of two hundred rows is never lost to a stray click.

Sessions from the old BOM Studio still open: they are converted as they load, and saving one creates a new session rather than overwriting the old record. If a few components could not be carried across, you are told how many.

Creating the bills, and what happens when one fails

Section titled “Creating the bills, and what happens when one fails”
  1. Press Create BOMs. The session is saved first — you are asked for a name if it has never been saved. A long run should never be able to lose the grid it came from.

  2. Review. You see how many bills will be created, a table of every one of them with its components, and the rows that are being left out with the reason (already has a BOM, or no components yet). Choose the status the new bills get: Inactive (the default) or Active. An inactive bill does nothing until you activate it.

  3. Create. The run goes out in batches, and the progress bar measures batches that have actually answered. You can cancel between batches; a batch already on its way will finish.

  4. Read the result. If everything landed, the only thing on screen is the count and a button to go to Finished goods. If anything failed, every failed row is named with its reason, the failed rows are still in your grid, and the button is Keep editing so you can fix them and run again. The bills that did land are marked.

A finished good that already has a BOM is never overwritten: it is reported as a failed row so you can decide what to do with it.

  • Nothing you do in the grid exists until you press Create BOMs. Saving a session saves the grid, not the bills.
  • A row with no components is not created. It is listed in the review as left out.
  • The same component cannot be used twice in one row from the same source. Duplicate the column and pick a different variant in the second one.
  • Rules do not run by themselves, and they do not touch cells you typed yourself unless you tick the overwrite switch.
  • There is no waste percentage here. Add one on the BOM’s detail page afterwards if a component needs it.