Personalise messages with variables

Short answer

Variables use double braces: {{name}}, {{phone}}, {{email}}, {{city}}, {{company}}, plus {{date}} and {{time}} which are built in, and any custom field from your import. Names are case-insensitive, so {{Name}} and {{name}} are the same. A variable BuzzRelay cannot resolve is left visible in the message rather than replaced with a blank, so a typo shows up in a test send instead of going out silently.

The syntax

Personalisation variables use double braces:

Hi {{name}}, your order ships to {{city}} tomorrow.

Double braces, not single. {{name}} is a variable. {name} is not — it is left untouched and sends literally, because single braces are reserved for spin text. This is the most common templating mistake, and it is silent: the message goes out reading "Hi {name},".

The two syntaxes are deliberately different so they never collide:

You writeRecipient seesWhy
{{name}}PriyaDouble braces — a variable
{Hi|Hello}Hi or HelloSingle braces with a pipe — spin text
{name}{name}Single braces, no pipe — left alone

Built-in variables

VariableFills with
{{name}}The contact's name
{{phone}}The contact's number
{{email}}The contact's email
{{city}}The contact's city
{{company}}The contact's company
{{date}}Today's date at send time
{{time}}The time at send time

{{date}} and {{time}} are resolved when the message is sent, not when the template is written — which matters for scheduled campaigns.

Custom fields

Every extra column in your imported spreadsheet becomes a variable, named after the column heading. A column Tier becomes {{tier}}; Renewal becomes {{renewal}}. See Import contacts from Excel.

Variable names are case-insensitive, so {{Tier}}, {{tier}} and {{TIER}} all resolve to the same field. Whitespace inside the braces is tolerated too: {{ name }} works.

What happens when a variable is missing

If BuzzRelay cannot resolve a variable — the field is empty for that contact, or you mistyped the name — it leaves the placeholder visible in the message rather than replacing it with a blank.

This is deliberate. A blank would produce "Hi , your order ships" and go out unnoticed; a visible {{naem}} is obvious the moment you send one test message. Always send a test to yourself before running a campaign — it is the fastest way to catch a typo.

The practical consequence is that you should not use a variable that is only populated for part of your list. If half your contacts have no company recorded, a message built around {{company}} will look broken for half of them. Either segment the list into a group where the field is filled in, or keep the variable out of that message.

Writing personalisation that reads naturally

  • Front-load the name. "Hi {{name}}," in the first line does more than the same name buried in paragraph three.
  • One or two variables is enough. A message stuffed with fields reads like a mail merge, which is precisely the impression you are trying to avoid.
  • Use a field that proves you know them. {{product}} or {{renewal}} demonstrates a real relationship in a way that {{city}} does not.
  • Check the capitalisation of your data. If names imported as PRIYA, every message will shout. Fix it in the spreadsheet.
  • Mind the punctuation. "Hi {{name}}!" is fine; "Hi {{name}} !" is not, and it is the kind of thing only a test send reveals.

Combining with spin text

Variables make each message different by data; spin text makes them different by wording. Used together they mean no two sends are byte-identical:

{Hi|Hello|Hey} {{name}}, {quick note|just checking in} —
your {{product}} renews on {{renewal}}.
{Any questions?|Want to review it first?}

See Use spin text to vary your wording, and How to avoid a WhatsApp ban for why identical content is a risk in the first place.

Frequently asked questions

What is the correct variable syntax in BuzzRelay?

Double braces: {{name}}, {{phone}}, {{email}}, {{city}}, {{company}}, plus the built-in {{date}} and {{time}} and any custom field from your import. Single braces are reserved for spin text, so {name} is not a variable and will send literally.

What happens if a variable has no value for a contact?

BuzzRelay leaves the placeholder visible in the message instead of substituting a blank. That is deliberate — an empty substitution would go out unnoticed, whereas a visible placeholder is caught immediately in a test send.

Are variable names case-sensitive?

No. {{Name}}, {{name}} and {{NAME}} all resolve to the same field, and whitespace inside the braces such as {{ name }} is also tolerated.

How do I create my own variables?

Add extra columns to the spreadsheet you import. The column heading becomes the variable name, so a column called Tier is available as {{tier}} in any message template.

Last updated:

Still stuck? Email contact@buzzrelay.cc or use the contact form.