What Is a Bill of Materials?
A Bill of Materials (BOM) defines the raw materials, components, and quantities needed to manufacture a product. In Odoo 19, BOMs drive manufacturing orders, cost calculations, and material planning.
Prerequisites
- Manufacturing app installed (Apps → Manufacturing)
- Products created — both the finished product and component products
- Product Type set to Storable Product for items you track in inventory
Create a Basic BOM
- Go to Manufacturing → Products → Bills of Materials
- Click New
- Set:
- Product: The finished product
- Product Variant: (optional) specific variant
- BOM Type: Manufacture this product
- Quantity: How many units this BOM produces (default 1)
Add Components
In the Components tab, add each raw material:
| Component | Quantity | UoM |
|---|---|---|
| Wood Panel | 4 | Units |
| Screws | 16 | Units |
| Wood Glue | 0.5 | Liters |
| Varnish | 0.3 | Liters |
BOM Types
1. Manufacture This Product
Standard BOM. Creates manufacturing orders when you produce this product.
2. Kit / Phantom BOM
The product is not actually manufactured — it is automatically "exploded" into its components during sales or delivery. Use for product bundles or kits.
BOM Type: Kit
Product: "Starter Pack"
Components:
- Laptop × 1
- Mouse × 1
- Keyboard × 1
- Bag × 1
# When sold, delivery order shows 4 separate items3. Subcontracting (Enterprise)
The product is manufactured by an external subcontractor. When you create a purchase order to the subcontractor, Odoo sends components and receives finished goods.
Multi-Level BOMs
A component can have its own BOM (sub-assembly). Odoo handles this automatically:
Finished Product: Table
├── Table Top (has its own BOM)
│ ├── Wood Panel × 1
│ └── Varnish × 0.2L
├── Table Leg × 4 (has its own BOM)
│ ├── Steel Rod × 1
│ └── Rubber Foot × 1
└── Screws × 8When you manufacture the Table, Odoo creates manufacturing orders for sub-assemblies automatically (if configured with routes).
BOM with Variants
Create one BOM that works for multiple product variants:
- On the BOM, leave Product Variant empty (applies to all variants)
- In the components tab, click Apply on Variants
- For each component, specify which variant(s) it applies to
BOM: T-Shirt (all sizes)
Components:
- Fabric (S): 1.2m — variant: Small
- Fabric (M): 1.5m — variant: Medium
- Fabric (L): 1.8m — variant: Large
- Thread: 10m — all variants
- Label: 1 — all variantsOperations (Work Centers)
Add manufacturing steps in the Operations tab:
- Click Add a line
- Select the Work Center (e.g., "Cutting Station", "Assembly Line")
- Set Duration (expected time in minutes)
- Set Sequence for operation order
This enables the Shop Floor module (Odoo 19) for real-time production tracking.
BOM Cost Analysis
Go to Manufacturing → Reporting → BOM Structure & Cost. This shows:
- Total component cost
- Labor cost (from work center hourly rates)
- Margin analysis vs selling price
- Multi-level cost breakdown
Best Practices
- Use consistent UoM — Don't mix meters and centimeters
- Set component costs — BOM cost analysis is only accurate if component costs are set
- Use sub-assemblies for reusable components shared across multiple finished products
- Archive old BOMs instead of deleting — keeps manufacturing history