ReferenceInventory & purchasing

Price Book

Open Price Book in Thermal →

What it's for

Price Book is "your flat-rate catalog" — every item you sell, what it costs you, what you charge, and the margin between. Proposals, work-order line items, and invoices all price from here, so this screen sets what the whole shop quotes.

Reach it from Materials & Purchasing → Price Book in the sidebar, at /price-book.

Tabs

The list has no tabs. Filters narrow by kind and status.

Panels and controls

The list

  • Search covers the catalogue — "Search items…".
  • Columns: Item · Code, Type, Category, Cost, Price, Margin, Used 90d, and Actions. Used 90d is the column worth reading before a price change — it tells you whether an item matters.
  • Prices can be edited inline, so a single correction does not need a form.

Bulk actions

Archive, Move to category, Adjust price, and Set margin % for the ticked items. Adjust price takes a Direction, a By amount, and applies it across the selection; Set margin % works backward from a Target margin instead. Repricing a category to a target margin is the common case, and doing it as a bulk action beats editing rows one at a time.

Categories

Categories can be renamed and removed. Uncategorized is the fallback bucket and cannot be removed — "'Uncategorized' is the fallback bucket and can't be removed." — because items removed from a category have to land somewhere.

Import

Catalogue items can be imported from a CSV. You map your columns to Thermal's, and at minimum Code and Name must be mapped before the import will run. An import either applies or does not: "The import couldn't be saved. No changes were made — please try again."

Starting from scratch? Download template on the import screen gives you a CSV with the exact columns the importer accepts and two example rows to replace. Open Price Book and choose Import to get it.

No catalog items yet is the empty state.

What it accepts

FieldFormatRequiredRule
CodeFree text, 60 characters or fewer — "e.g. LAB-001"Yes"Code is required."; "Code must be 60 characters or fewer."; "That code is already in use by another item."
NameFree text — "e.g. Standard labor hour"Yes"Name is required."
KindPick a kindYes"Please select a valid kind."
CategoryFree text — "e.g. HVAC Service"Yes"Category is required."; 120 characters or fewer
Unit priceDollars, e.g. 45.00 or 0Yes"Enter a valid price (e.g. 45.00 or 0)."
Default quantityGreater than zero, e.g. 1 or 0.5Yes"Enter a valid quantity greater than zero (e.g. 1 or 0.5)."
DescriptionFree textNo"Optional — appears on work orders and invoices."
Adjustment valueA non-zero numberYes, to bulk adjust"Enter a non-zero adjustment value."; "Invalid adjustment mode."
Target marginA percentageYes, to set margin"Enter a valid margin percentage."
CSV mappingMap your columnsYes, to import"Map at least the Code and Name columns before importing."; "The file has no data rows to import."

An item cannot be a component of itself — "An item can't be a component of itself." — which is what stops a bundle referencing its way into a loop.

How to configure it

  • Price book settings decide the tiers, the default margin, and how bundles are priced.
  • Inventory settings link catalogue items to stocked parts, which is what makes cost real rather than typed.
  • Job costing settings decide how a priced line lands against a job's margin.

Who can see it

This screen sits behind the Price book area.

Owners and office managers can open it. Dispatchers and technicians cannot — what the shop charges is not a field decision. The gate is checked on the server, not just hidden in the sidebar, so a direct link does not get around it.

The full role matrix is on Roles & permissions.

On this page