Bill of Materials¶
In one sentence: Generate a live spreadsheet from the assembly listing every component, its quantity, description, and material — ready to embed in a TechDraw drawing or export to CSV.
Overview¶
Workbench: Assembly
Menu: Assembly → Bill of Materials
The Bill of Materials (BOM) tool reads the active assembly's Parts container and creates a Spreadsheet::Sheet in the document that lists every component with its count and metadata.
Intuition¶
An assembly knows exactly which parts it contains and how many instances of each. The BOM tool harvests that information into a FreeCAD spreadsheet — a live object you can format, extend, and export, or project directly onto a TechDraw drawing sheet as a parts table.
When to use it¶
- Generating a parts list for a purchase order or manufacturing BOM.
- Creating a table to embed on a TechDraw drawing alongside an assembly view.
- Cross-checking that every component is correctly represented in the assembly.
- Exporting a CSV for import into an ERP or procurement system.
When NOT to use it¶
- Don't use BOM for a single-part drawing — there is nothing to list. Generate the BOM only after all components are inserted and the assembly is solved.
- Don't expect the BOM to update automatically — it is a snapshot at generation time. Re-run it after adding or removing parts.
Step-by-step¶
- Confirm the assembly is solved and all components are present.
- Choose Assembly → Bill of Materials.
- FreeCAD creates a new spreadsheet named
BOMin the document. It opens automatically. - Review and edit the table as needed.
- To embed in a TechDraw drawing: TechDraw → Views → Insert Spreadsheet View, then select the BOM spreadsheet.
- To export to CSV: File → Export, select CSV format, choose the BOM spreadsheet.
BOM table structure¶
| Column | Source |
|---|---|
| Index | Row number |
| Name | Link label in the assembly |
| Quantity | Number of identical instances |
| Description | Part's Label2 property |
| Material | Part's material assignment (if assigned) |
Setting descriptions and materials¶
Set descriptions and materials on the source parts, not on the assembly links:
- Right-click a Body or Part in the model tree → Properties.
- Set the Label2 field — this appears as the Description column in the BOM.
- Assign a material via the Part Design or FEM material tools.
These values propagate to every assembly that references the part.
Parameters¶
The BOM tool has no task panel parameters — it generates the spreadsheet immediately when activated.
After generation, the resulting spreadsheet behaves as a standard Spreadsheet workbench object and can be edited there.
Python API¶
Minimal example¶
import FreeCAD as App
import FreeCADGui as Gui
# Trigger BOM generation
Gui.doCommand('import CommandCreateBom')
Gui.doCommand('CommandCreateBom.CommandCreateBom().Activated()')
# Access the generated spreadsheet
doc = App.ActiveDocument
bom = doc.getObject("BOM")
# Read a cell
part_name = bom.get("B2") # column B = Name, row 2 = first data row
quantity = bom.get("C2") # column C = Quantity
Common mistakes and pitfalls¶
BOM is a snapshot — it does not update automatically
Adding or removing parts from the assembly after generating the BOM does not update the spreadsheet. Re-run Bill of Materials to regenerate it. The old spreadsheet is replaced.
Descriptions must be set on source parts, not on links
Setting Label2 on a link inside the assembly's Parts container is not
reflected in the BOM. Always set the description on the original Body or
Part object.
Multiple assemblies: the active one is used
The BOM tool operates on the active assembly. If the document contains multiple assemblies, double-click the correct one before generating the BOM.
See also¶
- Export ASMT — export the assembly kinematic structure to an external solver
- Assembly Setup — insert all parts before generating the BOM
- Solve Assembly — solve before generating the BOM
- Exploded View — create an exploded view to accompany the BOM on a drawing