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.
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.
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.
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.
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.
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.