Data Tools
CSV Merger
Merge multiple CSV files into one, with column mapping.
The algorithm
Drop two or more CSV files into the dropzone. The tool parses each file (auto-detecting delimiter and encoding via PapaParse), builds a union of all column headers, and aligns every row to that schema. Missing columns become empty strings - nothing is silently dropped.
Options:
- Add source-file column: appends
_source_filewith the originating filename, so you can filter or group rows by origin later. - Remove duplicate rows: dedupe by whole-row equality, or pick one or more key columns (e.g. dedupe by
email, keep first occurrence).
A preview table shows the first 20 rows of the merged output. Download the full merged file as a single CSV.
A real use case
Typical use: You have monthly exports from three systems - CRM (id, name, email), billing (id, name, invoice_total), and support (id, name, tickets). All three share id and name but have different trailing columns. This tool unions them to id, name, email, invoice_total, tickets, aligns every row, and optionally dedupes by id so you end up with one row per customer with all the data.
Also handy for: combining monthly reports, merging CSV exports from different departments, concatenating form submissions from different time periods, cleaning up email lists with duplicates across sources.
Common questions
Does my data leave my browser?
No. PapaParse parses the files locally and the merge runs entirely in JavaScript. You can disconnect from the internet after the page loads and the tool still works.
What's the maximum file size?
The tool handles files up to about 200 MB per CSV comfortably. Very large files (over 500 MB combined) may hit browser memory limits - split them into smaller chunks first.
What if my files have different column names for the same data?
Right now the tool matches columns by exact header name (case-sensitive). If you have <code>Email</code> in one file and <code>email</code> in another, they'll appear as separate columns. Rename headers in your source files before merging, or use the output to clean up manually. Column-mapping UI is on the roadmap.
Why does my file say 'FieldMismatch'?
That warning appears when some rows have fewer or more columns than the header expects. The tool keeps parsing anyway and treats missing cells as empty strings. If the file has serious structural issues, you may need to clean it in Excel or a text editor first.
How does deduplication decide what to keep?
It keeps the first occurrence of each key. If you want the last occurrence (e.g. latest timestamp), sort your files or append order so the row you want comes first.
What's the output format?
Standard RFC 4180 CSV: comma-delimited, CRLF line endings, fields with commas, quotes, or newlines are properly quoted. Opens cleanly in Excel, Google Sheets, Python pandas, and R.
Will this work with semicolon-delimited CSVs (European Excel)?
Yes - PapaParse auto-detects the delimiter per file. Mixing comma-delimited and semicolon-delimited inputs is fine; the output is always comma-delimited.