Compare Two CSV Files

–added · removed · changed
VerdictMeaningExample
ADDEDkey exists only in the new filea product you now sell
REMOVEDkey exists only in the old filea row someone deleted
CHANGEDsame key, some other column differsa price update
SAMEevery column identicalthe untouched majority
Parsing follows RFC 4180: quoted fields, escaped double quotes and CRLF endings all survive, so comma-laden names like Widgets, Inc. compare correctly. The key column is matched by header name (first row) or by column number; every other column must match byte-for-byte for a row to count as unchanged.
Nothing is uploaded - both files are read by this browser tab and stay on your device. Smaller list jobs: compare two lists for plain line lists, CSV to JSON for a format change, text compare for raw line diffs.

Drop in two CSV files - or paste them - pick the column that identifies a row (an ID, an email, a SKU), and this page reports three lists: rows that exist only in the new file, rows that exist only in the old one, and rows whose other columns changed under the same key. Two 10,000-row files compare in well under a second, entirely inside this browser tab.

The parser is the difference between a CSV diff that lies and one that does not: quoted fields, doubled quotes and CRLF line endings all survive, so a product named 'Widget, 2-inch' or a note containing commas compares correctly. The result downloads as a CSV report with every row labeled ADDED, REMOVED or CHANGED - ready to paste into a ticket or a spreadsheet.

How to use

  1. Load the old file and the new file - pick them, or paste the raw CSV text into either box.
  2. Type the match column: its header name (id, email, sku...) or its position as a number (1 = first column). Leave empty to match on the first column.
  3. Read the verdict counts and the row-level tables, then Download report (.csv) for the labeled full report.

Frequently asked questions

The two files have different column orders - does that break it?

No. Rows are matched by the key column's values, not by position, and a changed-row check compares the old and new row cell by cell regardless of column order. Only the key column's name (or number) must resolve in both files - if the header is missing in one file, position is used instead.

What exactly counts as a changed row?

Same key on both sides, and at least one other column differs after trimming. Compare '1,Widget,9.99' against '1,Widget,12.99' and you get one CHANGED row; whitespace around a value is trimmed before comparing so ' 9.99' and '9.99' are the same.

How big can the files be?

Files up to a few tens of megabytes are fine - the comparison runs in memory in this tab. The row tables on screen show the first 15 rows per verdict, but the downloaded report always contains every row.

Are the files uploaded to a server?

No. Files are read with the browser's FileReader and compared locally; nothing is transmitted. This is the safe choice for customer lists, financial exports and anything else you would not paste into a random website.

Related tools