Skip to content

Composition

A BOM is composed of components. Components come in three kinds — four if you count nesting via an assembly bill. Each kind has slightly different mechanics at executionBOM executionEverything Assemblified does when a Shopify order containing a bill-bound variant is created, edited, cancelled or refunded: draw down pre-assembled stock, deduct or restore components, push the changes to Shopify, and cascade dynamic adjustment. It runs in the background, writing one execution log row. Read more → time. This page explains each one.

You edit all of this on the bill’s Materials tab.

  • Shopify-linked raw materials
  • Virtual materials
  • Assembly bills (sub-assemblies)
  • The “BOM as raw” pattern
  • Quantity and waste percentage
  • Per-component locations
  • Adding components to an existing bill
  • Checking stock on the Materials tab

The default. A real Shopify variant — wax, wick, jar, label, whatever — that you also stock in Shopify and want to deduct as it’s consumed.

When the BOM fires, Assemblified writes an inventory adjustment to Shopify via the Admin API. The component’s stock drops; the BOM’s finished-good stock is what was sold.

Use it for:

  • Components you also sell standalone.
  • Inventory you want visible in Shopify and on your storefront.
  • Multi-location inventory you manage in Shopify.

A virtual materialVirtual 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 → is internal to Assemblified — no Shopify variant. Inventory is tracked entirely in Assemblified. There’s no Shopify-side decrement.

Use it for:

  • Consumables you don’t want in your Shopify catalog (tape, glue, screws, packaging).
  • Materials you source from a non-Shopify supplier.
  • Ingredients tracked in tiny per-assembly quantities (one screw per unit) where setting up a Shopify product is overkill.

You create virtual materials from the Raw Materials page — see Raw Materials → Virtual materials. Once created, they show up in the component picker on the BOM detail page just like Shopify-linked materials.

You can also create one without leaving the bill: on the Materials tab, open Add materials and choose New virtual material. The same form opens, and on save the new material is added to the bill with a quantity of 1, ready for you to adjust.

Everything above is added from one control: Add materials, in the heading of the Materials tab’s Raw materials card. It offers four sources:

SourceWhat it adds
Shopify materialsOpens Shopify’s product picker. Every variant you tick becomes a raw-material row.
Virtual materialsPicks from the virtual materials you already have.
New virtual materialCreates a new one and drops it straight into this bill at quantity 1.
Import from CSV/XLSXReads a spreadsheet of components into this one bill. Different from the importer on the Finished goods page, which creates whole bills — see Import BOMs from a spreadsheet.

Assembly bills have their own card below, with its own add control; additional cost factors have a third. Changes you make on this tab are held in the page’s form — the Save/Discard bar at the bottom of the screen is what writes them.

An assembly billSub-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 → is a reusable bundle of components — itself made of raw materials and (optionally) other assembly bills. Define once, drop into any BOM.

The app spells this one thing two ways, and you will meet both: the navigation entry and the entity picker say Assembly Bills, while the card on a bill’s Materials tab and the create dialog’s source switch still say sub-assembly. They are the same object.

When the BOM fires, the assembly bill is expanded recursively into its components. The assembly bill itself doesn’t have a Shopify variant; it’s pure recipe.

Use it for:

  • Components shared across many BOMs (e.g., a “wick assembly” used in every candle).
  • Reducing duplication when 20 BOMs share the same 10 underlying raws.
  • Modeling a step in your assembly process you also build ahead of time.

Assembly bills can carry their own pre-assembled stockPre-Assembled InventoryStock of finished goods and assembly bills already built and on the shelf, counted per location. A work order draws assembly bills from the shelf first, building fresh only if it runs short; an order consumes a finished good's shelf before its components. Read more → . When a parent BOM expands one during execution, that shelf is consumed first — only the remainder pulls the assembly bill’s own components.

See Sub-Assemblies → Nesting & execution for the recursive expansion details.

A BOM’s finished-good variant can itself be referenced as a raw material in another BOM. This is the “BOM-as-raw” pattern.

Example: you sell a “Wax Block” as its own product (BOM A). Then you also sell a “Candle Kit” (BOM B) that contains one Wax Block plus other components. The Wax Block’s variant appears as a raw material in Candle Kit’s component list.

When Candle Kit’s BOM fires:

  1. Assemblified looks up the Wax Block component.
  2. Recognizes that it is itself a finished good with a bill of materials.
  3. Treats Wax Block’s pre-assembled inventory as the source — drawing from the shelf first.
  4. If Wax Block’s shelf is short, Assemblified does NOT recursively descend into Wax Block’s recipe. The expectation is that the Wax Block was either pre-built or its inventory is otherwise managed.

Every component reference carries:

  • Quantity per BOM unit. How many of this component are consumed when the BOM produces one finished good. Decimals are supported (e.g., 0.5 meters of cable per unit).
  • Waste percentage. A margin applied during execution: effective_consumed = quantity × (1 + wastePercentage / 100). Useful for materials with predictable loss (cuts, trimmings, evaporation). 5% is a typical default; some processes have 10–20%.

Both are edited directly in the row on the Materials tab.

For assembly bills, only the quantity field exists. They don’t carry waste% at the parent level — waste lives on the assembly bill’s own raw-material references.

From each component’s quantity and its raw material’s weight, Assemblified derives a calculated weight for the BOM — the unit-converted sum of everything it consumes. The weight roll-up excludes waste percentage (scrap isn’t shipped), which is a deliberate divergence from the cost roll-up. It’s surfaced in BOM and assembly-bill exports today.

To include human labour in the rollup as a per-unit line, see Track building cost — the standard pattern uses a virtual material with unit cost = hourly rate.

By default, components are consumed from the default Shopify location (configured in your shop settings). The Materials tab’s Location override column is where you change that per component:

  • Pick a location on a Shopify-linked raw material’s row to always pull that component from there, regardless of where the order ships from.
  • Leave it on the default and the component is consumed from your default location — or from the location the order is fulfilled from, once multi-location sensitive adjustments are on. The ⓘ in the column header tells you which of the two fallbacks is in force for your shop.

This is useful for multi-warehouse setups where components are stocked separately. See Raw Materials → Inventory tracking for the full picture.

The Raw materials and Sub-assemblies tables on the Materials tab help you see at a glance whether you have what one unit of this bill needs.

  • Search. Each table has its own search bar above it. Type part of a name, a SKU or (for raw materials) a variant title and the table narrows as you type. Searching only changes what you see: rows you ticked stay ticked, and the totals still count every line.
  • The column header stays put. On a long bill, the column names stay at the top of the screen as you scroll.
  • Location. When your shop has more than one location, the search bar also holds a location button. It starts on All locations; pick one and both tables show that location’s numbers. Switching is instant — the stock is read once when the page opens. The choice is not saved: reopening the page starts on All locations again.
  • Stock per location. Click a raw material’s Available number (or a sub-assembly’s Pre-assembled number) to open a small card with its stock at every location. The location the number is shown for is marked.
  • Location overrides win. A raw material with a location override is always shown for that location, whatever location is picked in the search bar — it is the location the material is actually taken from — and its card says so.

A number shown as a warning badge (with a warning icon) means there is not enough of this material for one unit of the bill at that location right now. “Enough” includes waste: a line needing 2 with 10% waste needs 2.2. A screen reader hears “Not enough for one unit” after the number, and the card behind it states what one unit needs.

  • With a location chosen (or for a line with a location override), the check is for that one location.
  • On All locations, a line is highlighted when it falls short at any location — not against your total stock across all locations — and its card shows the same badge on each location that is short.
  • A sub-assembly is highlighted only when its pre-assembled stock is short and its own components there cannot make up the difference, so one you can still build is not flagged.
  • A non-essential material that is below what one unit needs is shown as a blue info badge instead and is not treated as short: it is worth knowing, but it never limits how many you can build. Its card says so too.

Nothing is highlighted while stock is still loading or if it could not be read.

  • Settings reference — once your composition is set, configure how the BOM behaves.
  • Execution model — see how composition translates to inventory adjustments at order time.