Hi {{contact.first_name}}, I saw {{contact.company}} is hiring.
See every variable and what it means in the Variables reference.
Variables show in color wherever you write or read a message: in the text box while you type, in the subject, in the email editor, on the step cards and in your templates. A variable that won’t be filled in (a misspelled name, an unknown field or a secret) shows in red with a wavy underline; hover it in a list to see why. In a step’s Preview, the parts that came from variables are colored too, and an empty one shows its name in red.
Add a variable to a message
1
Open the message
Click the Message (or Connect) step on the builder.
2
Use the row above the text box
Click Variables (next to Templates and Write with AI). The list starts with the usual ones (Contact first name, Contact job title, Contact company). Its search box is ready to type in: write part of a name (“industry”, “campaign”; capitals and accents don’t matter), press Enter to insert the first match, or Esc to close. Create variable adds a new contact field right there. In a subject, the single Insert button next to it holds the variables, your templates and Write with AI. In an integration step’s fields (for example Slack), the bar shows quick buttons and More variables.
3
Check what an empty value writes
The step’s panel has a Handle missing data section with one box per variable in the message (click its line to open it; it says how many variables have no fallback). An empty box shows what the contact gets without a value: your workspace’s default (for example Default: “there” for the first name) or, for a variable with no default, No fallback: the contact waits. Type something to use it in this message only, or leave the box empty to keep the default.
Type a variable as you write
You don’t need the menu: in any text box (messages, subjects, emails, notes, Slack texts, templates), type{{ and a small list of variables opens right where you’re writing. Keep typing to narrow it ({{fir finds Contact first name; you can type the name in your language too, and capitals and accents don’t matter), then:
- Up / Down arrows to move, Enter or Tab to insert, Esc to close.
- Or click (tap on a phone) the one you want.
contact., company., sender., links. or steps. at the start of a word opens the list too, showing only that kind of variable: pick one and Kerux writes the whole variable, braces included (contact. then Email gives {{email}}). After a bare contact. nothing is chosen until you press an arrow, so Enter still starts a new line. Email addresses and links (ana@contact.com, www.contact.io) never open it. To open the list anywhere, press Ctrl+Space.
The list holds the same variables as the Variables menu, including your custom fields and the results of earlier steps. It inserts the plain variable; add what to write when it’s empty in Handle missing data.
Kinds of variables
- Contact fields (the person the campaign writes to):
{{contact.first_name}},{{contact.last_name}},{{contact.company}},{{contact.title}},{{contact.linkedin_url}},{{email}}, plus your custom fields as{{contact.custom.field_name}}. The buttons say whose each one is: Contact first name, Contact LinkedIn URL… Older texts keep working:{{lead.first_name}}and the short form{{first_name}}mean the same as{{contact.first_name}}, so you don’t need to change saved campaigns. The email is always{{email}}(the button Email), never{{contact.email}}; the old{{lead.email}}no longer works. Kerux already changed it to{{email}}in every campaign, template and rule that used it; if you type or paste{{lead.email}}, the step says a variable is written incorrectly, so change it to{{email}}. - You: Your first name inserts
{{sender.first_name}}, the first name of the LinkedIn account that sends. - Company fields:
{{company.industry}},{{company.website}},{{company.employee_count}}… - Campaign: Campaign name
{{campaign.name}}, Campaign link{{campaign.link}}(the full link to this campaign in Kerux, handy in a Slack or team notification) and Campaign ID{{campaign.id}}. They are never empty for a contact in a campaign, so they need nothing in Handle missing data. - Meeting (campaigns that start from Meeting booked, Meeting cancelled or Meeting starts soon, and Always-on boxes about meetings):
{{meeting.start}}(date and time in your workspace’s timezone, like 2026-11-10 10:00 (America/New_York)),{{meeting.date}},{{meeting.time}},{{meeting.weekday}}(the day of the week),{{meeting.timezone}},{{meeting.title}}and{{meeting.link}}(the video call link; often empty, so give it a default text like{{meeting.link | default: "the link is in the invite"}}, or the message waits). See Meetings booked by contacts. - Email click (campaigns that start from Email link clicked): Link clicked
{{trigger.clicked_link}}, the link the contact clicked in your email. - LinkedIn reaction (campaigns that start from Reacted to a LinkedIn message): Reaction (emoji)
{{trigger.reaction}}, the emoji the contact reacted with. - LinkedIn invitation (campaigns that start from Invitation received): Invitation note
{{trigger.invitation_note}}, the note the person wrote with their invitation. It is often empty, so give it a value in the message’s Handle missing data section. - Workspace variables: values every campaign can use, like
{{workspace.vars.calendar_link}}. Edit them in Integrations > Variables. - Data from other apps: answers from webhook steps, for example a video link.
Message templates
Save messages you reuse, with their variables, and insert them in any campaign. Above each message, open Templates and pick one, or click Save this message as a template. Manage templates (or Templates in the left menu) lists them, where you can add, edit or delete them. Deleting a template doesn’t change campaigns that used it. A template can keep a subject too (Subject (InMail or email) in Manage templates; optional). Inserting it in an InMail or email step fills the step’s subject as well (the menu says with subject); in a message step only the text goes in. Save this message as a template from an InMail or email step saves its subject with it. From a rich text or HTML email it also keeps the formatting and pictures (up to 8,000 characters), and inserting that template in an email step brings them back. For bigger, designed emails (blocks, your own HTML, up to 100,000 characters), use Email templates instead: they are separate, under Templates > Email templates, and a Send email step picks them with Use a template.Spintax
Write{Hi|Hello|Hey} and each contact gets one of the options. The same contact always gets the same one.
When a contact has no value
These contact fields have a default value (a fallback), so a message never has a hole:Hey {{contact.first_name}} becomes “Hey there” when a contact has no first name. The defaults are in Integrations > Variables, under When a contact field is empty:
Type another default, or leave a box empty to write nothing, then click Save defaults. Tick Wait for the data next to a field so contacts without it wait instead. What you type in a message’s Handle missing data section always wins over these defaults.
Kerux also fills empty names, headline, job title, company and location from the LinkedIn profile when it reads it, without changing anything the contact already has. The contact’s history shows Filled in from LinkedIn.
Safe sending
In the builder, click the red need attention on the step (or Fix now in the campaign’s banner): a small window lists the contacts waiting there and the exact variable each one is missing, with the same fixes plus Or give … a fallback on this step, for every contact (type what to write when it’s empty and click Use and retry: it’s saved on the step for every contact, and the paused contacts go on), Skip this step and Retry now. See Follow your contacts. Or open the contact: Kerux AI says which field is missing, right on the step where it stopped (“Hi! Ana stopped here because they have no Last name…”), and offers the ways out:- For a field of the contact, type the value and click Save and continue: the step goes on by itself, no Retry needed. Filling the field on the contact page (or through the API) works the same way.
- Send anyway: the step goes out now with that value left empty. The same button is in Home > Tasks, next to a send waiting for missing data.
- Remove Last name from the message and retry: takes the variable out of that step for every contact in the campaign, and every contact paused on it goes on now. Kerux asks you to confirm first.
- Change the message: opens the step, to edit it or give the variable a value in Handle missing data.
- Ask me about this: opens the assistant with the question already asked.