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

# Personalization

> Put each person's profile and event data into your emails, subject lines and links, with a fallback for when a value is missing.

Personalization variables (merge tags) put each person's own data into a message: their city, their points balance, the product they last viewed. You write a variable once and RevBridge fills it in for every recipient.

> [!NOTE]
>
> Rolling out: this feature is being enabled account by account. If you don't see it, contact [support@revbridge.ai](mailto:support@revbridge.ai).

## Where you can use them

* The email template, in the [editor](https://docs.revbridge.ai/features/templates.md#edit-an-email)
* The email subject line
* The destination link and its UTM values, in the campaign

SMS and WhatsApp message text don't take these variables yet. Copy written by the AI doesn't add them for you: add them to the template, subject or link yourself.

## Insert a variable

In the editor, type two braces `{{` in a text, or click **Insert variable**. In a button link, use **+ Variable in link**. The picker groups what you can insert:

| Group | What it holds |
| - | - |
| **Person** | Profile properties, with how many profiles have a value and some examples. |
| **Store events** | Properties of events people performed, such as a purchase or a product view. |
| **Entry event** | The event that brought the person into an event-triggered campaign. |
| **Recipient** | First name, full name, email, phone and the unsubscribe link. |

After inserting, set **If empty, use** to choose what a person without that value sees. Without it, the variable becomes empty.

## How variables are written

| You write | What it becomes |
| - | - |
| `{{user.city}}` | The person's `city` profile property. |
| `{{user.city\|your city}}` | The same, or "your city" when it's empty. |
| `{{event.purchase.order_id}}` | The `order_id` of the person's last `purchase` event. |
| `{{event.order_id}}` | In event-triggered campaigns only: the `order_id` of the event that brought the person in. |
| `{{first_name\|customer}}` | The recipient's first name, or "customer". `{{name}}`, `{{email}}` and `{{phone}}` work the same way. |

Spaces inside the braces are fine: `{{ user.city | your city }}`.

> [!WARNING]
>
> Variables are not Liquid: there are no filters or conditions. In `{{ user.name | upcase }}`, "upcase" is the fallback text, and a person with no name sees the word "upcase".

### Property names

* **From a CSV import**, column names are lower-cased and every run of other characters becomes `_`. "Cashback Value" becomes `cashback_value`, and accented letters count as other characters: "Situação" becomes `situa_o`. Write the variable with that name.
* **From the Events API or the Web SDK**, names stay exactly as you sent them. See [Ingesting events](https://docs.revbridge.ai/developer/ingesting-events.md).
* **Event names** follow the same rule as CSV columns: "Product Viewed" becomes `product_viewed`.

## What each person sees

1. The person's value.
2. If there's none, the fallback you set.
3. If there's no fallback, nothing. When a variable becomes empty, the extra space next to it is removed.

Event values come from the last time the person performed that event in the last 90 days.

In links, an empty variable is removed, and an empty query parameter is dropped. Give variables in links a fallback, and put them in the query string, not in the path.

## Check before you send

* In a campaign's subject and link fields, each variable is marked as **Resolves for this campaign**, **Check this variable** or **Blocks the campaign**.
* The **Personalization** panel in the editor lists every variable with its source, how often it has a value, and its fallback. It warns when a property doesn't exist or when an event hasn't happened in the last 90 days.
* In **Preview**, click **View as a person** and search for someone by email or name to see the email with their real data. If the email uses `{{event.<property>}}`, you can also pick the triggering event for that preview.

## Limits

* Up to 20 different variables per campaign. Extra ones get their fallback or stay empty.
* Up to 5 different events per campaign.
* Values are cut at 1 KB each and 2 KB per person in total.
* A variable name can have up to 256 characters.
* Performance and Shopping campaigns read values once, when each run starts. Event-triggered campaigns read profile values at each message.
* A campaign created before personalization was enabled for your account sends variables as written. Create it again to use them.

> [!TIP]
>
> **Ask the assistant.** The [RevBridge MCP](https://docs.revbridge.ai/assistant/overview.md) knows these rules and checks drafts for you:
>
> * "Will the variables in my draft campaign resolve for everyone?"
> * "Rewrite this subject line to use the customer's city, with a fallback."


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.