# Personalization Beyond First Name — Using Merge Tags in AcelleMail

> Drop a subscriber's name, location, last-purchase, or any custom field straight into your email subject and body. The AcelleMail builder has a merge-tag picker that surfaces every field on your list — no syntax to memorize. This guide walks the UI; raw Twig syntax for power users is in the collapsible section.

- Canonical URL: https://acellesend.com/kb/articles/personalization-beyond-first-name-advanced-merge-tags
- Author: Sofia Lindqvist, Email Marketing Editor
- Category: Email Marketing — Campaign creation, templates, A/B testing, personalization, scheduling
- Content type: tutorial · Difficulty: beginner
- Tags: Acellemail
- Published: 2026-01-13 · Last updated: 2026-08-15
- Reading time: 5 min
- Publisher: AcelleMail Knowledge Base, https://acellesend.com/kb

---

## What a merge tag actually does

A merge tag is a placeholder you drop into your email subject or body that AcelleMail replaces — per recipient, at send time — with that subscriber's actual value.

Subject `Hey {{ subscriber.first_name }}, your invoice for July` becomes `Hey Maria, your invoice for July` for Maria, `Hey Tobias, your invoice for July` for Tobias.

The values come from list fields — every list has at least `email` + `first_name` + `last_name`, and you can add unlimited custom fields like `city`, `signup_plan`, `last_purchase_total`.

## Insert a merge tag from the campaign builder

### 1. Start typing in the subject line

In any campaign, the **Subject** field accepts merge tags inline. Click the field and start typing — AcelleMail shows a hint about merge-tag insertion:

![Subject field — merge tag hint visible](https://acellesend.com/plugins/acelle/landing/images/help/kb/merge-tags/01-setup-subject-hint.png)

You can paste a tag directly (`{{ subscriber.first_name }}`) OR open the picker for the full list.

### 2. The merge-tag picker (autosuggest)

Type `{{` in the subject — or open the body builder's right-side panel — and the autosuggest dropdown lists every available tag, scoped to this list's actual fields:

![Merge-tag autosuggest picker](https://acellesend.com/plugins/acelle/landing/images/help/kb/merge-tags/02-merge-tag-autosuggest.png)

Click a tag to insert it. The picker scopes to:

- **Subscriber fields** — every column on your list (`email`, `first_name`, custom fields)
- **System tags** — `{{ unsubscribe_url }}`, `{{ web_view_url }}`, `{{ campaign.name }}`, `{{ send_date }}`
- **Conditional helpers** — `{% if %}` ... `{% endif %}` (Twig syntax — see Advanced)

### 3. Manage the list's custom fields

The picker only shows fields that exist on the list. To add a new field, **Audience → [list] → Fields**:

![List fields configuration](https://acellesend.com/plugins/acelle/landing/images/help/kb/merge-tags/03-list-fields.png)

For each field, set:

- **Tag (the key)** — e.g. `city` becomes `{{ subscriber.city }}` in emails
- **Type** — text / number / date / dropdown / multi-select
- **Required at signup** — appears on the signup form, blocks if blank
- **Default value** — fallback for existing subscribers without this field set

After adding a field, re-run an import (or update via API) to back-fill values for existing subscribers — they won't be back-filled automatically.

## Common UI patterns that work

| What you want | How to write it |
|---|---|
| First name with a fallback if unknown | `Hi {{ subscriber.first_name \| default('there') }}` |
| Full name (joined) | `{{ subscriber.first_name }} {{ subscriber.last_name }}` |
| Date formatting | `{{ subscriber.signup_date \| date('F j, Y') }}` |
| Uppercase a value | `{{ subscriber.city \| upper }}` |
| Truncate a string | `{{ subscriber.bio \| truncate(80) }}` |
| Numeric formatting | `${{ subscriber.lifetime_value \| number_format(2) }}` |

These filters use Twig syntax — the AcelleMail builder renders them at send time. You can test any tag by clicking **Preview** in the campaign builder and toggling the *Use sample subscriber* dropdown:

![Sample subscriber preview](https://acellesend.com/plugins/acelle/landing/images/help/kb/preview/01-campaign-preview.png)

## Common pitfalls + UI fixes

| Symptom | Likely cause | UI fix |
|---|---|---|
| Email shows literal `{{ subscriber.city }}` instead of "Berlin" | Field doesn't exist on this list, OR typo in tag name | Open **Audience → [list] → Fields** — confirm the tag matches exactly |
| First name field empty for half the list | Imported CSV had no `first_name` column | Use `\| default('friend')` filter, OR re-export source + re-import with field mapping |
| Picker doesn't show a field you added | Page cached pre-add | Hard refresh (Cmd-Shift-R / Ctrl-F5), or close + reopen the builder |
| Subject renders blank for some recipients | The field is empty for those subscribers + no `default` filter | Add `\| default('something')` to the merge tag |

<details>
<summary><strong>Advanced: Twig conditionals, loops, and computed merge tags</strong></summary>

AcelleMail's body and subject support the full Twig templating language — including conditionals and loops — for cases the autosuggest picker doesn't cover.

**Conditional content blocks:**

```twig
{% if subscriber.signup_plan == 'enterprise' %}
  <p>Your Enterprise account manager is Sarah — book a call here.</p>
{% elseif subscriber.signup_plan == 'pro' %}
  <p>Pro users get priority support — reply to this email anytime.</p>
{% else %}
  <p>Get faster response times by upgrading.</p>
{% endif %}
```

**Tag-based blocks** (using the multi-value tags field):

```twig
{% if 'vip' in subscriber.tags %}
  <p>VIP early access: <a href="...">claim your slot</a></p>
{% endif %}
```

**Loops over array fields** (when a custom field is JSON-encoded list):

```twig
<ul>
{% for product in subscriber.recent_purchases %}
  <li>{{ product.name }} — ${{ product.price }}</li>
{% endfor %}
</ul>
```

**Computed values inline:**

```twig
{% set discount = subscriber.lifetime_value > 500 ? 20 : 10 %}
Your loyalty discount: {{ discount }}%
```

**Default filter chains** for safety:

```twig
Hi {{ (subscriber.first_name | default(subscriber.email | split('@') | first)) | capitalize }}
```

This says: try `first_name`, fall back to the part of the email before `@`, then capitalize. Bullet-proof against missing fields.

**Per-campaign override fields** — if you need a value computed at send time (e.g. discount code unique per recipient), use the AcelleMail API to populate a custom field just before launching the campaign, OR set up an automation that sets the field when the trigger fires.

For a deeper Twig reference, the upstream syntax docs at [twig.symfony.com](https://twig.symfony.com/doc/3.x/) apply directly — AcelleMail uses Twig 3.x.

</details>

## Related articles

- [Email template design — best practices](https://acellesend.com/kb/articles/email-template-design-best-practices)
- [Importing contacts CSV — best practices and field mapping](https://acellesend.com/kb/articles/importing-contacts-csv-best-practices-and-field-mapping)
- [Building a welcome email series in AcelleMail](https://acellesend.com/kb/articles/building-a-welcome-email-series-in-acellemail)
- [Setting up UTM parameters for campaign tracking](https://acellesend.com/kb/articles/setting-up-utm-parameters-for-email-campaign-tracking)

---

## Related articles

- [Email Template Design Best Practices — Using AcelleMail's Builder Right](https://acellesend.com/kb/articles/email-template-design-best-practices): Single column on mobile, alt text on every image, preheader you actually wrote, button width tested in real clients — most "best practice" lists are abstract. This one walks the AcelleMail builder showing where each setting lives and what to verify in Preview before you Send.
- [How to Write Email Copy That Converts — The Practical Framework](https://acellesend.com/kb/articles/how-to-write-email-copy-that-converts): You've got the list, the template, the schedule. What goes in the body? This guide is the practical copywriting framework — what to say, how to structure it, how to verify it lands. Less theory, more "type this, not that."
- [A/B Testing Email Subject Lines for Better Open Rates](https://acellesend.com/kb/articles/ab-testing-email-subject-lines-for-better-open-rates): A/B testing the subject lifts open rates 10-30% sustainably. AcelleMail's built-in A/B feature splits your list, picks the winner automatically, ships the winning variant to the rest. This guide walks the setup + the discipline that makes the test meaningful.
- [Your First Email Campaign in AcelleMail — The 7-Step Walkthrough](https://acellesend.com/kb/articles/creating-your-first-email-campaign-in-acellemail): A guided walk through AcelleMail's campaign builder from "New campaign" button to "Launch" button. Subject + recipients + template + schedule + confirm — visual flow + the decisions at each step.
- [Campaign Scheduling and Timezone Optimization in AcelleMail](https://acellesend.com/kb/articles/campaign-scheduling-and-timezone-optimization): When you send a campaign at "9am" — whose 9am? Yours, your subscribers'? AcelleMail's scheduler defaults to your account timezone. This guide walks the UI + timezone-aware patterns + send-time optimization.
