Skip to content

BoM Builder

Introduction

The BoM Builder (Bill of Materials Builder) controls how a finished configuration is presented on the PDF quote, Excel export, Checkout page, and Quotation email. Where the Form Builder defines what the user fills in, the BoM Builder defines what the customer sees in the output.

Each configurator has exactly one BoM. You decide which channels it appears in, which columns are shown, how rows are grouped, and how subtotals and summary totals are calculated.

You’ll find the BoM Builder by opening any configurator in the dashboard and clicking the BoM Builder tab next to Form Builder.

Overview of components

The BoM is built from a small set of nested components. Once you understand these, the editor is straightforward.

ComponentRole
BoMThe container for the whole configurator. Controls which channels (PDF/Excel/Checkout/Email) the BoM is visible in.
TablesTop-level sections within the BoM. Each table has its own columns, groups, and visibility settings.
ColumnsThe vertical columns of a table (e.g. SKU, Name, Quantity, Price). You choose which data each column shows.
GroupsSub-sections inside a table — e.g. “Components”, “Accessories”. Useful for organising long BoMs into readable chunks.
RowsThe individual lines inside a group. Three row types: Form element, Subtotal, and Text Block.
SummaryA final section at the bottom of the BoM with aggregated totals (e.g. Total Sales Price, Total Margin).

The hierarchy is: BoM → Tables → (Columns + Groups) → Rows, plus a single Summary with its own rows.

Channel visibility (“Hide in output”)

Every component has four Hide in output toggles — one for each channel:

ChannelWhat it controls
PDFThe downloadable PDF quote
ExcelThe Excel export
CheckoutThe Quotation overview shown on the checkout page
EmailThe quotation email sent to customers

You can hide the entire BoM from a channel (BoM-level toggle in the top right of the BoM Builder page), hide a single table, hide a column, hide a group, or hide an individual row. The effect is cumulative — if any parent hides a channel, every child is hidden in that channel too.

Tables

A Table is the top-level section in your BoM. Most configurators only need one table, but you can add more when you want clearly separated sections (e.g. a “Hardware” table and a separate “Software licences” table).

Fields within Tables

FieldDescriptionDetails
LabelThe heading shown above the table in output.Fully localized.
Hide in outputPer-channel visibility toggles (PDF / Excel / Checkout / Email).Inherited downwards to groups, columns, and rows.
OrderThe order this table appears among other tables in the BoM.Set via drag-and-drop in the editor.

Columns

Columns define the vertical layout of a table. You pick what each column should show, how wide it is, and how it’s formatted. Common patterns: SKU + Name + Quantity + Price for a products list, or just Label + Value for a vertical spec sheet.

Fields within Columns

FieldDescriptionDetails
LabelThe column header displayed in output.Localized.
FieldWhat data this column pulls from each row.See breakdown of available fields below.
WidthHow wide the column is, as a percentage of the table.Widths across the columns of a table should add up to around 100%.
AlignmentHow the cell content is aligned.Left / Center / Right.
FormatHow the value is rendered.Text / Currency / Percentage / Number / Markdown. Use Currency on price columns so the tenant’s currency symbol is applied.
Include in subtotalWhen ticked, this column is included in per-group Subtotal rows.Enable on price/quantity columns; leave off on text columns like SKU or Name.
Hide in outputPer-channel visibility toggles.Hides this column on its own — useful if e.g. cost prices should only appear in Excel, not on the customer PDF.

Breakdown of available Field types

Field typeWhat it shows
SKUThe SKU of the option/product the row represents.
NameThe name of the option/product.
DescriptionThe description of the option/product.
LabelThe label of the row (typically used for the form element’s label).
QuantityHow many of the option/product the customer selected.
Unit priceThe per-unit price.
Cost priceThe internal cost price (typically hidden from customer-facing channels).
Sales priceThe line’s sales price (quantity × unit price).
DiscountAny discount applied to the row.
MarginSales price minus cost price.
PropertyA product property value (e.g. Wattage, CRI). Choose which property in the column setup.

Groups

Groups are sub-sections inside a table. They organise rows into themed blocks like “Main components”, “Accessories”, or — common in spec-sheet style BoMs — “Product selection”, “Base conditions”, “Prices”.

Fields within Groups

FieldDescriptionDetails
LabelThe heading shown above this group’s rows in output.Localized.
Hide in outputPer-channel visibility toggles.Inherited downwards to all rows in this group.
OrderThe order this group appears within its table.Drag-and-drop in the editor.

Rows

Rows are the actual lines that appear in the output. There are three row types:

Row typePurposeWhat you configure
Form elementPulls a value from a form element the customer filled in.Pick which form element. The row renders once per value (e.g. once per product).
SubtotalA computed subtotal line aggregating columns that have Include in subtotal enabled.Just a label (e.g. “Subtotal”, “Group total”).
Text BlockStatic text — used for headers, separators, or explanatory paragraphs between other rows.Markdown content.

A typical layout

A common pattern is to interleave Text Block rows as section headers with Form element rows pulling values out of the configuration. For example:

Text Block: “Product selection” Form element: Paper product type → renders as “Paper product type: Antim” Form element: Width of roll → renders as “Width of roll: 1150” Text Block: “Prices” Form element: Sales price per unit → renders as “Sales price per unit: 0.233” Subtotal: “Group total” → automatically sums any columns marked “Include in subtotal”

Fields within Rows

FieldDescriptionApplies to
TypeForm element / Subtotal / Text Block.All
Form elementWhich form element this row pulls its value from.Form element
LabelThe displayed label on the row.Subtotal
ContentMarkdown content (headers, paragraphs, separators).Text Block
Hide in outputPer-channel visibility toggles for this single row.All
OrderPosition of the row within its group.All — drag-and-drop.

Summary

The Summary is a special section at the bottom of the BoM, separate from the tables. It’s used for whole-BoM aggregations: “Total sales price”, “Total margin”, “Total quantity”.

It has its own label (e.g. “Order Summary”) and a list of Summary rows.

Fields within Summary rows

FieldDescriptionDetails
LabelThe row label shown in output (e.g. “Total sales price”).Localized.
ColumnWhich column to aggregate across the whole BoM.Quantity / Cost price / Sales price / Margin / a specific Property.
Hide in outputPer-channel visibility for this summary row.E.g. hide cost-price totals from the customer-facing PDF but show them in Excel.
OrderPosition of the row within the summary.Drag-and-drop in the editor.

To open the summary editor, click Edit summary in the top-left of the BoM Builder.

Localization

All labels (table labels, group labels, column headers, summary labels, subtotal labels, Text Block content) support per-language overrides. Use the language switcher in each editor panel (e.g. EN / DA) to set the localized version, just like in the Form Builder.

If you leave a translation blank, the default (English) value is used as a fallback.

Preview tab

Inside the BoM Builder there’s a Preview tab next to the Builder tab. Switch to it to see how the BoM will render in each channel using the current default configuration.

You can also filter the preview by channel — All / PDF / Excel / Checkout / Email — to verify exactly what each channel will look like with the current visibility settings.

A worked example: vertical spec sheet

Here’s a real-world setup for a “Paper rolls” configurator:

  1. One table, labelled “New Table”.
  2. Two columns: SKU (15% width, Text) and Name (15% width, Text). The form element rows fill the value side; the columns are mostly decorative for this layout.
  3. One group containing 26 rows:
    • Text Block “Product selection”
    • 10× Form element rows: Paper product type, Double side coated, Paper type in grams, Width of roll, etc.
    • Text Block “Base conditions”
    • Form element rows: EUWID index type, EUWID Index, Price based on annual paper volumes of
    • Text Block “Prices”
    • Form element rows: Cost price per unit, Sales price per unit, Margin, Currency, etc.
    • Text Block “Hidden variables”
    • Form element rows: Monthly EUWID index, Quarterly EUWID index
  4. BoM-level visibility: visible in PDF and Checkout, hidden in Excel and Email.
  5. Summary: empty (this configurator’s totals are handled per-form, not as a BoM-wide summary).

On checkout this renders as a clean, sectioned spec sheet that mirrors how the customer worked through the form.

A worked example: products list with summary

For a more traditional Bill of Materials with multiple line items:

  1. One table, labelled “Components”.
  2. Four columns:
    • SKU (20% width, Text)
    • Name (40% width, Markdown)
    • Quantity (10% width, Right-aligned, Number)
    • Sales price (30% width, Right-aligned, Currency, Include in subtotal ✓)
  3. One group “Items” with two rows:
    • A Form element row pointing at the product-picker — this renders one BoM line per selected product
    • A Subtotal row labelled “Subtotal”
  4. Summary with one row: “Total” aggregating the Sales price column.
  5. BoM-level visibility: visible everywhere.

Tips

  • Set BoM visibility last. Build out the tables, groups, columns, and rows first; then untick the Hide in output toggles at the BoM level. Brand new BoMs are hidden everywhere by default.
  • Subtotals are column-driven. A Subtotal row aggregates only the columns where you’ve enabled Include in subtotal. If your subtotal shows 0, check the column settings.
  • Form element rows render per value. A row pointing at a single-value element (like a text field) renders one line; a row pointing at a product picker renders one line per selected product.
  • Hide cost prices from customers. Add a Cost price column to your table so it appears in your internal Excel export, then tick Hide in output → PDF, Checkout, Email on that column. The column stays in the Excel but is invisible to the customer.
  • Use Text Blocks as separators. Long BoMs become hard to scan; a Text Block with a markdown heading (## Section name) gives the customer’s eye an anchor every few rows.