Mail-merge preview
Paste your copy and a list of recipients, then read each personalized message as it will arrive. It catches {first_name} before it sends.
Mail-merge preview, the tool
Your copy
Hi {{first_name}},
I was reading {{one_specific_thing}} and had one idea I think is worth ten minutes of your time.
Worth a short call next week?
Best,
Sam
Paste from Google Docs, Word or Notion. Bold, links and lists are kept. Write a merge tag as {{first_name}}.
Your list
Drop a .csv here, or paste rows. The list starts with sample data, made up.
Every message
company- 4 of 5. Uses the fallback in row 3
first_name- All 5 rows have a value
one_specific_thing- 4 of 5. Sends blank in row 4
What it checks in each message
- Address
- A missing or malformed address blocks that message.
- Subject
- An empty subject blocks it.
- Empty merge fields
- A field with no value and no fallback blocks the message, because it would send with a visible gap. Write
{{company|your team}}and the fallback is used and the row is only counted. - Unresolved tags
- A merge tag that did not resolve is flagged for a look.
- Placeholder links
- A link to example.com or to # is flagged.
- Size
- A message over 102 KB is flagged, because Gmail is reported to clip near that size. See the email size checker.
First-name fallbacks in 23 email tools
A fallback is what goes out when a row has no first name. Without one, most tools send a blank, and a few hold the email back. Each tool links to its own documentation, read in October 2026.
| Tool | First-name tag | With a fallback | If it is empty |
|---|---|---|---|
| Email platforms | |||
| Mailchimp | *|FNAME|* | *|IF:FNAME|**|FNAME|**|ELSE:|*there*|END:IF|*A conditional merge tag. Or set a default merge tag value on the field, in Audience fields and merge tags.Our Mailchimp guide | A blank space |
| HubSpot | {{contact.firstname}} | Set a fallback value when inserting the token, or a default for the property under Settings, Marketing, Email, Personalization.Our HubSpot guide | Blank, if no default is set |
| Klaviyo | {{ first_name }} | {{ first_name|default:'there' }}Our Klaviyo guide | Blank, so "Hey ," |
| ActiveCampaign | %FIRSTNAME% | No fallback inside the tag. A default value is set on the contact field, under Contacts, Fields; check the First Name field accepts one.Our ActiveCampaign guide | A blank space |
| Brevo | {{ contact.FIRSTNAME }} | {{ contact.FIRSTNAME|default:"there" }} | Not documented |
| Kit | {{ subscriber.first_name }} | {{ subscriber.first_name | strip | default: "there" }}Not in subject lines, where Kit does not run filters. | Nothing: the greeting reads Hello , |
| Customer.io | {{customer.first_name}} | {{customer.first_name | default:"there"}}On the latest Liquid version. | The message is not sent, and is logged as Failed |
| Salesforce Marketing Cloud | %%First_Name%% | %%[Set @firstName = Trim(AttributeValue("First_Name")) Set @greeting = Iif(Empty(@firstName), "Hi there,", Concat("Hi ", @firstName, ","))]%%%%=v(@greeting)=%%AMPscript, or a default value on the profile attribute. AttributeValue returns null when the field is missing, where reading the field directly can fail the send.Our Marketing Cloud guide | Blank |
| MailerLite | {$name} | {$name|default('there')} | A blank space |
| Constant Contact | [[FIRSTNAME]] | [[FIRSTNAME OR "there"]]In custom-code emails; the editor has a Fallback field when you insert a contact detail. | Blank |
| Campaign Monitor | [firstname,fallback=] | [firstname,fallback=there] | A space: Hey , check out |
| Braze | {{${first_name}}} | {{${first_name} | default: 'there'}}A value of only spaces does not count as empty.Our Braze guide | Blank |
| Iterable | {{firstName}} | {{defaultIfEmpty firstName "there"}} | Not documented |
| Marketo Engage | {{lead.First Name}} | {{lead.First Name:default=there}}Adobe documents a newer format for the Email Designer, {%=lead.city ?: "fallback" %}. Copy what the token picker inserts.Our Marketo Engage guide | Not documented |
| Salesforce Account Engagement (Pardot) | {{Recipient.FirstName}} | {{#if Recipient.FirstName}}Hi {{Recipient.FirstName}},{{else}}Hi there,{{/if}}Or set a Default Mail Merge Value on the field, under Account Engagement Settings, Configure Fields, Prospect Fields. A field default overrides the conditional.Our Pardot guide | Nothing is displayed |
| Oracle Eloqua | <span class="eloquaemail">FirstName</span> | No fallback inside the tag. Each field merge is a component (Assets, Components, Field Merge) with a default value, shown when the contact field is empty. The span holds the field merge's name.Our Eloqua guide | Not documented |
| Cold email tools | |||
| lemlist | {{firstName}} | {{firstName|there}} | Nothing: Hello , |
| Instantly | {{firstName}} | {{firstName | there}} | Not documented |
| Smartlead | {{first_name}} | {{#if first_name}} Hey {{first_name}}, {{else}} Hey there, {{/if}} | Blank |
| Apollo | {{contact.first_name}} | {{#if contact.first_name}}{{contact.first_name}}{{#else}}there{{#endif}} | The email is held back and moved to Not sent |
| Outreach | {{first_name}} | {{#if first_name}}{{first_name}} {{else}}there{{/if}} | The step fails with Missing template variable |
| Mail merge from a spreadsheet | |||
| Gmail mail merge | @firstname | No fallback inside the tag. Gmail flags the missing value before sending and asks for a default. | An error before anything is sent |
| Mailmeteor | {{ firstname }} | {{ firstname | there }} | A blank space |
A tag goes out as typed, braces and all, only when the tool does not recognize it: mistyped, or written in another tool’s format. Mailchimp and lemlist both say so. That is the email that arrives saying Hi {first_name}.
More free tools
- Subject line testerCount a subject line's characters and see how much of it each of five inbox clients shows.
- Email size checkerMeasure your email's HTML and see how close it is to the size where Gmail clips it.
- UTM builderAdd utm_source, utm_medium and utm_campaign to a link, with consistent lowercase values.