CSV Merger
Combine CSV files by appending rows. Match columns by exact headers or position, review schema differences, and generate one complete CSV or TSV file.
Files are read and merged in a local worker. Filenames and records are not uploaded or saved; refreshing clears drafts.Input files
Choose or drop 2–20 UTF-8 CSV/TSV files. Limits: 5 MiB per file, 20 MiB combined input, 100,000 data rows, 200 output columns and 40 MiB output. Drafts stay in memory; refreshing clears them.
Matching and output
Strict: identical exact names, different order allowed. Union: first-appearance names, missing cells become empty strings. Position: equal widths; labels do not determine matching. No fallback, join, sorting or deduplication.
How to combine CSV files
- Choose or drop 2–20 UTF-8 CSV/TSV files. Set comma, semicolon or tab and whether each file has headers.
- Review per-file row counts and parse errors. Remove empty files explicitly; failed files are never silently skipped. Reorder with Move up/down to set the append order.
- Choose Strict headers, Union of headers or By column position. Read the schema warnings before generating; changing files or settings discards old results.
- Choose output delimiter, header and optional BOM. Optionally add a collision-free source filename column. Formula protection is on by default.
- Generate, review the first 50 rows and protected cells, then download merged.csv or merged.tsv and the mapping report. Copy is available for complete outputs up to 2 MiB; larger files use complete downloads.
Worked example: match names, not their order
The first file has id,name; the second has name,id:
id,name 1,Alice name,id Bob,2
Strict mode keeps the first file's column order and reorders the second file's values:
id,name 1,Alice 2,Bob
Three explicit matching modes
Strict headers requires identical header sets, but their order may differ. Union of headers uses first appearance across the visible file order and fills absent columns with empty strings. An absent column and an existing empty cell are indistinguishable in CSV output. Both modes require headers in every file and reject duplicate, blank or whitespace-only names. Header names are never trimmed, case-folded or normalized: Name and name, or id and " id ", stay distinct. Near-matches produce warnings, not automatic mapping.
By column position requires equal column counts and ignores labels for matching. Header toggles still decide whether the first record is metadata or data. Output labels come from the first file's headers, or Column 1…N for a headerless first file; edit them when output headers are enabled. Adding a source column requires unique, nonblank output labels. Its name must not collide exactly with a data-column label. Only basenames are included, never device paths.
Strings, records and empty files
This is vertical concatenation, not a join on a key. Rows retain visible file order and original order within each file. Repeated rows remain repeated; there is no sorting, deduplication, fuzzy mapping, nested conversion, automatic type inference or Excel support. Every cell remains a string, including leading zeros, long identifiers, dates, whitespace and empty cells.
The bundled parser supports quoted delimiters, doubled double quotes, LF/CRLF separators and quoted multiline cells. A single initial encoding BOM is removed; internal line breaks are preserved. Invalid UTF-8, malformed quoting and inconsistent field counts block generation with file/record references. Physically empty records and a terminal separator are ignored; quoted empty cells and delimiter-only rows remain data. Header-only files contribute schema and zero rows. If all files have zero data rows, only an enabled, valid output header can be exported.
Formula protection and mapping reports
Protection prefixes an apostrophe to strings and headers beginning with =, +, -, @, tab or carriage return, or whitespace followed by a formula marker. It also covers source filenames. Numeric-looking negative strings therefore change deliberately. A count and up to 20 before/after examples explain changes; switching protection off is an explicit raw-export choice. CSV quoting alone does not stop spreadsheet formulas, and spreadsheet interpretation varies. The tool displays text without executing formulas, HTML or links.
Exports use proper CSV quoting and CRLF record separators; line breaks within cells are unchanged. The optional UTF-8 BOM is an encoding marker. The downloadable JSON report contains input basenames, row counts, input-to-output column mappings, chosen matching/export settings, warnings and the protection count, not copies of data records.
Limits and browser-only processing
Limits are 20 files, 5 MiB per file, 20 MiB combined input, 100,000 combined data rows, 200 output columns including a source column, and 40 MiB serialized output. Union expansion is checked before serialization; oversized output produces no partial download or report. The table previews 50 rows and 20 columns with 160 characters per cell; large text previews show 8,192 characters. Downloads include everything accepted.
Reading, validation and generation run in a locally bundled worker with progress and Cancel. Reorder, removal and setting changes terminate obsolete work and hide its results. Clear, removal and example replacement offer one-step in-memory Undo. No draft data or filenames enter URLs, telemetry or browser storage. Workers and object URLs are released when invalidated or closed.
What should we improve next?
Help shape the next update to CSV merger. Tell us what would make it better for you.
Prefer email? feedback@tooltulip.com