Excel Import (Products, UOM, BOM)
Import products, additional units of measure, and bills of materials in a single Excel file
Excel Import
Alpha imports products from one Excel workbook that can contain up to three sheets:
| Sheet name | Purpose | Required |
|---|---|---|
Products (or default first sheet) | Create or update products + their base unit | Yes |
UOM | Add or update non-base units of measure per product | No |
BOM | Define bill-of-materials parts per product | No |
The flow: go to Products → Import, drag the file, review the preview (sheet names, row counts, unrecognised columns), then confirm.
Always run an import on a small test file first (5–10 rows) before importing a full catalogue. Errors are reported per row and the import continues, but malformed data can still produce records that need cleanup.
Products sheet
Recognised columns (case-insensitive):
| Column | Required | Notes |
|---|---|---|
id | No | If set, the row updates an existing product (selective merge). If blank, a new product is created. |
SKU | No | Unique product code |
Name | Yes (on create) | Product name |
Description | No | |
Supplier | No | Supplier id or name |
Subsidiary | No | Subsidiary id or name |
Cost | No | Cost on the base unit |
Price | No | Sales price on the base unit |
Currency | No | ISO code (EUR, USD, SRD…) |
Category | No | Category id or full path |
Brand | No | |
Variant | No | |
Type | No | RAW_MATERIAL, FINISHED_GOOD, or SERVICE |
Visibility | No | |
Weight, Volume, CO2 | No | Numeric |
Lifetime | No | Days the product stays valid |
Reorder Point, Safety Stock | No | Replenishment thresholds |
Reference | No | Free-text reference |
Base Unit Name | No | Name of the product's base unit (defaults to "Piece") |
Base Unit Type | No | Count, Weight, Length, Area, Volume, Time |
Rules:
- An
idthat does not exist in the tenant creates a new product with that id. Use this to keep stable ids across environments. - An
idthat exists triggers a selective merge — only the columns present in the row are updated, the rest are left as-is. - A blank
idalways creates a new product. If a product with the same name already exists, the row is skipped and reported as an error.
UOM sheet (optional)
Adds or updates non-base units of measure on existing products. Use this to backfill Box / Pack / Krat / Piece variants that the main sheet didn't capture.
| Column | Required | Notes |
|---|---|---|
product | Yes | Product id or product name |
name | Yes | Unit name (e.g. Box, Pack, Piece, Krat, Baal) |
quantity | Yes | How many base units fit in one of this unit (e.g. 12 for a Box of 12 pieces) |
salesPrice (or price) | No | Sales price for this unit. Defaults to 0. |
cost | No | Cost for this unit. Defaults to 0. |
isDecimal (or decimal) | No | true to allow fractional quantities. Defaults to false. |
Rules:
- Existing unit with the same name on that product → updated.
- New unit name → appended.
- Trying to write to the base unit is rejected — update the base unit via the main sheet's
Base Unit Name/Base Unit Typecolumns. - Missing
product,name, orquantity→ row is rejected with an error, the rest continue.
Example
| product | name | quantity | salesPrice | cost | isDecimal |
|---|---|---|---|---|---|
| Tomato Whole | Box | 25 | 0 | 75 | false |
| Tomato Whole | Pack | 5 | 0 | 16 | false |
| Tomato Whole | Piece | 1 | 0 | 3.20 | false |
| Bun Sesame | Box | 48 | 0 | 12 | false |
BOM sheet (optional)
Defines bill-of-materials parts for each parent product. Each row is one part.
| Column | Required | Notes |
|---|---|---|
product | Yes | The parent product id or name (the assembled product) |
part | Yes | The component product id or name |
amount | Yes | Quantity of the component per assembly |
unit | Yes | Which UOM of the component to use (must already exist on that component product) |
Rules:
- The parent and the component must already exist in the tenant (create them via the Products sheet first, or in a previous import).
- The
unitmust match a unit name configured on the component product. If you need a non-base unit, add it via the UOM sheet in the same workbook — the UOM sheet is processed before the BOM sheet. - A component can only appear once per parent — duplicate rows update the existing entry.
Example
| product | part | amount | unit |
|---|---|---|---|
| Whopper | Bun Sesame | 1 | Piece |
| Whopper | Tomato Whole | 2 | Piece |
| Whopper | Beef Patty 113g | 1 | Piece |
Error handling
After the import runs you get a summary with:
- Created — new products
- Updated — existing products merged
- Skipped — rows rejected, with row number + reason
- Errors — per-row error list (e.g.
UOM sheet: product 'Tomato Whole' not found)
Failed rows do not block the rest of the workbook — the import continues and only the bad rows are skipped.
Tips
- Download the template from Products → Import → Download template — it contains the Products and BOM sheets with the expected headers already in place. Add a
UOMsheet manually if you need it. - Keep the file under ~5000 rows total across all sheets per import. Split larger catalogues into batches.
- For repeat imports against the same tenant, always set the
idcolumn so updates merge rather than create duplicates.