Compare Two Columns in Excel, CSV, or Any List
Paste two datasets and match rows by a key column. Instantly see what matched, what changed, and what's unique to each side.
Try an example:
Column A
Type or Drag & Drop a file
Column B
Type or Drag & Drop a file
Output Options
Matching
Output
Paste or upload data in both panels above to see results.
Frequently Asked Questions
How do I compare two columns in Excel for matches?
Copy the first column from Excel and paste it into Column A, then copy the second column into Column B. The tool matches rows by a key column and instantly shows what matched, what's unique to each side, and - if you set a value column - what changed. No VLOOKUP, COUNTIF, or MATCH formulas needed.
Example - two customer exports:
Tip: if your data has a header row, tick First row is a header in Column Setup so column names appear in the dropdowns.
Example - two customer exports:
| Table A (Jan) | Table B (Feb) | Result |
|---|---|---|
| C001 | C001 | ✓ Matched |
| C002 | - | Only in A |
| - | C003 | Only in B |
Tip: if your data has a header row, tick First row is a header in Column Setup so column names appear in the dropdowns.
How do I find items in Column A that are not in Column B?
After pasting your data, the Only in A panel shows every key that exists in Column A but has no matching key in Column B. The Only in B panel shows the reverse.
Example - finding discontinued and new products:
Example - finding discontinued and new products:
| Table A (old) | Table B (new) | Result |
|---|---|---|
| P001 Laptop | P001 Laptop | ✓ Matched |
| P003 Keyboard | - | Only in A (discontinued) |
| - | P005 Webcam | Only in B (new product) |
How is this different from the Compare Two Lists tool?
Compare Two Lists treats each input as a flat list and does set operations. This tool understands tabular data and matches rows by a key column it can also track value changes.
Rule of thumb: single column → Compare Two Lists. Multiple columns → this tool.
| Compare Two Lists | Column Compare | |
|---|---|---|
| Input | One item per line | CSV / TSV / spreadsheet |
| Matching | Whole-line equality | Match on a key column |
| Change detection | No | Yes (Track changes in) |
| Best for | Simple item lists | Database exports, spreadsheets |
Rule of thumb: single column → Compare Two Lists. Multiple columns → this tool.
What is the 'Match on' column?
The key column identifies and matches rows between datasets - like the lookup column in a VLOOKUP formula.
Example - matching customers by ID:
Choose a column with unique, stable identifiers (an ID, email, or order number) - not names or descriptions that might change.
Example - matching customers by ID:
| Table A | Table B | Result |
|---|---|---|
| C001, Alice | C001, Pro plan | ✓ Matched on C001 |
| C002, Bob | - | Only in A |
| - | C003, Basic plan | Only in B |
Choose a column with unique, stable identifiers (an ID, email, or order number) - not names or descriptions that might change.
How do I detect what changed between two versions of a dataset?
Set a Track changes in column for both sides in Column Setup. Rows where the key matches but the value differs appear in the Changed section, showing the old value (from A) and new value (from B) side by side.
Example - price changes in a product catalog:
Useful for: spotting price changes between exports, finding updated customer records, comparing config snapshots.
Example - price changes in a product catalog:
| Product ID | Table A price | Table B price | Result |
|---|---|---|---|
| P001 | 99 | ,099 | △ Changed |
| P002 | 5 | 5 | ✓ Matched |
Useful for: spotting price changes between exports, finding updated customer records, comparing config snapshots.
Can I compare columns with different headers or column positions?
Yes. You choose the key column independently for each side, so columns don't need to be in the same position or share the same header name.
Example - ID column in a different position:
Set Match on to A. Column 2 (ID) = B. Column 1 (ID) - the tool handles the mismatch automatically.
Example - ID column in a different position:
| Table A | Table B |
|---|---|
| Name, ID, Dept | ID, Name, Dept |
| Alice, E001, Eng | E001, Alice, Eng |
Set Match on to A. Column 2 (ID) = B. Column 1 (ID) - the tool handles the mismatch automatically.
What happens if my data has duplicate key values?
The tool matches each row in Table A against the first row in Table B with the same key (VLOOKUP-style).
Example - duplicate key in Table B:
If Table A has duplicate keys, each row is processed independently against B's first match.
Example - duplicate key in Table B:
| Table A | Table B | Result |
|---|---|---|
| C001, Alice | C001, Pro ← first match | ✓ Matched |
| C001, Basic ← duplicate | Only in B |
If Table A has duplicate keys, each row is processed independently against B's first match.
Is my data sent to a server?
No. All processing runs entirely in your browser using JavaScript. Your data never leaves your device and is never stored anywhere.
How does the tool handle large files?
The tool runs entirely in your browser with no server-side file size limit. It handles datasets up to around 50,000 rows without noticeable lag on most devices.
For very large files (100,000+ rows), results may take a second or two to appear. To improve performance, paste only the key and value columns you need rather than the full table - fewer columns means faster parsing.
For very large files (100,000+ rows), results may take a second or two to appear. To improve performance, paste only the key and value columns you need rather than the full table - fewer columns means faster parsing.
What file types and formats does this tool accept?
You can paste directly from Excel, Google Sheets, or Numbers - select the cells and paste normally. You can also upload files via the toolbar button in each panel.
The delimiter is auto-detected by default. If the wrong delimiter is detected, select it manually in Column Setup.
| Format | Extension | Delimiter |
|---|---|---|
| CSV | .csv | Comma |
| TSV | .tsv | Tab |
| Plain text | .txt | Any |
| Excel paste | - | Tab (auto-detected) |
The delimiter is auto-detected by default. If the wrong delimiter is detected, select it manually in Column Setup.
Related reading