// HACKER NEWS — CYBERSECURITY
CSV merger that lines up mismatched columns by header, browser-only
Drop two or more CSV files and download them combined into one - mismatched columns line up by name, with blanks filled in rather than data shifted into the wrong column. Nothing is uploaded.
Nothing is sent anywhere. Turn off your Wi-Fi and this page still works - try it.
Two files with different columns, combined into one table. A missing column becomes a blank cell, not a misaligned row.
With “Each file has a header row” on (the default), columns are matched by their header name across every file. The merged file’s columns are the union of every file’s columns - a file missing a column gets a blank cell there instead of its other values shifting into the wrong column. Any file that adds a column not seen before, or is missing one another file has, is called out in the summary above the table.
Yes - Email and email are treated as two different columns, not merged together. This is deliberate: guessing that two similarly-named columns are actually the same one risks silently combining data that only looks related. Rename a header in one file first if you want two differently-cased columns to line up.
It merges every row purely by position instead of by column name - column 1 from every file lines up together, column 2 with column 2, and so on, with blank cells added to pad out any row shorter than the widest one. Use this for files with no header row at all; for files whose headers are in a different order, leave the header option on instead.
No fixed limit - everything runs in your browser rather than on a server, so the only real ceiling is your device’s own memory. Each file is capped at a generous size (shown on the drop zone) so a single huge file can’t freeze the tab.
No. Every file is read and merged entirely on your device. Turn off your Wi-Fi after the page loads and it still works. This page loads 11KB of JavaScript, gzipped - about what your browser's network tab will show for this page's own scripts.
Files are merged in the order you chose or dropped them, and each file’s own row order is preserved within that. Turn on “Add a Source file column” to keep track of which row came from which file after merging.
Correctly - this tool reads the whole file with a full CSV parser, so a quoted field like "Smith, John" or a quoted field containing its own line break is read as one field, not split apart. The one thing not handled is a body row with MORE fields than that file’s own header row - the extra fields are dropped, since there’s no column for them to land in.