Compare two CSV files online by ID or row order. See what changed and download a CSV diff report.
1. Inputs
2. Match rows
3. Differences
Add your two CSV datasets
CSV 1
No file chosen
Drop one CSV, TSV or TXT file here.
CSV 2
No file chosen
Drop one CSV, TSV or TXT file here.
Import options
No files handy?More examples
Supported formats and limits
UTF-8 CSV or TSV text, not Excel workbooks. Each input: up to 1,000,000 UTF-16 units, 10,000 data records, 100 columns and 100,000 cells including headers. Files: up to 2 MiB. Headers: up to 256 units each. Each complete export: up to 8,000,000 units. Oversized or malformed data is rejected without truncation.
Quoted delimiters, doubled quotes and multiline cells are supported. Blank records are kept and must have the same field count. Delimiters are chosen in Import options; no automatic detection. Comparison runs in this page. Inputs are not saved when you reload.
How to compare two CSV files
Add the two datasets. Choose files, drop one into each input, or paste CSV text. If the separator is not a comma, change it in Import options.
Choose how rows match. Select an ID column such as SKU, or a combination of columns that identifies one record. Use row order when positions are what you want to compare.
Review the differences. Switch between Changed, Added and Removed. Open a record to inspect its values, then download a CSV diff report or keep the structured JSON.
CSV diff examples
A CSV diff shows which records were added or removed and which cell values changed. These examples show the inputs and results from this tool. Load one to try the comparison yourself.
A product name changes
The ID stays the same, so these two rows describe the same record. The name is the cell that changed.
CSV 1
id
name
1
Tea
CSV 2
id
name
1
Coffee
Result when matching by id
1 changed · 0 added · 0 removed · 0 unchanged
id 1 · name:“Tea” → “Coffee”
Rows move, a price changes, and products come and go
Match by SKU to keep each product together when rows and columns move. A different position alone does not count as a changed cell.
CSV 1
sku
name
price
A1
Tea, green
010.00
B2
Coffee
20
C3
Cocoa
30
CSV 2
price
sku
name
21
B2
Coffee
010.00
A1
Tea, green
40
D4
Water
Result when matching by sku
1 changed · 1 added · 1 removed · 1 unchanged
sku B2 · price:“20” → “21”
Added in CSV 2: D4.
Removed from CSV 1: C3.
One column is removed and another is added
The region column disappears and status is added. A missing column is different from a cell that exists but is empty.
CSV 1
id
name
region
01
Ada
North
02
Sam
South
CSV 2
id
name
status
01
Ada
active
02
Sam
empty
Result when matching by id
2 changed · 0 added · 0 removed · 0 unchanged
id 01 · region:“North” → (column absent)
id 01 · status:(column absent) → “active”
id 02 · region:“South” → (column absent)
id 02 · status:(column absent) → (empty cell)
Columns added: status. Columns removed: region.
ID matching or row order?
Match records by a stable ID
Use an ID, SKU or another unique key when each row describes an item. The same item stays matched even after sorting the file. If an ID changes, it appears as a removal and an addition.
Compare the same row positions
Use row order when the first data row should match the first data row, and so on. An inserted or moved row can change many pairs. Only extra rows at the end count as added or removed.
Questions about CSV comparison
Do the CSV files need the same row or column order?
With ID matching, rows can be in any order. Columns are matched by their exact header names, so their order can also differ. Added and removed columns are listed separately, and their cells also appear as changed in each matched record. Without headers, columns are compared by their position.
What if an ID is missing or appears more than once?
The comparison stops at the first empty, whitespace-only or repeated key and identifies its record or records. Choose additional key columns to form a unique combination, correct the data, or explicitly choose row-order matching. The tool does not guess which duplicate row belongs with another.
Are 001 and 1, or 10.0 and 10, treated as equal?
No. Values and keys are compared as exact strings. Leading zeros, spaces, capitalization, number spelling and date formatting remain significant. CSV quotes are parsed as syntax, so a quoted value and the same unquoted value compare equally.
Can I compare Excel files, TSV files or semicolon-separated data?
Open UTF-8 CSV, TSV or TXT files, or paste their text. Choose comma, semicolon, tab or pipe in Import options for each input. XLS and XLSX workbooks are not supported; export the sheet as CSV UTF-8 first. Quoted delimiters, escaped quotes and multiline cells are supported.
Can I save all the differences?
Open “Export the complete report” below the results to download CSV, or copy/download JSON. CSV has one row for each changed, added or removed cell, plus column changes, with source record numbers and matching keys. Fields ending in _json use JSON notation to retain exact text and distinguish empty cells from missing values. JSON keeps the structured groups and summary counts. Exports include all differences within the stated limits, even when the preview shows only the first 20 records.
Comparing prose or source text? Use Text Compare for a text diff.