Track building cost
A BOM’s calculated cost rolls up the unit cost × quantity of every component. Physical raw materials are easy to model. Human labour is also a real cost — and Assemblified gives you three ways to track it. This guide walks through them.
On this page
Section titled “On this page”- The three strategies for tracking labour cost
- Strategy A: a virtual “work-hour” material in the BOM (per-unit labour)
- Strategy B: the per-work-order labour cost field (per-batch labour)
- Strategy C: an Additional-costs labour factor (per-unit labour, first-class)
- Worked example: a candle with both kinds of labour
- Common gotchas
The three strategies
Section titled “The three strategies”| Strategy | When to use | Where it lives | How it scales |
|---|---|---|---|
| Additional-costs labour factor (recommended for per-unit labour) | Per-unit labour, with a rate you maintain in one place across many BOMs. | The Additional costs page, attached to 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 → or 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 → . | Multiplies with order quantity automatically. |
| Virtual work-hour material in a BOM | Per-unit labour you want to model as a component — e.g. it should also appear in pick lists or material planning. | Added to the BOM’s components like any raw material. Rolled into BOM total cost. | Multiplies with order quantity automatically. |
| Per-work-order labour cost | Per-batch / per-job labour adder — setup time, fixed overhead, one-off labour for a specific run. | The Labour cost dialog on the work orderWork OrderA planned production run: pick materials, build the items, do QC, and complete — all tracked together. Use work orders when you're building stock ahead of demand or running a multi-day project. Read more → ’s Overview tab. Adds to the work order’s cost summary. | Lump sum; doesn’t scale with quantity. |
You can combine them. They add together. Just don’t double-count — be deliberate about whether labour is “per unit produced” (Strategy A or C) or “per build job” (Strategy B), and don’t model the same hour twice.
Strategy A — virtual work-hour material in a BOM
Section titled “Strategy A — virtual work-hour material in a BOM”The idea: create 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 →
whose unit cost is your hourly labour rate. Reference it in the BOM with quantity = hours per unit. Assemblified rolls it into the BOM total cost using the same quantity × unit cost × (1 + waste%) formula as physical materials.
Step 1: Create the work-hour virtual material
Section titled “Step 1: Create the work-hour virtual material”- Open Raw Materials in the app navigation.
- Click Create virtual material in the title bar.
- Fill in the form:
- Product name / Variant name — descriptive, e.g. “Operator hours” / “Hours”. You can also create per-role materials like “Skilled operator hours” and “Assembly tech hours” with different rates.
- Unit —
pcsworks fine; treat each “piece” as one hour for accounting purposes — the rollup math doesn’t care about the label. If you want the unit to read literally ashoursyou can add a custom unit in Settings → Units and pick it here. Either choice is fine. - Unit cost — your hourly rate, e.g.
25.00. This is what gets multiplied by quantity at execution and cost-rollup time. - Unit price — required by the form; set it to the same value as unit cost or any nominal value (it isn’t used by BOM cost rollup).
- SKU, vendor, specifications, image — optional. A SKU like
LABOUR-OPmakes the entry easy to find in pickers.
- Save.
The new material is now in the Raw Materials list; the Virtual metric above the table filters the list down to virtual materials if you want to find it again quickly. It appears in the same component picker BOMs and assembly bills use for any other material.
Step 2: Add the work-hour material to a BOM
Section titled “Step 2: Add the work-hour material to a BOM”- Open a BOM detail page and switch to the Materials tab.
- In the Raw materials card, open Add materials → Virtual materials and pick your work-hour material. (If you have not created it yet, the same menu’s New virtual material makes one without leaving the page.)
- Set quantity to the hours one finished unit takes — decimals are fine, e.g.
0.25for fifteen minutes per unit. - Waste % — leave at 0. Waste only makes sense for physical materials.
- Location — leave blank. Locations don’t apply to virtual materials in any meaningful way.
- Save.
That’s it. The line cost shows up alongside physical materials, and the BOM’s Total cost per unit now includes labour.
What the math looks like
Section titled “What the math looks like”For each line:
line_cost = quantity × unit_cost × (1 + waste% / 100)So 0.25 hours × $25.00 × (1 + 0%) = $6.25 per finished candle.
The BOM’s total cost is the sum of all lines (raw materials plus assembly bills, recursively).
Strategy B — the per-work-order labour cost field
Section titled “Strategy B — the per-work-order labour cost field”When the labour isn’t per-unit (think: batch setup, calibration time, special tooling for one job), use the work-order labour fields instead. They’re a lump sum on the work order, not per item produced.
Where to set it
Section titled “Where to set it”- Open a work order’s detail page and stay on the Overview tab.
- Find the cost summary’s Labour cost figure and expand it. It shows From bills (what the attached labour cost factors add up to), an Operator override row when someone has entered one, and Actual.
- Click Edit labour cost. The Labour cost dialog opens with two number fields:
- Planned — your labour-cost target for this job.
- Actual — the labour actually incurred.
- Enter values, or leave a field empty to say nothing about it. Zero means this work order costs no labour.
- Save.
How it shows up
Section titled “How it shows up”The cost summary reads in three stages — Planned, Adjusted and Actual — and labour has a line in each:
- Labour starts prefilled from the bills’ labour cost factors. That prefilled figure is what the Planned stage shows.
- What you type into the dialog’s Planned is the operator override, and it is what the Adjusted stage uses. It never rewrites the prefilled figure, so you can always see both.
- Actual feeds the Actual stage.
This is on top of any virtual-hour materials inside the bill — those still scale with quantity in the work order’s spread cost. The labour figure is purely an additional adder.
Strategy C — an Additional-costs labour factor
Section titled “Strategy C — an Additional-costs labour factor”The purpose-built path. Create the rate once, attach it wherever the work happens:
- Open Settings → Additional costs and click New cost factor.
- Set Name (“Operator hours”), Kind = Labour, Unit =
hour, Rate = your hourly rate. - Open a BOM (or assembly bill) detail page, switch to the Materials tab, find the Additional costs card, pick the factor, and enter the hours one finished unit takes —
0.25for fifteen minutes. - Click Add. Done — no separate save.
What this buys you over Strategy A:
- One rate, many BOMs. Change it once; every BOM re-prices immediately.
- Its own section in the BOM’s Financial breakdown, rather than hiding among raw materials.
- No waste % to accidentally set on labour.
- Work orders freeze the rate they were created with, so a rate change never rewrites a job you already priced — and the labour is computed into that work order’s cost for you.
- Labour vs. overhead is a real distinction when pushing cost to Shopify, so labour can’t be charged twice.
See Additional costs for the full picture, and on work orders for the labour hand-over.
Worked example: a candle with both layers
Section titled “Worked example: a candle with both layers”Setup:
- Vanilla Candle BOM contains: 1 jar @ $2, 1 wick @ $0.50, 0.25 hours of operator time @ $25/h.
- BOM total cost =
2 + 0.50 + (0.25 × 25) = $8.75.
A work order is created for 40 candles.
- Spread cost from materials =
40 × $8.75 = $350. That includes40 × $6.25 = $250of operator labour from Strategy A.
Plus, this batch needed a one-time tooling setup. The operator enters Planned = $50 in the work order’s Labour cost dialog.
- WO Adjusted total =
$350 (materials including per-unit labour) + $50 (planned WO labour) = $400.
When the build is done and Actual labour = $55 is entered, the Actual column shows $355 (assumes actual material spend matched planned) plus $55 = $410.
Reading the cost out
Section titled “Reading the cost out”- For BOMs — open the BOM detail page and stay on the Overview tab: the Financial breakdown card rolls everything up, and expanding its Raw materials line shows your work-hour material with its line cost. The rows themselves are edited on the Materials tab. See Check BOM margin and cost breakdown for a full walkthrough.
- For work orders — the cost summary on the work order’s Overview tab shows Planned / Adjusted / Actual with labour rolled in.
Common gotchas
Section titled “Common gotchas”- Don’t double-count. A BOM-component virtual hour material and a planned-labour value on the WO will both flow into the cost. Pick the one that matches your reality.
- Currency. The virtual material’s unit cost and the WO labour fields are both in your shop currency. Assemblified doesn’t convert.
- Scaling. Strategy A scales with order quantity automatically; Strategy B doesn’t. If a customer orders 100 candles instead of 10, your per-unit labour grows 10× — your batch labour stays the same.
- The unit label is cosmetic. No math depends on it.
pcsis fine — or define a customhoursunit in Settings → Units if you want it to read literally. - Waste % on labour materials is meaningless. Leave it at 0. Setting a waste % multiplies your labour cost just like a real material’s, which is almost never what you want.
- Sync the cost back to Shopify if your storefront’s “cost per item” should reflect labour. See Sync BOM cost to Shopify.
Where to next
Section titled “Where to next”- Additional costs — the first-class way to model per-unit labour and overhead.
- Sync BOM cost to Shopify — push the labour-inclusive cost to Shopify so its margin reports are accurate.
- Check BOM margin and cost breakdown — read the rolled-up cost on the BOM detail page.
- Virtual materials — reference for the virtual material concept.
- Composition — how component types work in a BOM.