CSV Diff

Paste two CSV, TSV, or pipe-delimited files into the panes below and see what changed at the row and the cell level. When both sides share a header, the first column is used as the row key by default; pick one or more columns under Options for a composite key. The summary shows counts by outcome, every changed row expands into a per-column diff, and you can copy or download the diff as a op,key,… CSV patch. Pure client-side, no upload.

Options

Hold Ctrl / to pick a composite key. Leave on "first column" for the default.

Summary

Paste two CSVs to begin.

Results appear here once both panes have content.

How does the key-column alignment work?

When both panes share a header row, the first column is used as the row key by default. Rows with a matching key on both sides are paired and compared cell-by-cell; rows that only appear on the left are removed; rows that only appear on the right are added. Rows whose key column value is missing from the other side fall through to the added / removed buckets.

Pick a different key (or a composite key on multiple columns) when your CSV has no natural identifier in column 1. When neither pane has a header row, the tool falls back to position-based alignment (row N on the left is paired with row N on the right) — useful for ad-hoc comparisons and for two-column data with no header.

Cell comparison is type-tolerant by default: "1", "01", and "1.0" all parse to the number 1 and are treated as equal; "true" and "TRUE" are equal as booleans. Switch to strict if you need to preserve leading-zero formatting or case as a difference.