CSV Template
Mail-merge: take a CSV plus a mustache-style template, render one document per row, return a ZIP of the outputs. Filename pattern can reference row columns (e.g. "{{id}}-{{slug}}.md"). Composes csv-json + text-template + zip-create — the canonical "batch render data into N files" tool.
About CSV Template
CSV Template is a browser-based mail-merge: feed it a CSV and a mustache-style template, and it renders one document per row, returning a ZIP of all the outputs. Reach for it when you have rows of data and need to spit out one file each — invoices, certificates, Markdown stubs, config files — without scripting it yourself. Your CSV is parsed and rendered locally, so no row of data leaves your machine.
- Category
- convert
- Input
- Accepts: text/csv, application/csv or text/plain.
- Output
- Outputs: application/zip.
- Cost
- Free, runs in your browser
- Memory
- medium
Common uses
- Turn a CSV of 200 customers into 200 personalized Markdown emails, one file per row
- Generate a folder of per-product spec sheets from a price list export
- Name each output dynamically with a column reference like "{{id}}-{{slug}}.md" so files sort cleanly
- Render per-attendee certificate text from an event signup CSV, then print or convert downstream
- Batch-create YAML or JSON config stubs — one per environment row — from a single template
- Produce per-row release notes or changelog entries from a spreadsheet of shipped features
Frequently asked questions
What input does it take?
A CSV file (text/csv, application/csv, or plain text) plus a mustache-style template you supply. Each {{column}} placeholder in the template is replaced with that row's value.
What does it give me back?
A single ZIP archive containing one rendered file per CSV row. The filename of each entry can itself reference columns, e.g. "{{id}}-{{slug}}.md".
Does my CSV get uploaded anywhere?
No. It composes csv-json, text-template, and zip-create entirely in your browser, so both the data and the rendered files stay on your device.
Is there a row limit?
There's no hard cap, but everything runs in your browser's memory, so very large CSVs (tens of thousands of rows producing big files) are bounded by your available RAM.
What template syntax is supported?
Mustache-style tags — {{column_name}} pulls a value from the matching CSV header for the current row. Headers in your CSV become the available variable names.
Keywords
- csv
- template
- mustache
- mail-merge
- batch
- render
- export