Skip to main content
A normal variable looks up a value. An AI variable works one out. Where {{ candidate.first_name }} reads a field and drops it in, an AI variable runs a short instruction against the record and inserts what it produces. It is the tool for the line that has to be different every time — an opener that ties someone’s background to a vacancy, or a birthday wish that does not read like a mail merge. You use it exactly like any other variable:
In the editor it appears as a chip, marked with the AI sparkle so you can tell it apart from a normal variable at a glance: Ai Variable Chip In Content

Where you can add one

You can create AI variables in email templates, forms, and automations. The automation builder also offers presets, so a variable you use often does not have to be rebuilt by hand. WhatsApp message templates can reference variables, but the variable list there is read-only — you cannot create an AI variable from the message builder. Define it on the automation that sends the message instead.

When to use one

Reach for an AI variable when all three are true:
  • the output has to be derived, not looked up;
  • a fixed line with a fallback would read badly, because the value genuinely has to change per person;
  • being slightly off is survivable — nobody makes a decision based on it.
Good candidates: a personalised opener, a re-engagement hook for a dormant candidate, a non-generic birthday line, or a tone rewrite of a fixed paragraph.

When to use something else

Most personalisation is not an AI problem. Before adding an AI variable, check whether a plain variable or a modifier already does the job — they are faster, cheaper, and cannot be wrong.
Never let an AI variable invent a fact. Dates, rates, salaries, contract terms, start dates, legal or GDPR status, and anything that reads as a commitment must come from a field. If the field is empty, the honest answer is to leave it out or use a fallback — not to let a model fill the gap. A generated sentence that invents a start date is a false statement sent to a candidate in your name.

Setting one up

Open the variables panel with the {} control in the builder toolbar. Existing variables are listed with their key and type, so an AI one is easy to spot: Ai Variable Variables Panel Choose Add, then pick AI variable from the Intelligent group: Ai Variable Type Picker

Choosing what the AI should do

Before anything else, the editor asks what kind of job this variable is doing. There are seven modes, each shown as a tile with a one-line description: Ai Variable Mode Picker
The mode is not locked in. Once you pick one, the tiles collapse into a compact dropdown, and you can change it whenever you like — reopen the variable and choose a different mode under What should the AI do?. The rest of the form adjusts to match.

The rest of the editor

Ai Variable Editor
An AI variable does not have to produce prose. Because you choose the return type, one can just as well resolve to a Yes / No, a Number, or a value from a List — which is what the Classify and Extract modes are for. The warning above still applies: deriving a value from data in the record is fine, inventing one is not.

Giving it something to work from

The instruction alone is rarely enough — the model needs the record. There are two ways to hand it over, and they can be combined.

Inline in the prompt

Type {{ anywhere in the Input box and a picker appears, listing every variable available to this template with its key and its type. Keep typing to filter, then choose one to insert it:
Ai Variable Prompt Variable Picker 1
So a birthday wish that greets the recipient by name reads:
Each token is replaced with that recipient’s value before the instruction reaches the model, so for Sofia the model is asked for a wish for Sofia rather than for {{recipient.first_name}}.

The Variables tab

Switch to the Variables tab and choose Add Field to attach fields instead of naming them in the prompt. Each row is a searchable picker over the same list of variables, and the button removes one.
Ai Variable Picker
Attaching a field hands its value to the model without you having to mention it in the instruction. It also makes the variable’s inputs obvious to whoever opens it next, which is worth doing once the prompt gets long.

Why the inputs matter

The fields you reference, by either method, are the variable’s inputs — and inputs are what decide when it is worked out again. Give it the fields it genuinely depends on rather than describing them in prose. See Limitations.

Writing the instruction

A usable instruction names its shape and its limits. Let the dedicated controls do the work they are there for — set the output language in the Language control rather than describing it in the prompt, and set the return type rather than asking for one:
Write a friendly, single-sentence birthday wish, maximum 20 words. Vary the wording so it does not sound templated. No emoji. Do not open with “Happy birthday”. If the recipient’s name is missing, write a general wish with no name.
That last sentence matters most. Say what to do when the data is missing, or the model will invent something to fill the space. Longer instructions are not better instructions. Constraints do more work than description. State the maximum length, the tone, what it must not do, and what to produce when the source data is thin.

Limitations

It resolves once per send, then repeats. The value is generated the first time the variable is referenced and reused for every other mention in the same message — so {{ celebration }} twice in one email gives you the same sentence twice, not two attempts. It is worked out again when its inputs change, which is what makes it per-recipient. A variable with no inputs attached has nothing to vary on. A stored default is not a safety net. For an AI variable, the default value is the slot the generated value is written into, not a fallback you can set. If the model returns nothing, the variable resolves to nothing. To guarantee something lands on the page, use the default modifier where you reference it:
A valid template can still send with a hole in it. Validation checks that a placeholder is known, not that it will have a value when the message goes out. So this template:
can validate perfectly and still arrive as an email that opens with a blank line, followed by “We hope you take some time today to celebrate.” The template is not broken. The variable produced nothing. Test sends behave differently from real ones. On a test send, every custom variable referenced in the body needs an explicit, non-empty value that you supply — stored values are deliberately not substituted. A clean test therefore proves the copy works; it does not prove the variable will resolve in production. If a recipient reports a message with a missing sentence, an empty greeting, or a stray fragment, check which variables are AI variables before assuming the copy is wrong.

Before you send

1

Test with complete data

Confirm the value reads well and stays inside your length limit.
2

Test with missing and empty data

This is where AI variables fail. Check that a thin record produces something acceptable rather than a hallucinated detail or an empty line.
3

Test in every language you send in

Tone and formality do not transfer between languages. A line that reads warm in English can read overfamiliar in Dutch.
4

Read it as the recipient

Ask whether a candidate would be embarrassed, confused, or misled by this sentence. If the answer is maybe, tighten the constraints or use a fixed line.

Related topics

VariablesModifiers