CSV Mail Merge
Merges a text template with CSV data and generates one personalized message per row using {{field}} placeholders, with per-record preview.
Modifiers after a pipe: {{name|maiusculas}}, |minusculas, |capitalizar, |trim, |numero.
First record
—
How the merge works
The first line of the CSV names the columns and every other line becomes one message. Placeholders are matched without regard to case or accents, so {{NOME}} and {{nome}} both hit a column called Nome. Quoted fields follow RFC 4180: a comma inside quotes stays inside the value and a doubled quote means a literal quote.
Rows with fewer columns than the header are still merged, with the missing values left blank, and the warning names the line number so you can fix the source file. Nothing leaves your browser: the merge runs locally, which matters when the spreadsheet has customer names and amounts.
CSV mail merge that runs in your browser
Fifty payment reminders, fifty attendance letters, fifty messages where only the name, the amount and the date change. Instead of copying and pasting fifty times, paste the spreadsheet on one side, write the text once with placeholders such as {{name}} and {{amount}}, and get one finished block per record, separated by a line of dashes.
Placeholders match the header without caring about case or accents, so {{NAME}} and {{name}} land on the same Name column. After a vertical bar you can add a modifier: {{amount|numero}} turns 1234.5 into 1.234,50 and {{name|capitalizar}} fixes a record that arrived in all caps. Quoted fields follow RFC 4180, so a comma inside a name does not shift the columns.
When a placeholder has no matching column you pick the behavior: drop it, leave the placeholder visible so you can review later, or stop and list the problem. Rows with fewer columns than the header are still merged, with the missing values left blank, and the warning names the line number so you can fix the source file. The whole merge happens in your browser.
Frequently asked questions
Do I need Word or a paid account?
How do I format currency values in the template?
My file uses semicolons or tabs. Will it work?
Related Tools
Email Normalizer
Normalize email addresses by removing Gmail dots and everything after the "+", matching addresses that point to the same inbox. Useful to detect duplicate accounts. Everything in your browser.
To snake_case
Convert any text to snake_case: all lowercase separated by underscores. Useful for Python variable names and DB columns.
Detector de Voz Passiva (PT)
Conta frases com voz passiva por heurística: "foi/foram/é/são/era + verbo no particípio (-ado/-ido)".