Skip to content

Personalizing emails with tokens

Fill in names, order details, and company information from the recipient's contact record and primary company.

Tokens are placeholders in a template’s subject or body that Transactional Email replaces with real values at send time. Two kinds are supported:

  • {{ contact.<property> }} — a property of the recipient’s contact: the HubSpot contact whose email (primary or additional) matches Recipient email in the workflow action. If several contacts share the address, the most recently updated one is used.
  • {{ company.<property> }} — a property of that contact’s primary company.

Tokens inserted with HubSpot’s Personalize button in the email editor work too: they look like {{ personalization_token('contact.firstname', 'there') }}, and the second value is the default.

Use each property’s internal name, such as firstname, lastname, or a custom property like order_number. You’ll find it on the property’s details in HubSpot’s property settings.

You type The recipient sees
Hi {{ contact.firstname }}, Hi Dana,
Hi {{ contact.firstname | default('there') }}, Hi there, (when the contact has no first name)
Order {{ contact.order_number }} is confirmed Order 10482 is confirmed
Thanks for choosing {{ company.name }} Thanks for choosing Acme Inc.
Your {{ contact.plan_tier }} plan renews on {{ contact.renewal_date }} Your Gold plan renews on November 1, 2026
  • Empty properties become empty text. If the contact has no value, the token disappears — unless you give it a default with | default('…'), as in {{ contact.firstname | default('there') }}.
  • No primary company? Company tokens are empty, or use their default.
  • Unknown properties don’t block the send. If a token names a property that doesn’t exist — usually a typo — it becomes empty, the email still sends, and the send’s entry in the Send log lists the tokens it left empty under Unknown tokens left empty.
  • Dates read naturally. Date properties show as a date such as October 3, 2026, and date-and-time properties add the time in UTC, such as October 3, 2026 14:05 UTC.
  • Dropdown, radio, checkbox, and yes/no properties show their labels — the text you see in HubSpot, such as Gold plan — not the option’s internal value. Several selected options show as a comma-separated list. A label you change in HubSpot can take up to an hour to show in sent emails.
  • Special characters are escaped, so a property value can’t change the email’s layout.
  • Other HubL — {% if %} blocks, loops, and filters other than default.
  • Tokens for deals, tickets, or other objects, even when the workflow is enrolled on one. Copy the value onto the contact first if you need it.
  • Unsubscribe, subscription-preference, and office-address tokens ({{ unsubscribe_* }}, {{ site_settings.* }}). They’re removed, because transactional email has no unsubscribe footer.
  • Type tokens exactly as shown above, with the contact. or company. prefix, so they’re recognized.
  • Add a default to every token in a greeting or subject line, so a missing value never leaves a gap.
  • After changing tokens, send a test to yourself and check its entry in the Send log for unknown tokens. App Home’s error report doesn’t count them, so the send log is the place to look.