Skip to main content
A template is a named set of columns, and a column is the unit of validation: it carries the name the agent matches your source data against, the description it reasons from, and the rules every cell has to pass.

Where to configure them

Go to Templates, open a template, then click a column to edit it or Add Column to create one. Changes save to the template and apply to every workbook built from it.
A template can’t be saved while a migration that uses it is running. Wait for the run to finish, or stop it first. The same lock applies to PATCH /templates/{slug}, which returns 409.

Name

The column header in every sheet built from this template, and the handle everything else uses: the import agent matches source columns against it, chat resolves @Column Name to it, and exports use it as the field name. Columns are matched by name, not by an internal id. Renaming a column on a template that already has workbooks is therefore treated as deleting one column and adding another — the renamed column starts empty on sheets that already exist, and any validation errors recorded against the old name are cleared. Settle names before you onboard customers; afterwards, use chat to move the values across.

Description

Plain English describing what belongs in the column. This is not decoration — it is the main thing the import agent reads when it decides which source field maps here and how to transform it. It is also what the AI uses to draft a validation pattern, and what chat consults when you ask it to fix a column. Write what a good value looks like, including the cases that trip people up:
Australian Business Number. 11 digits, no spaces or hyphens. Source system stores it with spaces — strip them. Blank for sole traders without one.
If the agent keeps misreading a column, the description is almost always the fix.

Required

Flags a cell as invalid when it has no value.
  • A cell counts as empty when it is missing, null, an empty string, or whitespace only.
  • The error recorded on the cell is Required field is empty.
  • It does not block an import or an export. Required marks the cell so it shows up in the sheet’s invalid filter and in the import agent’s review — it is a flag to resolve, not a hard stop.

Unique

Flags every cell in a repeated group as invalid.
  • Uniqueness is scoped to one sheet — the rows of this template inside one customer’s workbook. Two different customers may hold the same value.
  • Comparison is case-insensitive and trimmed: ACME , acme and Acme are the same value.
  • Blank cells are skipped. Empty is never a duplicate, however many rows are empty. Combine with Required if a value must be both present and distinct.
  • The error names the count, so you can see the size of the collision: Duplicate value: "acme" appears 3 times.

Validation Rule

The dropdown picks how a cell’s content is checked. Three options:

Strict

Strict holds a regular expression that every non-blank cell must match. You author it three ways, all of which produce the same stored pattern:
  • Visual blocks — the default. Build the pattern from labelled pieces (Digits (11), Letters (1+), @, Choice Options, …) rather than writing regex. Each block takes parameters such as an exact length or a min/max range.
  • Presets — start from a ready-made pattern for a category (Email, Phone, Text, Number, Date, ID / Code) and adjust its parameters.
  • AI — switching a column to Strict while it has a name and a description generates a pattern from them. Review it; it is a starting point, not an answer.
Two things to know about how it is applied:
  • Blank cells are skipped. A pattern never makes a column mandatory — that is what Required is for.
  • The pattern is not anchored for you. \d{11} matches an eleven-digit run anywhere in the value, so abc12345678901x passes. Anchor it — ^\d{11}$ — when you mean the whole value.
A failing cell records Value does not match required pattern. Link means the value has to exist somewhere else — a supplier code that must name a real supplier, a parent id that must resolve. Reference checking is the one rule complex enough to need its own page:

Link columns

Single targets, polymorphic targets chosen per row, and references that live inside a structured value.

Structured values

Everything above treats a cell as one value. A column can instead hold a list, a record, or a list of records — addresses, phone numbers with types, line items. That shape is declared separately from the Validation Rule and is checked alongside it:

Structured values

Declaring a list, a record, or a list of records, and the raw JSON Schema escape hatch.

What actually gets enforced

The Validation Rule dropdown names one check, but a column can carry several at once, and each is enforced on its own:
  • Required, Unique, the pattern, the value’s shape and every link rule are enforced whenever they are present — not only when the dropdown happens to name them. A column set to Strict that also has a link rule gets both checks.
  • Setting the dropdown to Link additionally turns on the grid’s link behaviour: link errors are styled in the sheet and re-checked live as you edit a cell, and the nested webhook export sends the referenced record instead of the raw value. Those two surfaces are the only things that read the dropdown rather than the rule itself.
Practical upshot: pick the dropdown value that matches what the column is for, and don’t worry that adding a second rule will switch the first one off.

When changes take effect

Saving a template re-runs validation across every sheet already using it, but only for what changed:
  • Toggling Required re-checks that column for empties, and clears the old Required field is empty errors when you turn it off.
  • Changing the pattern or the shape re-checks that column’s content.
  • Toggling Unique re-runs duplicate detection, and clears duplicate errors when you turn it off.
  • Removing a column clears every error recorded against it.
Each sheet’s invalid count is recalculated and its cache cleared afterwards, so the workbook reflects the new rules without anyone reopening it.

Next