Generator Tools
Mail Merge
Paste a CSV and a template with {{column}} placeholders to generate one personalized output per row. Browser-only, no signup, no upload.
Quick start
Load a runnable sample or wipe everything to start fresh.
First row is the header. One row in, one rendered output out.
Column delimiter
Reference columns with {{column}}. Use {{column:default}} for fallbacks and {{#}} for the row number.
Detected columns
Click a column to copy its placeholder into your clipboard.
Output options
Row separator
Row handling
Preview (first 3)
4 rows renderedPer-row preview so you can spot template issues before exporting.
Hi Avery, Thanks for signing up for the Pro plan at Zero Signup Tools. We have your address on file as avery@example.com. If your team at Northwind needs anything, just reply to this message. - Mert (Message #1)
Hi Jordan, Thanks for signing up for the Starter plan at Zero Signup Tools. We have your address on file as jordan@example.co.uk. If your team at Acme needs anything, just reply to this message. - Mert (Message #2)
Hi Riley, Thanks for signing up for the Pro plan at Zero Signup Tools. We have your address on file as riley@example.org. If your team at your organization needs anything, just reply to this message. - Mert (Message #3)
Plus 1 more row in the full output.
Full output
4 rows, 887 charsTemplate syntax
{{column}}
Replaced with the cell value from that column.
{{column:default}}
Default is used when the cell is empty (or the column is missing).
{{#}}
Row number, 1 for the first data row.
{{#0}}
Zero-based row index, 0 for the first data row.
How to use
- Paste your CSV into the data source area on the left. The first row is treated as the header and becomes the list of available placeholders.
- Pick the right column delimiter if your data is not comma separated. Tab, semicolon, and pipe are one-click options for spreadsheet exports and locale variants.
- Write a template in the editor on the right. Reference columns by wrapping the header name in double braces, for example {{first_name}}. Use {{column:default}} to supply a fallback when a cell is empty.
- Click any chip in the Detected columns panel to copy that placeholder directly to your clipboard, or use {{#}} for the row number.
- Choose a row separator (blank line, newline, dashed line, or a custom value) and toggle Trim cell whitespace and Skip empty rows to match your data.
- Inspect the per-row preview to spot template issues, then copy the full output or download it as a .txt file when it looks right.
About this tool
Mail Merge takes a CSV data source and a text template with {{column}} placeholders, and produces one fully rendered output per CSV row in your browser. The first line of the CSV is the header, and every header name becomes a placeholder you can reference in the template by wrapping it in double braces. Cell values flow into each placeholder so a 200-row CSV produces 200 personalized outputs without copy paste, without uploading the data, and without leaving the page. Placeholders support a default value with the {{column:default}} syntax: when a cell is empty, the default is used instead, which is the right behavior for optional fields like company name or middle name. Two extra placeholders are always available, {{#}} for the 1-based row number and {{#0}} for the 0-based index, which is handy for sequence IDs, message numbers, or numbered lists. Column lookup is case insensitive and trimmed so the header First Name, the placeholder first_name, and the placeholder First Name all reference the same column. The CSV parser is RFC 4180 compatible: quoted fields, embedded commas, escaped double quotes, and CRLF or LF line endings all work, and it supports tab, semicolon, and pipe delimiters as one-click alternatives to comma for spreadsheet exports and locale variants. Two row-handling toggles control output: trim cell whitespace cleans up exported spreadsheets that pad cells with spaces, and skip empty rows keeps trailing blank rows from producing empty outputs. Row separators are configurable: a blank line between rows for readable lists, a single newline for line-per-record output, a horizontal rule for visually distinct entries, or a custom separator that accepts escape sequences such as \n, \r, and \t. Useful for sending personalized but un-trackable internal updates, building cold outreach drafts before sending from a real mail client, generating bulk SMS or chat messages from a contact list, rendering numbered receipts or shipping labels, producing per-customer release notes, expanding a list of users into pre-filled support tickets, generating CSV-driven Markdown blocks for docs, or any workflow where one template plus one spreadsheet produces N personalized outputs. Everything runs locally in your browser; the CSV, the template, and the rendered output are processed in memory and never uploaded.
Free to use. Works in your browser. No signup, no login.
Related tools
You may also like
CSV to JSON Converter
Two-way CSV and JSON converter with delimiter and header controls.
Open tool
TextFind and Replace
Find and replace text in plain or regex mode with live match highlighting.
Open tool
ConverterCSV Viewer
View any CSV as a sortable, filterable, paginated table.
Open tool
DeveloperMock Data Generator
Build custom rows of fake test data and export to JSON, CSV, SQL, or TS.
Open tool
GeneratorLorem Ipsum Generator
Generate filler text by paragraphs, sentences, words, list items, or bytes.
Open tool