Template Filler
Fills a {{placeholder}} template once per row of a table and returns one document per row.
A mail merge without the mail: a template with {{column}} placeholders, a table pasted from a spreadsheet, and one filled-out document per row. There are no conditionals or loops, deliberately — what a merge needs is "format this number" and "put something here if it is blank".
Template
Placeholders are {{column}}. Add a filter after a pipe: {{amount | won}}, {{name | default: 고객}}.
Data
Paste straight from a spreadsheet — the first row is the header. Tab-separated by default; commas with quoted fields also work.
3 documents
rows
3
columns used
3
columns unused
0
rows with a gap
0
- Row 1
Dear Kim Minjun, Please pay 1,250,000원 by 2026-09-01. Thank you.
- Row 2
Dear Lee Seoyeon, Please pay 480,000원 by 2026-09-05. Thank you.
- Row 3
Dear Park Doyun, Please pay 0원 by 2026-09-10. Thank you.
Filters
upper— UPPER CASElower— lower casetitle— Title Casetrim— Remove surrounding spacesnumber— Thousands separators: 1234567 → 1,234,567won— Korean currency: 1234567 → 1,234,567원default: text— Use this when the cell is emptypad: 5— Pad with leading zeros to a width
How to use it
Write the template
Placeholders are {{column}}, matching the header row of your table. A filter goes after a pipe: {{amount | won}} formats a number, {{name | default: 고객}} fills a blank.
Paste the table
Straight from a spreadsheet — the first row is the header. Tab-separated by default; commas with quoted fields also work.
Fix the warnings before you copy
A placeholder with no matching column is left in the output as-is rather than rendered blank, so nothing goes out with a hole in it. Rows with an empty cell are counted separately.
Copy or download the lot
Each document has its own copy button, and copy-all joins them with a separator you choose. Fifty are shown; copy and download take all of them.
Common questions
Why can I not write an if statement?
Because a template language with control flow is a programming language, and it has to be documented and sandboxed like one. The default: filter covers the case that actually comes up — a blank cell — without any of that.
One row came out as "안녕하세요 님"
That row has an empty cell where the template expects a value — which is exactly how that greeting goes out to forty people. The warning counts them, and a default: filter fills them.
Does the data leave my browser?
No. A merge table is a list of customers with their amounts, which is exactly the kind of file not to upload. Everything happens in the page.
Feed it from
Document Mail Merge
Fills {{placeholder}} fields in a .docx template once per CSV row — even when Word split a field across runs — and zips one document per row.
Case Converter
Converts between UPPER, lower, Title, Sentence, camelCase, snake_case, kebab-case and CONSTANT_CASE.
Text Diff
Compares two texts side by side or inline, at line, word or character granularity.
Duplicate Line Remover
Removes duplicate lines, keeps only duplicates, or counts how many times each line appeared.
Next
These accept what this tool produces, so the result can go straight in.
CSV Viewer
Opens a large delimited file with type detection, column stats and sorting, without loading it all into memory.
Document Mail Merge
Fills {{placeholder}} fields in a .docx template once per CSV row — even when Word split a field across runs — and zips one document per row.
List Formatter
Turns lines into a comma list, quoted SQL IN clause, JSON array or bullet list, and back again.
PDF Form Filler
Fills AcroForm fields by hand or from a CSV row, and can flatten the result so it cannot be edited.
Find & Replace
Replaces text by literal, whole word or regular expression, with capture groups and a preview of every hit.
Markdown Editor
Edits Markdown with a live preview and exports the rendered HTML, with GFM tables and task lists.