CSV Diff Checker
How it works
Both files are parsed with the first row as headers, then compared row by row by position — row 2 of A against row 2 of B, and so on (row 1 is the header, matching how a spreadsheet numbers lines). For each row present on both sides, every column across the union of both headers is compared; a column missing on one side reads as an empty value there. A row only present in A counts as removed, a row only present in B counts as added, and a row present in both with at least one differing cell counts as changed. Identical rows produce no output at all.
Frequently asked questions
Does this match up rows that were only inserted or deleted, not changed?
No — rows are compared strictly by position, index for index, not by trying to match up similar rows. Inserting a row in the middle of one file shows up as changes cascading through every row after it, not as one clean "row added" — everything shifts down by one and now lines up against the wrong row on the other side. Matching moved or inserted rows is a much harder, genuinely ambiguous problem, so this tool states the limitation rather than guessing.
What happens when a column only exists in one of the two files?
It's treated as every row differing in that column — the side that lacks the column reads as an empty value, and the side that has it reads as whatever it actually contains. So adding a whole new column to one file shows up as one cell diff per row, all in that column.
What is the plain-text Copy button for?
The on-page list is for reading; the plain-text format (one line per cell diff, like Row 3, column "email": "a@x.com" → "b@x.com") is for pasting straight into a pull request description, a commit message, or an issue, where a compact line-based summary is far more useful than HTML.