# Merge tags: personalizing email with subscriber data

Merge tags are placeholders an email platform fills with each subscriber's data, like their first name. How they work, fallbacks, and how Mimeo does it.

**Definition:** Merge tags are placeholders in an email, such as one for the first name, that the email platform replaces with each recipient's own data when the email is sent.

## How it works

You write a placeholder where the data should go. At send time, the email platform swaps it for that recipient's value. Each platform has its own syntax. Many, Mimeo included, use Liquid, with the placeholder in double curly braces:

```
Hi {{ person.first_name | default: "there" }},
```

Three pieces do most of the work:

- **The placeholder** names a piece of data: a first name, a plan, a city.
- **A fallback** covers people with no value. Without one, a missing first name reads "Hi ,".
- **A condition** shows different text to different people, such as one line for customers and another for everyone else.

## Why it matters

- **Relevance.** A first name, the plan someone is on or the product they bought makes the email read as written for them.
- **Mistakes are public.** A broken or empty placeholder lands in front of every recipient, so fallbacks and previews matter.
- **The data has to exist.** A merge tag can only use what you've collected and kept clean.

## How Mimeo handles it

Mimeo calls them [person variables](https://mimeohq.com/docs/usage/emails#person-variables): `{{ person.first_name }}`, `{{ person.last_name }}`, `{{ person.name }}`, `{{ person.email }}`, `{{ person.fields.<key> }}` for any custom field you've declared under **Settings → Fields**, and `person.tags`, the person's tag names. The `default` filter gives each one a [fallback](https://mimeohq.com/docs/usage/emails#defaults), and `{% if %}`, `{% unless %}` and `{% else %}` give you [conditionals](https://mimeohq.com/docs/usage/emails#conditionals): `{% if person.tags contains "customer" %}` shows a block only to people with that tag. Subject lines and pre-headers take person variables too.

Data reaches those variables through imports and events: the `person` object on each event sets names, fields and tags. Field keys must be declared first, or the API ignores them ([fields](https://mimeohq.com/docs/api/events#fields)). Layouts add `{{ unsubscribe_url }}` and `{{ mailing_address }}`, and renewal reminders get `automation.subscription` for the subscription behind that run.

The [preview](https://mimeohq.com/docs/usage/emails#preview) renders the real email for one actual person, with every variable resolved, so a blank shows up before anyone receives it. See [Mimeo terms](https://mimeohq.com/docs/glossary#working-in-mimeo) for emails in Mimeo's own words.

## Sources

1. [Emails](https://mimeohq.com/docs/usage/emails), checked 2026-10-26
2. [The event contract](https://mimeohq.com/docs/api/events), checked 2026-11-09

---

This is the Markdown copy of https://mimeohq.com/glossary/merge-tags.
