Skip to main content
A well-structured BOM (Bill of Materials) file makes imports faster and more accurate. This guide covers the columns Variable expects and best practices for formatting your data.

Required columns

Every BOM import must include these columns:
If your file is missing either productSku or quantity, the import will fail during validation.
These columns improve the quality of your imported data:

Example CSV templates

Minimal template

The simplest valid BOM with only required columns:

Standard template

A typical BOM with common columns:

Hierarchical template with materials

A detailed BOM with supplier parts and materials:

Hierarchy options

Variable supports two ways to define BOM hierarchy:

Option 1: bomLevel

Use integer levels where 0 is the root product:
The system processes rows in order. Level 2 items become children of the most recent level 1 item - here, the four legs attach to the leg frame:

Option 2: bomParentId

Explicitly reference the parent product’s SKU:
This produces the same hierarchy as the bomLevel example above:
Use bomParentId when your BOM rows are not in hierarchical order or when you need explicit parent-child relationships.

Mixed units

You can enter an input quantity in any unit the source product supports, even when it differs from that product’s declared unit. For example, if a board is declared in m2 but your BOM lists it as 2.4 m, import the row as-is — set unitCode to the unit you have. Variable converts the value to the declared unit for impact calculations and keeps your entered value in the API. No extra columns are needed. Conversion uses the length, volume, area, or weight factors set on the source product.
If a row’s unit doesn’t match the product’s declared dimension and the source product has no matching conversion factor, that row is skipped and will not appear in your imported model. Add the relevant conversion factor to the product, or use the declared unit, to import the row.

Best practices

Use consistent SKUs

SKUs are used to match and deduplicate products. Use the same SKU format throughout your file and across imports.

Decimal separator

Variable auto-detects decimal separators. If you use European format (comma as decimal separator), you can select this during the import mapping step.

Date format

Variable accepts several date formats (Day / Month / Year, Month / Day / Year, Year / Month / Day, Year Month, Month Year, ISO 8601) - you’ll select the one that matches your file on the column-mapping screen. Within a single date column, every row must use the same format. ISO 8601 (YYYY-MM-DD) is a good default if you control the export:
See Date format for the full list of accepted variations within each option.

Standard unit codes

Use standard unit abbreviations that Variable recognizes. Codes are case-insensitive - kg, KG, and Kg all resolve to the same unit, and Variable stores the canonical form shown:
During import, you can map non-standard unit values (e.g., “kilograms”, “kilogrammes”, “lb”) to Variable’s standard codes.

Clean your data before import

  • Remove empty rows at the end of the file
  • Ensure column headers are in the first row
  • Remove any summary or total rows
  • Check for special characters that might affect parsing

Next steps