> ## Documentation Index
> Fetch the complete documentation index at: https://docs.waverunnerai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Variables

> Insert dynamic call data, contact info, and appointment details into workflow actions using variables.

Variables are placeholders that Wave Runner replaces with real data when a workflow runs.

Use them in any text field — SMS message body, API URL, CRM field value. Write `{variable_key}` and Wave Runner substitutes the actual value at runtime.

For example:

```text theme={null}
Hi {name}, thanks for your call. Here's what we discussed: {summary}
```

Resolves to:

```text theme={null}
Hi Sarah, thanks for your call. Here's what we discussed: You expressed interest in the Pro plan and asked for a follow-up demo next week.
```

## Inserting variables

Click **+ Insert Variable** inside any text field in a node's configuration panel. The variable picker opens — search by name or browse by category. Click any variable to insert it at your cursor position.

<Tip>
  Type variables directly into any field without the picker. Type `{` followed by the variable key and `}`.
</Tip>

The picker only shows variables available for your workflow's trigger type. Call Data variables do not appear in a Facebook Lead workflow, for example.

## Variable reference

### Contact info

Always available regardless of trigger type.

| Variable         | Description         | Example             |
| ---------------- | ------------------- | ------------------- |
| `{name}`         | Contact's full name | `Sarah Chen`        |
| `{first_name}`   | First name          | `Sarah`             |
| `{last_name}`    | Last name           | `Chen`              |
| `{phone_number}` | Phone number        | `+14155551234`      |
| `{email}`        | Email address       | `sarah@example.com` |

### Call data

Available in workflows triggered by **End of Call**.

| Variable       | Description                         | Example                                           |
| -------------- | ----------------------------------- | ------------------------------------------------- |
| `{summary}`    | AI-generated call summary           | `Sarah asked about pricing and requested a demo.` |
| `{outcome}`    | Call outcome label                  | `booked`, `interested`, `not_interested`          |
| `{duration}`   | Call length in seconds              | `142`                                             |
| `{sentiment}`  | Detected sentiment                  | `positive`, `neutral`, `negative`                 |
| `{transcript}` | Full call transcript                | *(full conversation text)*                        |
| `{urgent}`     | Whether the call was flagged urgent | `true` or `false`                                 |
| `{call_id}`    | Unique call record identifier       | `abc123`                                          |
| `{start_time}` | When the call started (ISO 8601)    | `2026-04-18T14:23:00Z`                            |

<Note>
  Call data variables resolve to empty strings if used in a workflow with a non-call trigger.
</Note>

### Appointment

Available when a booking was made during the call.

| Variable                         | Description                       | Example                  |
| -------------------------------- | --------------------------------- | ------------------------ |
| `{appointment.status}`           | Whether an appointment was booked | `booked` or `not_booked` |
| `{appointment.start_time}`       | Appointment start time (ISO 8601) | `2026-04-22T10:00:00Z`   |
| `{appointment.appointment_date}` | Human-readable date               | `April 22, 2026`         |
| `{appointment.timezone}`         | Appointment timezone              | `America/New_York`       |
| `{appointment.calendar}`         | Calendar the booking was added to | `Sales Demo Calendar`    |

<Tip>
  Use a Condition node to check `{appointment.status} == 'booked'` before sending a confirmation SMS, so it only fires when a booking actually occurred.
</Tip>

### HubSpot contact

Available in workflows triggered by a **HubSpot** event.

| Variable           | Description             |
| ------------------ | ----------------------- |
| `{firstname}`      | First name              |
| `{lastname}`       | Last name               |
| `{email}`          | Email address           |
| `{phone}`          | Phone number            |
| `{company}`        | Associated company      |
| `{lifecyclestage}` | HubSpot lifecycle stage |

Additional properties — city, state, zip, country, job title — are available in the picker when a HubSpot trigger is active.

### Facebook lead

Available in workflows triggered by **Facebook Lead**.

| Variable          | Description          | Example                      |
| ----------------- | -------------------- | ---------------------------- |
| `{full_name}`     | Lead's full name     | `Marcus Rivera`              |
| `{email}`         | Email address        | `marcus@example.com`         |
| `{phone_number}`  | Phone number         | `+13105559876`               |
| `{ad_name}`       | Facebook ad name     | `Spring Promo — Book a Call` |
| `{campaign_name}` | Facebook ad campaign | `Q2 Lead Gen`                |

### Custom variables

Define your own variables on the trigger node. Add entries to the **Custom variables** list on the trigger, give each a key (e.g., `account_tier`), and reference it anywhere in the workflow as `{account_tier}`.

**Use case:** Trigger a workflow via webhook with a custom payload. Define the expected keys as custom variables so downstream nodes can reference them.

## Example: SMS after a booked call

```text theme={null}
Hi {name}! Your appointment is confirmed for {appointment.appointment_date} at {appointment.start_time} ({appointment.timezone}).

Here's a quick summary of our call: {summary}

Reply STOP to opt out.
```

## Next steps

<Card title="Executions" icon="clock" href="/workflows/executions">
  Monitor workflow runs, inspect node logs, and troubleshoot failures.
</Card>
