Variables let a text, email or note in your automation say the customer's name, your business name or a detail from an earlier step, instead of the same words for everyone. You insert them while writing the step; they're filled in with real details each time the automation runs.
Insert a variable
In any step field that accepts variables (a text message, an email subject or body, a note, a filter's Field), open the variable list next to the field. It's grouped by where the detail comes from:
- Trigger: … (for example Trigger: When a call is missed) holds details from the event that started the automation.
- Step 1 — Get customer, Step 2 — Send / fetch via webhook and so on hold what earlier steps produced.
Click a variable to insert it. It appears as a small tag in the text, and underneath it's written like {{customer.first_name}}. You can also type that form yourself.
Details you can always use
These work with every trigger that involves a customer:
| Variable | Example |
|---|---|
{{customer.first_name}} | Sarah |
{{customer.last_name}} | Chen |
{{customer.full_name}} | Sarah Chen (or the company name if there's no personal name) |
{{customer.company_name}} | Chen Property Group |
{{customer.phone}} | Customer's phone |
{{customer.email}} | Customer's email |
{{customer.address}} | Billing address on one line |
{{org.name}} | Your business name |
{{org.phone}} | Your business phone |
Call triggers
| Variable | What it holds |
|---|---|
{{call.from_number}} | The caller's number |
{{call.to_number}} | The business number they dialed |
{{call.caller_display}} | The customer's name if the number matched one, otherwise the formatted number (missed calls) |
{{call.voicemail_left}} | Whether they had left a voicemail when the automation started (missed calls) |
{{call.summary}}, {{call.call_intent}}, {{call.urgency_level}} | What the AI receptionist picked up from the conversation (AI calls) |
Other trigger details
Job, estimate, invoice, payment and membership triggers list more details under Trigger: … in the variable list. Before relying on one in a message to customers, check it:
- Point a test version of the automation at yourself (Send to → Custom phone or Custom email).
- Make the trigger happen once.
- Open the run under Runs and look at what the message step actually sent. See Viewing automation runs and step timelines.
If a detail came out blank, use a different one, or add a Get step first and use its output.
Details from earlier steps
Steps that look up or create something make their results available to the steps after them. They're in the variable list under the step's name, and look like {{steps.<step>.output.<detail>}}. Always pick them from the list rather than typing them.
| Step | What later steps can use |
|---|---|
| Get customer | First and last name, email, phone, tags, source |
| Get estimate | Status, total, approved total, approval date, expiry date |
| Get job | Status, assigned tech, next appointment start, when the job wrapped |
| Create customer | The new customer's ID |
| Create job | The new job's ID |
| Create invoice from job | The invoice ID, number and total |
| Send / fetch via webhook | The response status and the reply from the other app |
Example: add Get customer after a Delay, then use its first name in Send SMS, so a customer who corrected their name in the meantime is greeted correctly.
Inbound webhook data
With the When an inbound webhook fires trigger, the fields the other app sends are the variables. If it sends {"first_name": "Sarah", "source": "Facebook"}, use {{first_name}} and {{source}}. Nested fields use dots, such as {{address.street}}. See Triggering automations from an inbound webhook.
When a detail is missing
A variable with nothing to fill in (a customer with no email, a field the other app didn't send) comes out blank; the message still sends. Write messages that still read well if a detail is empty, or add a Filter with is not empty before the send step.
Not available
- "If this, say that" inside one message. Use Paths with a different message in each branch. See Filters, paths, and delays.
- Your own custom variable names. Read the detail from a record with a Get step instead.
Built-in messages have their own list of variables when you change their wording. See Changing the wording of a built-in message.