Text Template (Mail Merge)
Write a template with {{placeholders}}, paste rows of data (CSV or JSON), and render one personalised text per row — entirely in your browser.
How to use
- Write your template using
{{placeholder}}for variables (the tool lists detected placeholders above the textarea). - Pick CSV (with header row) or JSON (array of objects) and paste your data.
- Read the rendered output (one rendering per row, separated by
---or your custom separator), then copy or download as a text file.
About this tool
ShowHide
A mail merge that never leaves the page. Write a template with {{key}} placeholders, paste the data as CSV with a header row or as a JSON array of objects, and get one rendered copy per row, separated by a divider you choose. Placeholders that find no matching column are flagged rather than silently left blank, which catches the typo in {{adress}} before you send forty of them.
The CSV reader implements the quoting rules properly: a field wrapped in double quotes may contain commas, and a doubled quote inside it means one literal quote character. That covers the cases that break naive splitting on commas — an address with a comma in it, a company name like Smith, Jones & Co, a note containing a quoted phrase. A quoted field may also contain line breaks, so the multi-line address or note that a spreadsheet export writes stays in one cell instead of splitting its row in two, and a blank line between rows is skipped rather than rendered as an empty copy.
The other difference between the two inputs is typing. CSV gives you strings and only strings, so a numeric column arrives as text and renders exactly as it was written, leading zeros and all. JSON preserves whatever was in the source — numbers render without their formatting, booleans render as true and false, and a null renders as an empty string or the word depending on how it was stored. If a column must appear a particular way, format it before it gets here rather than hoping the renderer will.
The output is plain text, and it is not escaped for any destination. That is the right default for emails, SMS and certificates, and the thing to watch if you paste the result into HTML: a name containing & or < will be taken as markup. Nothing is uploaded, which is the reason to do a merge here rather than in a hosted tool — a customer list, a payroll run or a set of exam results never leaves your machine, and closing the tab is the whole of the cleanup.
Frequently asked questions
What's the placeholder syntax?
Double curly braces: {{name}}, {{amount}}, etc. Whitespace inside is allowed ({{ name }} works). Keys are case-sensitive, must match the CSV header / JSON key exactly. Unknown keys render as empty and trigger a warning chip listing which ones were missing.
Does the CSV parser handle quoted fields?
Yes — basic CSV rules: a field starting with " is quoted until the next unescaped ", doubled quotes ("") inside a quoted field become a single ". Commas inside quoted fields are kept literally. A quoted field may span several lines, the way spreadsheet exports write multi-line cells.
Why use this instead of a spreadsheet's mail-merge?
Three reasons: (1) the data never leaves your browser — useful for sensitive lists; (2) iteration is instant — change template once, all rows re-render; (3) you can paste data in either CSV or JSON without converting.
Can I use this to draft 100 emails at once?
Yes — that's the most common use. Output each row separated by your divider, copy the result, paste into your mail client and split by the divider, or use the download as a .txt for later. The tool doesn't send anything itself.
Related tools
Bulk File Renamer Preview
Drop files and preview a batch rename — pattern with {n}, {name}, {ext}, {date}, plus find/replace, case modes, and collision detection.
File
CSV Splitter (by rows)
Split a large CSV into smaller chunks by row count — repeat the header on each chunk, download all at once.
File
Lorem Ipsum Generator
Generate placeholder text by paragraphs, sentences, or words.
Text
Find & Replace
Find and replace across a block of text. Optional regex with global, case-insensitive, multiline, and dotAll flags. Live match count.
Text
Caesar / ROT13 / Vigenère / Atbash Cipher
Encrypt or decrypt text with four classic substitution ciphers — Caesar shift, ROT13, Vigenère keyword, Atbash mirror.
Text
Fixed-Width Text Parser to CSV / JSON
Split fixed-width / fixed-column text into fields by column widths and export as CSV or JSON, in your browser.
Convert