Skip to content
Letterhead Letterhead Letterhead Help Center
Admin Tools

Personalizing with merge tags

Edit in CMS

Personalization tags are placeholders in your email content that get replaced with each subscriber’s data when the email is sent — personalization at scale. Other platforms call them merge tags, dynamic tags, placeholder tags, or variable tags; the concept is the same.

Values come from profile fields and custom fields, including answers collected by your signup forms.

Every tag on this page stands for a piece of data about the reader. If you’re looking for the tags that stand for a link instead — the unsubscribe link and the link to view the newsletter in a browser — those live in a template you write from HTML, and they’re covered in How can I use HTML in Letterhead?

Writing Hi {{ firstName }}, in a text block shows each subscriber their own first name when they receive it. Merge tags work in the Email Subject field too, so Hey {{ firstName }}, here's this week's roundup greets every reader by name in their inbox.

In the composer’s text blocks a merge tag is ordinary text, exactly as you typed it: you can type one by hand, edit it later, and what you save is what your subscribers receive. You don’t have to remember the names, though:

  1. Place your cursor where the tag should go, or select the words it should replace.
  2. In the formatting toolbar, click Insert merge tag, the button marked {{ }}.
  3. Search or scroll the list and click a tag. It’s inserted as text, with a default value filled in where one makes sense, such as {{ firstName or "there" }}.

The list covers the tags Letterhead fills in itself, the newsletter’s link tags and the common reader fields. Any other tag your sending service understands can still be typed by hand.

To style a tag, select all or part of it and pick any style the toolbar offers, such as bold, italic, underline or a text color. Readers see that styling with their own details in its place. A tag inside a link’s web address keeps working as it is.

If a tag can’t be read (a typo, an unclosed {{ … }}, or a field that doesn’t exist), saving or previewing highlights the block that contains it so you can go straight to it.

Merge tags don’t fill in on test emails. They fill in with real subscriber data when the campaign is sent to your audience.

If your channel sends through Braze, type merge tags by hand using your Braze custom attributes, for example {{ first_name }} or {{ loyalty_points }}. Braze doesn’t check a field name until send time, so a mistyped or renamed field reaches readers as a blank space or a literal {{ }}. Check the spelling against your Braze workspace before you schedule.

Tag support on the newer company-wide Contacts experience

Section titled “Tag support on the newer company-wide Contacts experience”

If your company sends through Letterhead’s classic per-channel audience, every tag on this page is always available for every subscriber — blank if you haven’t filled in that field, but the tag itself always resolves.

If your company is on the newer company-wide Contacts experience, the same tag names still work, but each one only fills in when that contact actually has a value stored for it — profile fields aren’t fixed columns there, they carry over as regular custom fields under the same names. Two tags are worth knowing about specifically:

  • {{ lastOpenDate }} doesn’t fill in yet on the newer Contacts experience — it always resolves blank there, whatever that contact’s real open history looks like. It works normally on the classic per-channel audience.
  • {{ uniqueId }} takes a different shape between the two — a short number on the classic per-channel audience, a longer text string on company-wide Contacts. Either way, it’s a stable identifier unique to that person, safe to use for that purpose.

You can set a default for subscribers missing a value:

Hello {{ firstName or 'Reader' }}!

  • If the first name is available: Hello Bruce!
  • If not: Hello Reader!

Customize the default to fit your voice — ‘Valued Customer’, ‘Friend’, whatever suits. Two tips: use personalization judiciously (overuse can make email feel less personal), and always use straight quotes — curly quotation marks break sending.

A tag in double braces, {{ headline }}, inserts its value as plain text: any &, < or > in the value is encoded so it shows up as that character. That is right for a name or a city. It is wrong for a value that is already written as HTML, such as a data-feed headline stored as Tom &amp; Jerry, which would arrive double-encoded and show the &amp; to the reader.

For that, use three braces: {{{ headline }}}. The value is inserted as is. Letterhead keeps the three braces exactly as you type them, in the editor and in what it sends. Whether they are honoured is up to the sending service: Letterhead’s own sending, Iterable and SendGrid all read three braces as “insert without escaping”. Only use the three-brace form for a value you control, since everything in it reaches the reader as live HTML.

Some advertising and audience partners match your readers by a hashed (scrambled) version of their email address, so the partner never receives the address itself. Two tags give you one:

  • {{ emailSHA256 }} — a SHA-256 hash of the reader’s email address. Spaces are trimmed and the address is lowercased before it’s hashed, which is how partners usually prepare an address, so the same reader hashes the same way on both sides. The result is 64 lowercase letters and numbers (hexadecimal).
  • {{ emailMD5 }} — an MD5 hash of the reader’s email address, exactly as it’s stored.

If a partner asks for a different format — some want the hash Base64-encoded, or clean up addresses further before hashing — check with them before you rely on either tag.

Both tags fill in only when your newsletter is sent through Letterhead. If you send through another email platform, Letterhead doesn’t fill them in, so use that platform’s own hashed email tag instead.

Field NamePersonalization Tag Format
First name{{ firstName }}
Last name{{ lastName }}
UniqueId{{ uniqueId }}
Email Address{{ email }}
Email Address, hashed (see above){{ emailSHA256 }} {{ emailMD5 }}
CampaignId{{ campaignId }}
Job Title{{ jobTitle }}
Job Company/Organization Name{{ jobCompanyOrOrganizationName }}
City{{ city }}
Country{{ country }}
Birthday{{ birthday }}
Member Status{{ memberStatus }}
Last Purchase Date{{ lastPurchaseDate }}
Publication Date{{ publicationDate }} (see format options below)
Subscriber Status{{ subscriberStatus }}
Last Open Date{{ lastOpenDate }}
Last Click Date{{ lastClickDate }}
Interests{{ interests }}
Custom ID 1{{ customID1 }}
Brand/Organization Slug (visible in the URL){{ brandSlug }}
Channel Slug (visible in the URL){{ channelSlug }}
Field NamePersonalization Tag
First name{{ firstName }}
Last name{{ lastName }}
UniqueId{{ uniqueId }}
Age{{ age }}
Address Line 1{{ addressLine1 }}
Address Line 2{{ addressLine2 }}
Attitudes{{ attitudes }}
Birthday{{ birthday }}
Beliefs{{ beliefs }}
Business Website{{ businessWebsite }}
Content Topics{{ contentTopics }}
CRMID{{ CRMID }}
City{{ city }}
Country{{ country }}
Children{{ children }}
Custom ID 1{{ customID1 }}
Custom ID 2{{ customID2 }}
Custom ID 3{{ customID3 }}
Custom ID 4{{ customID4 }}
Custom Behavior 1{{ customBehavior1 }}
Custom Behavior 2{{ customBehavior2 }}
Custom Behavior 3{{ customBehavior3 }}
Custom Behavior 4{{ customBehavior4 }}
Custom Web Profile 1{{ customWebProfile1 }}
Custom Web Profile 2{{ customWebProfile2 }}
Custom Web Profile 3{{ customWebProfile3 }}
Custom Web Profile 4{{ customWebProfile4 }}
Delivery Preference{{ deliveryPreference }}
Events{{ events }}
Ethnicity{{ ethnicity }}
Education{{ education }}
Email Address{{ email }}
Email Address — SHA-256 hash{{ emailSHA256 }}
Email Address — MD5 hash{{ emailMD5 }}
Facebook Profile Name{{ facebookProfileName }}
Gender{{ gender }}
Google Profile Name{{ googleProfileName }}
Honorific{{ honorific }}
Home Phone{{ homePhone }}
Income{{ income }}
Interests{{ interests }}
Instagram Profile Name{{ instagramProfileName }}
Job Title{{ jobTitle }}
Job Company/Organization Name{{ jobCompanyOrOrganizationName }}
Last Contact{{ lastContact }}
Last Event Date{{ lastEventDate }}
Last Purchase Date{{ lastPurchaseDate }}
Last Delivery Date (the date of this send — not stored per subscriber){{ lastDeliveryDate }}
Last Campaign Delivered (this subscriber’s own delivery history){{ lastCampaignDelivered }}
Last Open Date{{ lastOpenDate }}
Last Campaign Opened{{ lastCampaignOpened }}
Last Click Date{{ lastClickDate }}
Last Link Clicked{{ lastLinkClicked }}
Language{{ language }}
Latitude{{ latitude }}
Longitude{{ longitude }}
Letterhead ID{{ letterheadID }}
Last IP Address{{ lastIPAddress }}
LinkedIn Profile Name{{ linkedInProfileName }}
Member Status{{ memberStatus }}
Member Status Changed Date{{ memberStatusChangedDate }}
Most Engaged Topics{{ mostEngagedTopics }}
Most Engaged Sources{{ mostEngagedSources }}
Marital Status{{ maritalStatus }}
Mobile Phone{{ mobilePhone }}
Notes{{ notes }}
Opt-In Time{{ optInTime }}
Opt-In IP{{ optInIP }}
Purchases{{ purchases }}
Postal Code{{ postalCode }}
Pronouns{{ pronouns }}
Political Affiliation{{ politicalAffiliation }}
Pets{{ pets }}
Publication Date{{ publicationDate }} (use a format code below)
Publication Date — International (e.g., 2 January, 2025){{ publicationDate | IntDate }}
Publication Date — Month only (e.g., 01){{ publicationDate | MM }}
Referral Status{{ referralStatus }}
Referral Source{{ referralSource }}
Referred By Email{{ referredByEmail }}
Referred By First Name{{ referredByFirstName }}
Referred By Last Name{{ referredByLastName }}
Race{{ race }}
Region{{ region }}
Religion{{ religion }}
Subscribed Time{{ subscribedTime }}
Subscribed IP{{ subscribedIP }}
Subscriber Status{{ subscriberStatus }}
Subscriber Status Changed Date{{ subscriberStatusChangedDate }}
Sexual Orientation{{ sexualOrientation }}
State/Province{{ stateProvince }}
Suffix{{ suffix }}
Time Zone{{ timeZone }}
Twitter Profile Name{{ twitterProfileName }}
TikTok Profile Name{{ tikTokProfileName }}
Unsubscribe Time{{ unsubscribeTime }}
Unsubscribe IP{{ unsubscribeIP }}
Work Phone{{ workPhone }}
Website{{ website }}
Website Profile Name{{ websiteProfileName }}

Use any of these after the | pipe inside a Publication Date tag (e.g. {{ publicationDate | IntDate }}):

  • IntDate — international format (e.g., “2 January, 2025”)
  • DayDate — day-of-week + date
  • Day — day of week (e.g., “Thursday”)
  • Month — month name (e.g., “January”)
  • MM-DD-YYYY — numeric, US order
  • DD-MM-YYYY — numeric, EU order
  • DD — day of month (e.g., “02”)
  • MM — month only (e.g., “01”)
  • YYYY — year only (e.g., “2025”)

Still can’t find what you need? Contact support.