MakeMyStats
Blog
← All tools

CSV Diff

Compare two CSV files and see which rows were added, removed, or changed. Pick a key column and the tool pairs rows across the two files, highlighting the exact cells that differ. Your files never leave your browser.

Drop the LEFT CSV (before)

CSV, TSV · Max 2 GB

Drop the RIGHT CSV (after)

CSV, TSV · Max 2 GB

How to use CSV Diff

  1. 1

    Drop the left (before) CSV

    Drag the original CSV — the 'before' version — onto the left dropzone. It's parsed in your browser by PapaParse; nothing is uploaded.

  2. 2

    Drop the right (after) CSV

    Drag the updated CSV onto the right dropzone. The tool only starts comparing once both files are loaded.

  3. 3

    Pick a key column

    Choose the column that uniquely identifies a row (e.g. id, email, sku). Rows are paired by this key across the two files. If no natural key exists, pick 'whole row' to compare on exact match.

  4. 4

    Review added / removed / changed

    The summary cards show counts for each category. Click one to filter the table. Changed rows show the old value struck through and the new value beneath it, highlighted cell by cell.

  5. 5

    Download the diff CSV

    Click Download diff CSV to save every non-unchanged row with a __status column marking it as added, removed, or changed. Handy for PR reviews, data migrations, and pipeline sanity checks.

Frequently asked questions

Does this tool upload my CSVs?
No. Every parse, transform, and download runs entirely in your browser using JavaScript and Web Workers. The file never leaves your device — there is no upload endpoint and no server-side processing.
How are rows paired across the two files?
By the key column you pick. Rows with the same key in both files are compared cell by cell — any cell that differs puts the row in the Changed bucket. Rows present in only one file are Added or Removed accordingly. 'Whole row' mode treats every column as part of the key and matches exactly.
What if my key column has duplicates?
The first occurrence of each key in each file wins — later duplicates are ignored for the diff. Run CSV Deduplicator first if that's not what you want, or pick a composite key by concatenating columns ahead of time.
What counts as 'changed' for cell comparisons?
Values are compared after treating null, undefined, and empty string as equivalent (so a blank cell doesn't count as changed versus a missing one). Everything else is compared with strict equality after PapaParse's dynamic type coercion — numbers match numbers, strings match strings.
How big a CSV can it diff?
MakeMyStats uses streaming parsers (PapaParse worker mode for CSV, SheetJS for Excel) and virtualized rendering (react-window) so the UI stays responsive on multi-hundred-megabyte files. The hard ceiling is your browser's memory budget — usually 1–2 GB on desktop.