CSV Diff Online
Compare CSV files and instantly highlight every added, removed, or changed row.
When a CSV diff is the right tool
CSV is still how a lot of lists move around: export from a spreadsheet, a product catalog, a grade book, a small database dump, or a report a colleague emailed as a file. Two of those exports can look almost the same in a text editor and still disagree in one score, one extra column, or one replaced row. A CSV diff is for that moment. You put the previous version on the left, the new version on the right, and read the highlighted lines — or switch to table view to see the same change as cells.
This page is a comparison tool, not a spreadsheet. It does not join rows by a primary key, and the table parser does not implement the full quoting rules of RFC 4180. If you need statistics for a single file rather than a diff, use CSV Column Stats. If you would rather compare the data as objects, convert it with the CSV to JSON converter and open JSON Diff.
Use cases
Checking two spreadsheet exports
A weekly export often changes in a few cells: a score, an address, a new grade column. Pasting both files here is faster than lining up two sheets by eye, as long as the rows are in the same order. Table view highlights a changed cell in place, and a new header appears in green on the right.
Spotting a row that was added, removed, or replaced
When a line is new or gone, the split and unified views show that line as an addition or a removal, the same way a text diff would. Table view is less helpful for insertions, because it lines rows up by position rather than by a name or id. If Charlie is replaced by Eve in the same slot, table view treats that as a changed row, not as one removal and one addition.
Comparing a simple comma-separated dump
The table parser is intentionally simple. It works well on plain files whose fields do not contain commas: name,age,city and one record per line. If your export uses quoted commas, tabs, or another delimiter, trust the line views first, or clean the file before you compare.
How the comparison works
When you choose Compare, the two panes are first compared as text, line by line. Identical lines stay across from each other. A line that exists only on the left is marked as removed. A line that exists only on the right is marked as added. Split and unified views show that text diff. The added and removed counts at the top are counts of those lines, including a changed header.
Table view is a second reading of the same paste. It trims the text, treats the first line as a header row, and builds a table from the remaining lines by splitting each line on commas and trimming cells. Columns with the same header name are aligned even if they were not in the same order. Data rows are still aligned by index. A changed cell shows the old value struck through and the new value beneath it. A header that exists on only one side is colored as added or removed.
name,age,city,score
Alice,30,New York,95
Bob,25,London,87
Charlie,35,Paris,92
name,age,city,score,grade
Alice,30,New York,97,A
Bob,25,London,87,B
Eve,22,Berlin,91,AIn split or unified view, almost every line after the first two can light up, because the header gained a column and Charlie's row was replaced by Eve's. In table view, Alice's score appears as a cell edit, Bob stays put, the new grade column is visible on the right, and the third data row is Charlie versus Eve — not a named join, just position three against position three. Load Sample on this page uses a similar table if you want to click through the views.
name,city
Alice,"New York, NY"
name,city
Alice,"New York, NY"A strict CSV parser would treat "New York, NY" as one city field. This table view splits on the comma inside the quotes, so the row looks like it has an extra column. The split and unified views still compare the line as a whole, which is why they are the safer choice for quoted or irregular files.
What this tool does not do
It does not join on a key, detect moved rows, parse quoted fields, or accept a custom delimiter. It does not ignore column order in the line views, and it does not send your file to a server. Copy is available for the unified text result, not for the table display. Very large pastes can make the tab feel slow, especially when table view has to render every cell.
How to use CSV Diff
- Paste the older or expected CSV into the original pane.
- Paste the newer CSV into the modified pane.
- Choose Compare. Start with split or unified view if you care about added and removed lines, then switch to table view if the rows are in the same order and you want to see cell-level edits.
- Use Swap if the sides are reversed, Clear when you are finished, or Load Sample to try a short example first.
If a positional comparison is the wrong model, convert the file to JSON and compare objects, or sort both files by the same key before you paste them. The homepage text diff remains available when the paste is not really tabular data.
Frequently asked questions
What is the difference between split, unified, and table view?
Split and unified views are a line-by-line text diff of the exact text you pasted. Table view is a separate display: it treats the first row as headers, aligns columns by header name, and aligns data rows by position (the first data row on the left against the first data row on the right). Table view is often easier to read, but it is not a join on a key column such as an id or a name.
If I insert a row in the middle, why do later rows look changed in table view?
Table view compares row 1 with row 1, row 2 with row 2, and so on. It does not look up rows by name or id. An inserted or deleted row shifts every row below it, so those later rows can appear as cell-by-cell changes even when the people or records further down are the same. Use the split or unified line diff when you need to see a whole row appear as an addition.
Does the table view understand quoted commas, tabs, or semicolons?
No. The parser is simple: it splits each line on commas and trims the cells. A field like "New York, NY" is split at the comma inside the quotes, which will look like an extra column. Tab-separated or semicolon-separated files are not treated as a different dialect. For those files, the split and unified views (which compare raw lines) are safer, or convert the file to simple comma-separated values first.
Are the added and removed counts based on rows or lines?
They count lines from the text diff, including the header line if it changed. They are not a count of added or removed table records, and they stay the same when you switch to table view.
Is my CSV sent to a server?
No. Comparison runs in your browser. Closing the tab discards what you pasted. Do not paste spreadsheets that contain personal data or secrets if you would not be comfortable with them sitting in memory on this device.
Is there a file size limit?
There is no server-imposed limit, because nothing is uploaded. A few thousand rows is usually comfortable. Very large exports can make the page feel slow, especially in table view; in that case, compare a smaller excerpt or use a local tool.
Can I compare two JSON arrays of records instead?
Yes, but not on this page. Convert the CSV to JSON first, or start from JSON and use JSON Diff, which parses and pretty-prints before comparing. This page is for comma-separated text and a simple table display.
Related tools and guides
References
- RFC 4180 describes the common CSV convention, including quoted fields that may contain commas. This page does not implement the full quoting rules; table view splits each line on every comma.
- Spreadsheet tools and dedicated CSV diff utilities can join rows by a key column and handle quoted fields correctly. Use them when a positional table comparison would be misleading.
- For a plain text comparison that ignores columns entirely, the homepage text diff or the split and unified views on this page are the closer match.