Now in open beta — close the books in 2 days, not 2 weeks.Read the case study →
Inventory · February 12, 2026 · 9 min read

Bill of materials (BOM) for small manufacturers

A bill of materials is just a recipe. The recipe lists what goes into a finished product, in what quantity, at what cost. Without a BOM, every finished unit you make is costed by guesswork, and gross margin becomes a fiction.

What a bom actually is.

A BOM is a structured list of components and quantities required to produce one unit of a finished good. For a metal furniture maker, the BOM for one office chair might be: 1 base assembly, 5 caster wheels, 1 gas lift cylinder, 1 seat foam, 1.2 metres of upholstery fabric, 14 screws, and 0.3 hours of labour at a standard rate. Each line has a quantity per unit and a current cost.

The BOM is the bridge between raw material inventory and finished goods inventory. When you produce one chair, the system consumes the components from raw inventory and creates one unit of finished inventory at a cost equal to the sum of the component costs plus labour. Without this structure, every assembly run is a manual journal entry and nothing reconciles at month-end.

Why small manufacturers avoid setting one up.

The most common reason is fear of complexity. Owners assume BOM means SAP-level master data. It does not. A working BOM for a small manufacturer is usually a spreadsheet with 30 to 200 finished SKUs, each pointing to 5 to 30 component lines. That is a one-week setup, not a six-month project.

The second reason is "our recipe changes." Yes, recipes change. The answer is BOM versioning. The chair you built last year had a different gas lift than this year. Both versions are recorded, both are valid for their time period, and the system uses whichever was active on the date of production. Versioning is built in to any modern inventory system, including Nonari.

Building your first bom.

Start with one finished SKU — your best seller. List every physical component that goes into it, by SKU code. Include packaging, screws, glue, anything that consumes inventory. Add quantity per unit and unit of measure. Add a labour line if labour is non-trivial — for a one-person assembly job it might be irrelevant; for a 4-person assembly line it matters.

Once one BOM works end to end (raw consumed, finished produced, cost reconciles), copy the structure for your next 10 SKUs. By the time you have 30 BOMs you will see patterns — common sub-assemblies, common packaging units. Promote those to their own BOMs and reference them from finished BOMs. This is multi-level BOM, and it cuts maintenance enormously.

  • Component SKU code, quantity per unit, unit of measure
  • Labour line at a standard rate (optional but recommended)
  • Overhead allocation (rent, utilities) only if material to your gross margin
  • BOM version + effective date so historic costing is preserved

A worked example: assembling 50 chairs.

Take the chair BOM above for a Sydney assembly shop. Component costs at the time of the run: base assembly AUD 24.00, caster wheel AUD 1.80, gas lift AUD 9.50, seat foam AUD 3.20, fabric AUD 2.40/metre, screw AUD 0.06, labour AUD 25.00/hour. Per-chair material cost: 24.00 + 5 × 1.80 + 9.50 + 3.20 + 1.2 × 2.40 + 14 × 0.06 = AUD 50.42. Add 0.3 hours of labour at AUD 25.00 = AUD 7.50. Total per-chair cost: AUD 57.92.

Run 50 chairs through production. Raw inventory decreases: 50 base assemblies, 250 wheels, 50 gas lifts, 50 foams, 60 metres of fabric, 700 screws. Each at its own WAC. Finished inventory increases: 50 chairs at AUD 57.92 each = AUD 2,896.00 of finished goods. Labour cost moves from a standard accrual into product cost. The journal posts automatically the moment the production order is closed.

50-chair production run · three paired entriesDEBITCREDITWIP — components consumed2521Raw Inventory (5 components)2521WIP — labour absorbed375Labour Payable375Finished Goods (50 chairs)2896Work-in-Progress2896TOTAL DR5,792TOTAL CR5,792
WIP is the temporary bucket. Once the run closes, components and labour land as finished goods at $57.92/unit.

The journal entry behind a production run.

Production posts in two parts. First, raw materials consumption: Debit Work in Progress (or Finished Goods directly for short runs) for the total component cost. Credit each Raw Material Inventory line for its consumed value. The values come from each component's current WAC at the time of consumption.

Second, labour absorption if applicable: Debit Work in Progress for labour value. Credit Labour Cost or Wages Payable. When the run finishes: Debit Finished Goods Inventory for the full unit cost × units produced. Credit Work in Progress to clear it. In Nonari this is one production document — you enter quantity produced, the system calculates and posts everything based on the active BOM.

What to do when material prices change.

Component prices move constantly. You do not need to update the BOM every time fabric goes up by AUD 0.05 — the BOM stores quantities, not prices. The system uses current WAC at the moment of consumption, so if fabric WAC has moved from AUD 2.40 to AUD 2.52, the next chair costed will use AUD 2.52 automatically.

You only update the BOM itself when the recipe changes — different vendor with different specs, redesigned product, switched packaging. When the recipe changes, version the BOM with an effective date so production runs before that date are still costed against the old recipe and runs after use the new one. This preserves the integrity of historic gross margin reports.

Common bom mistakes.

Mistake 1: forgetting consumables. Glue, tape, lubricant, gloves, packaging — these are real costs. Either add them to each BOM or post a monthly indirect manufacturing expense and accept the imprecision. Pretending they are zero distorts gross margin.

Mistake 2: ignoring waste. If you cut 1 metre of fabric to use 0.8 metres because of pattern waste, the BOM should show 1 metre, not 0.8. Otherwise raw inventory drains faster than the system expects and your stock count goes negative. Mistake 3: treating labour as overhead rather than per-unit cost. If labour is meaningful, put it on the BOM. Nonari supports labour lines on every BOM with a per-hour or per-unit rate.

Frequently asked

Common questions.

Do I need a BOM if I only build to order?

Yes, even more so. Build-to-order means each job has its own cost, but the components and standard quantities are still defined by a BOM. Without one, every quote is a guess.

What if my recipe changes mid-run?

Close the run, version the BOM, start a new run on the new version. Mid-run substitutions are technically possible but messy — version control is cleaner.

Should I include overhead in the BOM cost?

For small manufacturers, usually no. Apply overhead at the GL level monthly rather than per BOM. Overhead allocation per unit is an ERP-grade decision and rarely worth the effort below mid-market revenue.

Can Nonari handle multi-level BOMs?

Yes. A finished SKU can have a sub-assembly as one of its components, and the sub-assembly has its own BOM. Production explodes the BOM down through every level automatically.

What happens if I do not have enough raw stock for a production run?

Nonari blocks the production run by default if any component is short, since negative inventory is blocked. You can override with permission, but the cleaner path is to short the run to whatever quantity the components allow.

Try nonari

Put your books on autopilot.

Free to start. No credit card. Bring your books, kick the tires, export everything if you decide to leave.