Mail Merge Tool

Write one subject and body template using {{merge_fields}}, paste in a CSV of contacts, and generate a personalized email for every row — previewed instantly and downloadable as a single text file.

Your contact list and template are merged locally — nothing is uploaded to a server.
Use {{column_name}} anywhere in the subject or body to insert that column's value for each row.

How the merge works

The tool reads your CSV input, treating the first line as column headers and every following line as one contact's data. Your subject and body templates can reference any of those column names inside double curly braces — {{name}}, {{email}}, {{company}}, or any custom column you've included — and for every row in your list, the tool substitutes the matching value and produces one fully personalized subject and body.

A preview of the first three generated emails is shown directly on the page so you can sanity-check the merge before committing to the full batch, and the complete set — however many contacts you have — is available as a single downloadable text file, with each email clearly separated, ready to copy into your sending tool of choice.

Formatting your CSV correctly

This tool uses simple comma-splitting, so it works best with straightforward CSV data that doesn't contain commas inside a field (like 'Acme, Inc.' as a company name, which would be misread as two columns). If your source data has commas inside values, replace them with a different character before pasting, or edit the export in a spreadsheet tool first to remove embedded commas.

Best practices

Before running a full send, it's good practice to preview every unique row layout at least once, particularly for lists with wide variation in field length (a very long company name, for instance), since a template that reads naturally for short values can look cramped or awkward for longer ones. This kind of lightweight, local merge tool is particularly useful for smaller, high-touch outreach — a sales rep following up with fifteen prospects individually, or an event organizer sending personalized confirmations — where spinning up a full marketing platform would be overkill, but manually customizing each message by hand would be too slow.

Frequently asked questions

What happens if a row is missing a value for a merge field?

If a column referenced in your template doesn't exist for a given row, the placeholder like {{company}} is left in the output as-is, so you can spot and fix incomplete rows before sending.

Does this tool actually send the emails?

No — it's a template and personalization tool only. It generates the finished subject/body text for each contact, which you then paste into your email client or email service provider to actually send.

Can I use more than one merge field in the subject line?

Yes, you can use as many {{field}} placeholders as you like in both the subject and body, referencing any column from your CSV header row.

Is there a limit on how many contacts I can merge at once?

There's no artificial cap — since everything runs locally in your browser, practical limits depend on your device, but lists of several thousand rows merge almost instantly.

Does my contact list get uploaded anywhere?

No. Parsing, merging and generating the output file all happen locally using JavaScript — your contact data never leaves your browser tab.

Related tools