# Custom fields

> Capture organization-specific attributes - refrigerant type, filter size, warranty expiry - as structured, filterable data per record type.

Source: https://app.assetlab.ca/docs/asset-management/custom-fields

Every organization has attributes the standard record doesn't carry: refrigerant type on cooling equipment, filter sizes on air handlers, voltage on panels, warranty expiry on anything. Custom fields make those **structured data** instead of notes-field archaeology.

## How they work

Each field definition is scoped to one **record type** - asset, work order, site, building, system, or infrastructure asset - and applies to **every record of that type**. A "Refrigerant" field defined for assets appears on all assets, not just cooling equipment; keep field names generic enough to make sense portfolio-wide, and leave a field blank where it doesn't apply.

Fields are managed under **Settings**, and asset fields also directly from the Assets page toolbar (Manager and above). A field can be marked **required**, and number fields support a minimum, maximum, and placeholder text.

### Field types

| Type | Use for |
|---|---|
| Text | Free-form short values (filter size "24×24×2") |
| Number | Measurable values (capacity, voltage, weight) - with optional min/max |
| Date | Warranty expiry, last certification |
| Select | Controlled vocabulary (refrigerant: R-410A / R-32 / R-22) |
| Checkbox | Yes/no flags (backflow preventer present) |

> [!tip] Prefer **select** over text whenever values repeat. "R-410A" typed five ways is unfilterable; a dropdown stays clean forever.

## Where the values surface

- On the asset detail page, alongside standard fields
- In list-view columns and filters
- In [reports and exports](/docs/asset-management/reporting)
- Through the [REST API](/docs/reference/rest-api) and [MCP tools](/docs/ai/tools-and-scopes) (`custom_field_definitions` / `custom_field_values` resources)

## During import

The [import wizard](/docs/start/importing-data) can map source columns straight into custom fields - define the fields before running the import and nothing from the legacy spreadsheet gets dropped.

## Governance

A few rules keep custom fields from becoming a junk drawer:

1. **One meaning per field.** Don't reuse "Certification date" for three different certificates - make three fields.
2. **Name for the whole record type.** Since a field appears on every record of its type, prefer names that read sensibly everywhere ("Warranty expiry" over "Chiller warranty").
3. **Retire unused fields carefully.** Deleting a definition **permanently deletes every value recorded against it** - the confirmation reports how many values will be destroyed. Export first if you might want the data back.
