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.
{{column_name}} anywhere in the subject or body to insert that column's value for each row.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.
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.
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.
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.
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.
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.
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.
No. Parsing, merging and generating the output file all happen locally using JavaScript — your contact data never leaves your browser tab.