1. Home
  2. Free tools
  3. Email list tools
  4. Mail merge field checker

Mail merge field checker: find the rows that would send "Hi ,"

In short: Reads the {{first_name}}, {FirstName} and *|FNAME|* tags in your template, matches each to a CSV column, and lists every row where a tag would render blank or as a placeholder like n/a, plus tags with no column and unclosed braces. Limit: It checks that a value is there, not that it is right: a wrong company name still renders.

To check merge fields before sending, paste the email template with its tags and upload the contact CSV. Each tag is matched to a column by name, and every row where a tag would come out empty or as junk such as n/a is listed. Tags with no matching column and unclosed braces are flagged, and you see how a broken row would read.

Price: this tool is free. Checking a whole email list is from $9/mo, and the first 100 checks are free with Google, no card. See pricing

Reads {{first_name}}, {{ contact.firstname }}, {FirstName} and Mailchimp's *|FNAME|*. A tag with a fallback ({{first_name|there}}) never counts as empty. Left empty, the example template is used.

Runs in your browser. Nothing is uploaded.
Sample result from the Mail merge field checker
Show the sample result as

Sample result

5 contacts checked against 4 merge tags: 2 ready, 3 would send with a blank or n/a field.

Merge check
2 of 5 ready
Tags
4 matched
Unclosed
0

What this means for you

Fix or drop the 3 rows before the send, or nobody on them gets a proper greeting.

Next step:Verify the cleaned list
  • Every tag matched to a column
  • Blank and n/a values listed per row
  • Fallbacks count as filled
  • Unclosed braces flagged
  • Templates
  • Merge tags
  • CSV

By SimpleVerifier Team · Last updated · Runs in your browser; nothing you paste is sent to us

How do I check the addresses before the merge goes out?

  1. Download the ready rows here; every column is kept, with merge_status added.
  2. Upload the file at /verify. Every address gets a live mailbox check, and valid, risky and invalid download as separate files. The first 100 email checks are free with a Google sign-in, no card.
  3. Import the valid file into your sending tool.
Check the addresses

How do I check merge fields before sending a mail merge?

  1. Paste the subject and body of your email, with its merge tags, into the template box.
  2. Paste or upload the CSV you'll send to, with its header row. Column names are matched loosely, so first_name, firstName and First Name are the same field.
  3. Press Check merge fields. Each tag shows the column it reads; tags with no column and unclosed braces are listed in red.
  4. Download the ready rows for your sending tool and the rows to fix, each with the problem fields named.

Example

You enter
A template using {{company}}, {{first_name}}, {{city}} and {{ ps_line | default: "Worth a chat?" }}, and a 5-row CSV: one blank first name, one blank company and one city of n/a.
You get
2 rows ready; 3 would send broken: 2 with an empty field (first_name, company) and 1 with a placeholder (city). The blank ps_line cells don't count, because that tag has a fallback. All 4 tags matched a column.
Limits
Runs in your browser with no row cap; an uploaded file can be up to 25 MB.

Why do mail merges go out with blank fields?

A merge tag is replaced with whatever is in that column for that row. If the cell is empty, most tools put in nothing, so Hi {{first_name}}, becomes Hi ,. If the tag's name doesn't match a column, some tools send the tag as written and others send nothing; either way the reader sees it.

The other common faults are a value that is a placeholder rather than data (n/a, null, test, #N/A from a spreadsheet formula) and a brace left open after an edit, such as {{company with no closing braces, which is sent as plain text.

Which merge tag formats does it read?

Double braces ({{first_name}}, {{ contact.firstname }}, {{firstName}}), single braces ({FirstName}) and Mailchimp's *|FNAME|*. For a tag like contact.firstname, the part after the last dot is matched to the column, and Mailchimp's FNAME and LNAME also match first and last name columns.

Single braces holding a | are spintax, such as {Hi|Hello}, and are not read as tags; the spintax checker checks those.

Does a fallback count as filled?

Yes. A tag with a default after a pipe, such as {{first_name|there}} or {{ first_name | default: "there" }}, never counts as empty, and the preview shows the fallback. Fallback syntax differs from tool to tool, so check your sending tool's own docs for the exact form; when in doubt, fill the cell in the file. The first name cleaner does that for a first name column.

Is this faster than a test send?

This toolTest send to yourself
Rows checkedEvery rowThe one row you picked
Empty fieldsListed per rowOnly if that row is empty
Tags with no columnFlaggedSeen if you read closely
Unclosed bracesFlaggedSeen in the received email

Who uses this tool, and for what?

Cold emailers
Catch empty {{company}} and {{first_line}} columns in a scraped list before a 2,000-row sequence starts.
Agencies
Check a client's lead file against the campaign copy before it's loaded into the client's sending tool.
Gmail mail merge users
Make sure every row of the sheet fills every tag before a Sheets mail merge sends.
Recruiters
Check personalised outreach tags such as {{role}} and {{school}} on every candidate row.

What can’t this tool tell you?

  • It checks that a value is there, not that it is right: a wrong company name still renders.
  • Conditional blocks (if/else) and tool-specific variables, such as sender signature tags, aren't evaluated.
  • A tag your sending tool fills itself, such as an unsubscribe link tag, shows as having no column; that is expected.
  • It can't tell whether the addresses on the rows still work.

Common questions

Does it work with Instantly, Smartlead, lemlist, Mailmeteor or GMass templates?
Yes for tags in double braces, single braces or Mailchimp's *|TAG|* form, which covers most sending tools. The check is on the CSV and the tag names, not on the tool.
What counts as a placeholder value?
n/a, na, null, none, undefined, unknown, test, a dash, 0, spreadsheet errors such as #N/A and #REF!, and a cell that still holds a merge tag or square-bracket placeholder.
Can it check a Word mail merge?
The data side, yes: upload the Excel or CSV source and type the field names as {{Field}} in the template box. Word's own MERGEFIELD codes aren't read from a .docx.
Is my list or template uploaded?
No. Both are read in your browser, and nothing is sent unless you choose to check the addresses afterwards.

A tidy list can still be full of dead addresses.

Extracting, deduplicating and syntax checks all work on the text of an address. None of them can tell whether the mailbox exists. Only the server that hosts it can answer that, through an SMTP check, and that is what the paid product does.

  • Upload the cleaned file as it is: CSVs up to 100,000 rows
  • A real SMTP mailbox check on every row, with catch-all detection
  • Small list? Starter at $9/mo covers 2,500 emails a month, cancel anytime

Plans from $9 a month, cancel anytime, no contract. Sign in with Google and your first 100 email checks are free, no card. The free tools stay free either way.

Clean your next list before it bounces

100 free email checks when you sign in with Google, no card. Then monthly plans from $9, or one flat price with fair use, never cut off.

100 free checks, no card Cancel anytime Secure payment by Stripe