PasteDiff

Compare two CSV exports without uploading customer data anywhere: paste or drop both files below. The sample is a small inventory export, one day apart — its updated_at column churns on every row, so that column is excluded by name (see the Ignore columns box) and only the real changes show.

Paste text above and hit Compare (or just type — it updates live).

What changed between these two exports?

Two exports of the same report, a day (or a migration) apart — which rows changed? Paste or open both above. Unchanged rows collapse out of the way; edited rows show old and new side by side with the exact changed cells highlighted (in the sample: one stock level, one price, one product gone, one new). Rows are parsed with proper CSV quote handling, so a comma inside a quoted product name doesn't count as a column break.

Ignoring columns that always "change"

Most export pairs differ on every single row because of one column: updated_at, an export timestamp, an auto-incremented id. Type that column's header name into the Ignore columns box — updated_at in the sample, or several separated by commas (updated_at, id). Names are matched against each side's own header row, case-insensitively, so even if the column moved position between exports it's still ignored correctly on both sides; quote a name ("total, gross") if it contains a comma or looks like a number. Column numbers work too when there's no header row: 5, lists and ranges like 2,5-7, or 6- for column six onward (1-based). Either way those cells stop counting as differences. The delimiter (comma, tab, semicolon, pipe) is auto-detected, with a manual override next to the box. Two side effects worth knowing: a quoted and an unquoted field with the same value compare as equal once a column list is set (the sample's "Desk lamp" row demonstrates — quoting style changed, so the row would otherwise show as edited), and highlights in changed rows become per-cell rather than per-word.

When row order isn't stable

Honest caveat: this line diff compares row N to row N. If your export tool shuffles row order between runs, either sort both files the same way first (sort file.csv, keeping the header aside) or switch to ≡ Compare lists with the same Ignore columns value — rows are then matched as a set, so reordering stops being noise. The set view tells you which rows appeared and disappeared, but not which cell changed inside an edited row; the line diff does. Use whichever failure mode you can live with.

Customer data stays local

Exports are full of names, emails and order values — data you can't legally or ethically upload to a random website. Here nothing is uploaded: the page is static and the whole comparison runs in your browser. It works offline once loaded.

Numbers that "changed" but didn't

If a value shows as changed yet looks identical, one side probably has an invisible character — a non-breaking space as a thousands separator or a Unicode minus sign are the classic offenders in spreadsheet exports. TextWash flags and fixes those; then re-compare here.