1001Ferramentas
📬 Text

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?
No. This is a single page with no signup and nothing to install. The result comes out as plain text that you copy into your email client or messaging tool, or download as a .txt file to review before sending anything.
How do I format currency values in the template?
Use the numero modifier: {{amount|numero}} reads 1234.5, 1234,5 or 1.234,50 and always returns 1.234,50, with two decimals and a thousands separator. If the cell holds something that is not a number, the original text is kept instead of being turned into zero.
My file uses semicolons or tabs. Will it work?
Yes. In automatic mode the tool counts commas, semicolons, tabs and pipes on the header line and adopts whichever appears most. If an unusual header fools the detection, pick the delimiter from the list and generate again.

Related Tools