Skip to content

Bill of Materials

A bill of materialsBill 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 → 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 — across raw materialsRaw materialThe atomic component of a bill of materials or an assembly bill. Two flavours: a Shopify-linked variant, whose inventory Shopify tracks, or a virtual material, which Assemblified tracks on its own and Shopify never sees. Both sit in the same component picker and are consumed the same way. Read more → , 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 → (also called sub-assemblies), and 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 → . No manual bookkeeping; no spreadsheet at the end of the day.

A BOM is the recipe. The 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 → is what happens when an order arrives. The two are separate concepts: you set up a recipe once, and Assemblified runs it for every order from that point on.

  • When to reach for a BOM
  • The four kinds of components a BOM can hold
  • Where your BOMs live — the Finished goods page
  • Inside one BOM — the detail page and its tabs
  • The capability snapshot — every page in this section
  • Key concepts you’ll see throughout

Reach for a BOM when:

  • You sell a Shopify product that’s assembled from components (a candle from wax, wick, jar, label; a kit from individual SKUs).
  • You want automatic inventory deductions the moment a customer orders, without anyone in the warehouse touching a spreadsheet.
  • You need dynamic adjustmentDynamic adjustmentA per-bill toggle that recalculates the bill's Shopify-displayed quantity after every order: the bottleneck-resource count plus pre-assembled stock. One of three mutually exclusive toggles — switching it on switches only-sell-pre-assembled and maintain inventory level off. Read more → — your Shopify product page should never sell more than you can build.
  • You manage pre-built stock (pre-assembled inventoryPre-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 → ) and want orders to draw from it first.

If instead you’re tracking a multi-step physical build that needs picks, QC, and a paper trail, that’s a job for Work Orders, not a BOM. BOMs are for the order-driven case; work orders are for the deliberate-build case.

A BOM has one finished good (a Shopify product/variant) and a list of components. Components come in three kinds — four if you count nesting:

Shopify-linked raw materials

A real Shopify variant tracked in Shopify inventory. When the BOM fires, Assemblified writes inventory adjustments through the Shopify Admin API.

Virtual materials

Internal to Assemblified — no Shopify variant. Use for consumables (tape, glue, screws) you don’t want in your Shopify catalog.

Assembly bills (sub-assemblies)

Reusable component bundles. Define once; embed in any BOM. They expand recursively at execution time. The app nav calls them Assembly Bills and gives them their own list page; inside a bill of materials the older word sub-assembly is still what you will read on the card and in the component picker. Same thing, two names.

Other BOMs (BOM-as-raw)

A finished-good variant from another BOM can be referenced as a raw material. Useful for catalogs where one product becomes a component of another.

See Composition for the full mechanics, including waste percentagePlanned quantityHow much of a material a work order intends to consume: the bill's quantity, editable per material in the Planned column but never below what has already been consumed. Pick lists and Adjusted cost read it. "Effective quantity" is the older name. Read more → and per-component locations.

Click Bill of Materials in the Assemblified navigation. The page is titled Finished goods and it’s one table of every BOM in your shop. A few things worth knowing before you start:

  • The counters at the top. Four numbers — Inactive, Not linked, Low margin and Low stock — each of which filters the table down to exactly those BOMs when you click it.
  • Views. Along the top is a row of views. Three are built in: All (identity, status, what Shopify sells, what could be built, pre-assembled stock, cost and composition), Inventory (what Shopify sells, pre-assembled stock, max buildable and the bottleneck — the pre-assembled number is highlighted where it disagrees with Shopify) and Settings (status and every per-BOM setting side by side, plus the location-rule count). Set up a search, some filters and a column layout you use often, then Save as new view and it becomes a tab of its own. You can rename a view, set one as your default, or reset it back; the three built-in ones can’t be changed. Your default view is the one that opens whenever you come back to the page, and it’s marked with a star in the row of views. The same menu offers Remove as default when you want the page to open on All again.
  • Search and filters. The search box matches the BOM name, the Shopify product and variant name, the SKU and the description. Add filter builds precise conditions — status, tags, margin, pre-assembled stock, whether the BOM is linked to Shopify, each of the settings, and more. Every filter you add becomes a chip you can edit or remove, with Clear all to start over.
  • Columns. Display options opens the column picker: show, hide, pin and reorder any column. Cost, margin, pre-assembled, max buildable, bottleneck and 30-day usage are all available.
  • Bottleneck. The component that actually caps Max buildable, wherever it sits in the recipe. Waste is counted, pre-assembled sub-assembly stock is used up first, and non-essential materials are ignored. A material inside a sub-assembly is named with that sub-assembly shown underneath it; when a sub-assembly is set to consume pre-assembled units only, its shelf itself can be the bottleneck. Hover the cell to see how much is on hand and how much more you would need for one extra unit; with several locations, the popover names the bottleneck at each one.
  • Locations. If you run multiple locations, the location control in the toolbar narrows the quantity columns to the locations you pick. It’s a scope, not a filter — it changes what the numbers mean, not which rows you see.
  • Doing something to many at once. Select a few rows, a page, or every result your search and filters match. The bulk action hub brings recipe edits, settings, stock, costs, maintenance and exports together over that selection.
  • Seeing several as one graph. Open structure in that same bar draws every ticked BOM on one canvas, with shared materials pooled into a single node, so you can see what a whole group of finished goods consumes. Up to 50 at a time; select more and the page says so rather than drawing part of your selection. See Structure panel.
  • One row at a time. Hover a row and its More actions (⋯) menu on the right offers Quick assemble, Duplicate, Adjust pre-assembled, Add to group, Pick list, Shortage report and Delete. Quick assemble opens the same dialog as the bulk bar’s, for that one BOM; it and Adjust pre-assembled are unavailable for a BOM with no Shopify variant. To have it one click away on every row, add the Assemble column to your view: in Display options it is listed under Inventory. Clicking the name opens the detail page.
  • Everything else sits in the page’s title bar. Create opens the create dialog, Export opens the exporter, and More actions holds Import from CSV/XLSX, Import from bundles.app, Manage groups and Create in bulk. The two maintenance runs (refresh variant info, validate and repair) are not here — they live in the bulk bar, which can select every row your filters match and so already covers the whole shop.

The Finished goods list is a place to act on your range as well as browse it. Search and filter to find the right BOMs, select them, then choose from the bulk action bar:

MenuWhat you can do with the selection
EditEdit materials across BOMs, update tags and add bills to a group.
BOM settingsActivate or deactivate bills, change inventory behavior and apply location rules.
InventoryQuick assemble (also in a row’s ⋯ menu), create or release safety-stock reservations, reconcile pre-assembled stock and sync with raw materials.
CostAdd cost factors, and sync the calculated cost to Shopify.
MaintenanceRefresh variant information, validate and repair bills, and save recipe versions.
IntegrationsReach Logistified and Alertified actions when those connections are enabled.
ExportExport BOM data, a pick list or a shortage report.

Open structure shows selected bills together, with shared materials pooled on one canvas. Delete sits after the other actions and always starts with a preview. Some actions require Enhanced or a shop setting; the relevant control names the requirement.

To create a new range, choose More actions → Create in bulk in the page header. The bulk builder combines a component grid, reusable rules and saved sessions. It creates new BOMs; use Edit → Edit materials to work on existing recipes.

Delete never acts on the spot. It first checks what depends on the selected BOMs and shows you the answer in three parts before asking you to confirm:

  • What will be deleted. The number of BOMs, then everything that goes with them: components, assembly bill references, cost-factor links, pre-assembled units, per-location rules, Logistified sync history and so on. A line only appears when there is something to count.
  • Blocked BOMs. A table naming every BOM that cannot be deleted, why (an open work order, an unreversed work-order push, an active safety-stock reservation, an open order that still holds stock) and where to go to clear it. Blocked rows are simply left out; the rest are still deleted.
  • Other effects. What changes elsewhere: Shopify tags and the variant metafield, alerts, the multi-store link, and notes such as dynamic adjustment stopping for the product.

Where a blocker can be cleared for you, a checkbox offers it: detach from the work orders, release the reservations first, and, for BOMs whose orders were synced to Logistified, also remove the synced orders from Logistified. That last one is a choice, never automatic. Untick it and the retrospective orders stay in Logistified.

If some rows fail, the dialog stays open and names them, and Retry the failed rows aims only at those. Deleting cannot be undone.

Clicking a BOM’s name opens its detail page. Everything about that one finished good lives here, in one full-width column with a row of tabs across the top. There is no sidebar: every fact belongs to one of the tabs.

The tabs, in order:

TabWhat it holds
OverviewWhat the bill is: the Shopify link and status, its name and notes, stock per location, the cost and margin, and a preview of its structure.
MaterialsWhat the bill is made of: raw materials, assembly bills, additional costs.
LocationsPer-location rules. Only shown if your shop runs multi-location adjustments.
ReservationsSafety-stock reservations for this bill.
SettingsThe per-BOM switches, and the alert thresholds.
HistoryThe stock ledger for this bill’s Shopify variant.
VersionsSaved copies of the recipe.

The title bar holds the actions. Pre-manufacture is the primary one — see Overview tab below. Behind More actions sit Open in Shopify (only when the bill is linked), Open editor (the full-screen structure canvas) and Delete. Ask AI opens the assistant with this bill already in view.

What the bill is, top to bottom.

  • Shopify Integration. The product and variant this bill is bound to, with its image, SKU, price, the cost Shopify holds, the unit cost Assemblified calculated, the difference between the two and the margin. The BOM’s Status switch (active or inactive) is here, next to a badge showing the current state — it is part of the page’s form, so flipping it arms the Save bar rather than applying on the spot. The card’s menu links, changes or unlinks the variant; on an unlinked bill it is a single Link button instead.
  • Basic information. Name, description and notes. A form: change one and a Save/Discard bar appears at the bottom of the screen. Nothing is written until you press Save, and Assemblified will stop you navigating away with unsaved changes.
  • Stock by location. One row per location with what Shopify currently shows as available, the pre-assembled count, how many can be built from components on hand, and which component runs out first (wherever it sits in the recipe, assembly bills included). Click the pencil on a row to adjust that location’s pre-assembled figure — a correction that records what’s on the shelf and pushes the number to Shopify without consuming any components. Reconcile… is the other action here, for when the shelf and Shopify disagree.
  • Financial breakdown. What the bill costs to build and what margin it earns.
  • Structure. A read-only preview of the component graph. Its Open action takes you to the full canvas, where the same recipe can be edited as a graph (Structure panel).

Pre-manufacture, the title-bar action, is the counterpart to the pencil above, and it is the one that does consume: it builds units from the recipe, deducts the components, and adds the result to the pre-assembled shelf. It can also run in reverse to disassemble finished units back into components, or save the run as a draft work order if you’d rather plan the batch than build it now. Everything it shows — the shelf, the recipe, whether a location rule switches the bill off there — is read for the location you pick in it.

The composition, in the order it is costed.

  • Raw materials. One row per component, with its availability, the quantity you consume per finished unit, a waste percentage, its unit cost, the row total, and a Location override. Quantity, waste and the override are edited straight in the table; the ⓘ on the Location override header explains which fallback applies when you leave a row blank. Select rows with the checkboxes to change or clear several at once. Add materials in the heading offers four sources: Shopify materials, Virtual materials, New virtual material (creates one without leaving the page) and Import from CSV/XLSX (adds components to this bill from a spreadsheet).
  • Assembly bills. The sub-assemblies this bill embeds, with the quantity of each and how many of each are currently buildable.
  • Additional costs. Cost factors attached to this bill — labour, packaging, overhead. Requires the Enhanced plan. See Cost factors.

A warning banner appears above these cards when a material has no usable location: no location set and no default configured, not stocked at the default location, or a location rule pointing at a location your store no longer has. Building the bill can fail while that is true.

Edits here are part of the same form as the Overview tab’s identity fields: one Save/Discard bar, one save.

Per-location rules — running a bill differently at one location than at another, including its cost there. This tab only appears while your shop has multi-location adjustments switched on; without that setting a per-location rule cannot be written at all, so the tab is absent rather than greyed out. Full reference: Location rules.

If you switch the setting off after writing rules, the rules are not deleted — the Settings tab shows a banner saying they are configured but inactive, so you can go and clear them.

Safety-stock reservations — raw materials held back at a location so a fixed number of units stays buildable on demand. Each row shows the location, the target units, the materials reserved under it, its status and its store-sync state; expanding a row lists the reserved materials, the reservation’s value and its activity. Add reservation creates one; the row menu edits, releases or retries a failed store sync. Nothing here goes through the Save bar — every control is an operation with its own confirmation. See Safety-stock reservations.

The per-BOM toggles, in two groups that behave differently on purpose.

  • Preferences — keep assembled on return, maintain inventory level, auto-generate material list. These are a form: flip a switch and the Save/Discard bar appears; nothing changes until you save.
  • Inventory behaviour — dynamic adjustment (with its Synchronize with Raw Materials action) and only sell pre-assembled quantities. These take effect immediately, because each one changes what your store shows as available. They ask first, and the confirmation names anything it will switch off.

Below them sits alert configuration — thresholds that email or notify you when pre-assembled or Shopify stock runs low, one section per kind, with a summary above them. Alerts need the Alertified integration: without it the sections are not shown at all. See Alertified.

Full reference for every toggle: settings.

The stock ledger for this bill’s Shopify variant, newest first: the date, the change, the level before and after, the type of movement, the reason, and a reference — a link through to the order or run that caused it. A location filter narrows it to one location. Read-only; nothing here can be edited.

Saved copies of the recipe, with compare and restore. Reading the history is open on every plan; saving and restoring need Enhanced. See Versions.

You’ll see these terms throughout the BOM section. Hover any of them anywhere in these docs for a quick definition, or jump to the glossary.

  • A 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 → binds a Shopify variant to a recipe of raw materialsRaw materialThe atomic component of a bill of materials or an assembly bill. Two flavours: a Shopify-linked variant, whose inventory Shopify tracks, or a virtual material, which Assemblified tracks on its own and Shopify never sees. Both sit in the same component picker and are consumed the same way. Read more → and 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 → (the app’s older word for those is sub-assembly).
  • Pre-assembled inventoryPre-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 → is finished stock built ahead of orders. Orders consume from this shelf first.
  • Dynamic adjustmentDynamic adjustmentA per-bill toggle that recalculates the bill's Shopify-displayed quantity after every order: the bottleneck-resource count plus pre-assembled stock. One of three mutually exclusive toggles — switching it on switches only-sell-pre-assembled and maintain inventory level off. Read more → recalculates your Shopify-displayed quantity from current component availability after every order.
  • Maintain inventory levelMaintain inventory levelA per-bill toggle that keeps the Shopify-displayed quantity flat after orders: Assemblified pushes a positive delta back to the bill's variant equal to what was consumed. Components decrement underneath. One of three mutually exclusive toggles: switching it on switches dynamic adjustment and only-sell-pre-assembled off. Read more → is the inverse — keep the displayed quantity flat by replenishing from raws.
  • Keep Assembled on ReturnKeep Assembled on ReturnA toggle on BOMs and sub-assemblies that controls cancel/refund behavior. When on, returned units restore the entity's pre-assembled shelf instead of breaking back into raws. Cascades through nested sub-assemblies — traversal halts at any node with the flag set. Read more → controls what happens on cancel: do components break back down into raws, or do finished units restore to the pre-assembled shelf?
  • The execution logBOM execution logThe record of one run Assemblified made — usually an order, sometimes a stock adjustment or a flow. It carries the run's outcome (Succeeded, Pending, Failed or Skipped), what triggered it, which bills it processed and skipped, the exact component changes it calculated and whether those reached Shopify, any pre-assembled stock it used, and any errors. Every run is listed on the **Logs** page and opens to its own detail page. Read more → is the audit trail — every order writes one row capturing the full webhook → inventory pipeline.