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 two ways to track it. This guide walks through both.
On this page
Section titled “On this page”- The two 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)
- Worked example: a candle with both kinds of labour
- Common gotchas
The two strategies
Section titled “The two strategies”| Strategy | When to use | Where it lives | How it scales |
|---|---|---|---|
| Virtual work-hour material in a BOM | Per-unit labour that scales with production volume — “every candle takes 0.25 hours of operator time”. | Added to the BOM’s components like any raw material. Rolled into 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 → 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. | A field 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 edit-details dialog. Adds to the WO cost summary. | Lump sum; doesn’t scale with quantity. |
You can use both at the same time. They add together. Just don’t double-count — be deliberate about whether labour is “per unit produced” (Strategy A) or “per build job” (Strategy B).
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 sidebar.
- Switch to the Virtual tab and click New virtual material.
- 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 shows up under the Virtual tab in Raw Materials. It will appear in the same component picker BOMs and sub-assemblies 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.
- In the Raw Materials section, click Add raw material and pick your work-hour material.
- 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 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 + sub-assemblies, 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.
- Click the edit-details button (pencil icon) → opens the Edit Work Order Details dialog.
- Scroll to the Labour cost section. Two number inputs:
- Planned — “Current labour-cost target. Counts toward the Adjusted column on the cost summary.”
- Actual — “Real labour incurred. Counts toward the Actual column once the work order has been executed.”
- Enter values (non-negative numbers, or leave blank to clear).
- Save.
How it shows up
Section titled “How it shows up”Work orders have a cost summary card with three columns: Planned, Adjusted, Actual. The labour fields feed those columns:
- The first time you save a non-empty Planned labour, it stamps a baseline (called Original planned) and sticks. The Planned column shows the baseline; Adjusted shows the current planned value plus any other operator overrides. Editing planned later doesn’t move the baseline.
- Actual labour feeds the Actual column once the work order is executed.
This is on top of any virtual-hour materials inside the BOM — those still scale with quantity in the WO’s spread cost. The labour field is purely an additional adder.
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 labour = $50 in the work-order edit-details 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 → the Costs tab. The Raw Materials section shows your work-hour material as a row with its line cost. See Check BOM margin and cost breakdown for a full walkthrough.
- For work orders — the cost summary card on the WO detail page shows Planned / Adjusted / Actual columns 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”- 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.