Skip to content

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.

  • 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
StrategyWhen to useWhere it livesHow 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 sub-assembly.Multiplies with order quantity automatically.
Virtual work-hour material in a BOMPer-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 costPer-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 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”
  1. Open Raw Materials in the app sidebar.
  2. Switch to the Virtual tab and click New virtual material.
  3. 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.
    • Unitpcs works 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 as hours you 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-OP makes the entry easy to find in pickers.
  4. 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”
  1. Open a BOM detail page.
  2. In the Raw Materials section, click Add raw material and pick your work-hour material.
  3. Set quantity to the hours one finished unit takes — decimals are fine, e.g. 0.25 for fifteen minutes per unit.
  4. Waste % — leave at 0. Waste only makes sense for physical materials.
  5. Location — leave blank. Locations don’t apply to virtual materials in any meaningful way.
  6. Save.

That’s it. The line cost shows up alongside physical materials, and the BOM’s Total Cost now includes labour.

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.

  1. Open a work order’s detail page.
  2. Click the edit-details button (pencil icon) → opens the Edit Work Order Details dialog.
  3. 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.”
  4. Enter values (non-negative numbers, or leave blank to clear).
  5. Save.

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.

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:

  1. Open Settings → Additional costs and click New cost factor.
  2. Set Name (“Operator hours”), Kind = Labour, Unit = hour, Rate = your hourly rate.
  3. Open a BOM (or sub-assembly) detail page, find the Additional costs section, pick the factor, and enter the hours one finished unit takes — 0.25 for fifteen minutes.
  4. 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 Costs tab, 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.

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 includes 40 × $6.25 = $250 of 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.

  • 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.
  • 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. pcs is fine — or define a custom hours unit 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.