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 two ways to track it. This guide walks through both.

  • 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
StrategyWhen to useWhere it livesHow it scales
Virtual work-hour material in a BOMPer-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 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 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”
  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.

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.