What merge tokens can I use?
Every merge token, what it resolves to, what happens when the field is empty, and how malformed tokens behave.
4 min read
A merge token drops one contact’s own data into a subject line or a message body. ColdMerge uses its own small syntax, not Handlebars, Mustache or Liquid. There are no loops, no conditions and no property paths.
{{fieldName}}{{fieldName | fallback text}}What each token resolves to
Section titled “What each token resolves to”| You write | It resolves to | If the field is empty |
|---|---|---|
{{email}} |
The contact’s address. The only built-in. | Never empty. It is how a contact is identified. |
{{firstName}} |
The contact’s firstName field. Offered on every contact by convention. |
The send to that person is blocked. |
{{lastName}} |
The contact’s lastName field. |
The send to that person is blocked. |
{{anyColumn}} |
Any column header from an import, matched exactly. | The send to that person is blocked. |
{{company | your team}} |
The contact’s company field. |
your team. Nothing is blocked. |
{{company | a | b}} |
The contact’s company field. The first | separates, so the fallback is a | b. |
a | b |
{{ firstName }} |
The same as {{firstName}}. Whitespace inside the braces is trimmed. |
Blocked, as above. |
{{Firstname}} |
A field literally named Firstname. Match is exact, case included. |
Blocked, as above. If no such field exists it is always empty. |
{{id}}, {{createdAt}} |
Nothing. ColdMerge’s own values are not addressable. If your import had a column with that name, the token reads your column, not ours. | Blocked, as above. |
Absent, empty, and whitespace-only all count as empty. A field that looks filled in but carries only spaces produces “Hi ,” without the guard, which is exactly what the guard exists to stop.
A stored custom field named email is legal, but {{email}} renders the address,
not that field.
Field names cannot contain |, {, } or a line break. A column with one of
those in its header is refused at the import mapping step and never becomes a
token.
Spaces and Unicode characters are valid in field names, such as {{company name}}
or {{équipe}}. The body editor preserves these names when you save and reopen.
What the missing-field guard does
Section titled “What the missing-field guard does”A token with no value and no fallback triggers the missing-field guard. Your campaign’s launch decision determines whether the message is skipped or sent with empty tokens.
| Where | What happens |
|---|---|
| The first email | Your launch decision applies: Skip those contacts (the default), or Send anyway, with the tokens empty. Set at the launch wizard’s second step. |
| A follow-up | With Skip those contacts, that step is skipped for that person. The next step remains due after its own delay from the last actual send. Send anyway, with the tokens empty also permits empty tokens in follow-ups. |
| A preview | Nothing is blocked. The preview reports which tokens rendered empty instead, because seeing the gap is the point. |
Adding a fallback is the fix that produces good mail. See Launch a campaign for the decision, and What a preview send really does for the report.
There is no way to write a default once for a whole campaign. A fallback belongs to one token.
Writing an empty fallback
Section titled “Writing an empty fallback”{{company |}} means “render nothing here, and do not block the send” when the
field is missing. It works in the Subject and body, and the body editor keeps
the empty fallback when you save and reopen the message.
Use a written fallback, such as {{company | your team}}, when leaving the field
blank would make the sentence awkward.
Malformed tokens
Section titled “Malformed tokens”A token ColdMerge cannot read is left in the message exactly as you typed it, as literal text. It does not throw an error and it does not disappear.
| You write | Result |
|---|---|
{{firstName |
No closing }}, so it is literal text. |
{{first then a line break then Name}} |
A line break inside the braces, so it is literal text. |
{{ {{firstName}} |
A brace inside the braces. There is no nesting, so the leading {{ is literal text and {{firstName}} is a real token. |
{{}} or {{ | there}} |
An empty field name, so it is literal text. |
There is no escape sequence for a literal {{. Writing about the syntax in a
message is safe, because malformed tokens ship as they are written.
Escaping and formats
Section titled “Escaping and formats”| Where the value lands | How it is inserted |
|---|---|
| A plain text message | Raw. Smith & Sons arrives as Smith & Sons. |
| An HTML message | Escaped, because contact data is untrusted. Fallback text is escaped the same way. |
| A subject line | Always text, never markup. |
You do not choose the format. It follows from what you wrote. See Write your campaign.
Live data, or a snapshot
Section titled “Live data, or a snapshot”| Which email | Which data |
|---|---|
| The first email | Live. Rendered from the contact as they are at the moment it is sent, so fixing somebody’s company name on day one does reach them if their send is on day three. |
| Every follow-up | Frozen. A contact’s merge data is captured when they are enrolled, which happens at their first send. A correction after that never reaches their follow-ups. |