All tools
Keyed record reconciliation

CSV Comparison Tool

Compare two local exports using stable business identifiers—not row position or text-line matching. No uploads or saved drafts.

Each source: UTF-8 CSV/TSV, 5 MiB, 50,000 data records, 200 columns. Report ≤40 MiB. Header names and cells are exact strings; no trim, case folding or numeric inference. All processing stays local.

Before

After

Exact collision-safe composite keys must be nonblank and unique within each source. Failed imports preserve previous text but invalidate schema/results. Changed rows count once; schema-only differences and ignored columns do not change matched records. Refresh clears memory.

How to compare CSV records

  1. Paste/import Before and After UTF-8 files, with independent comma/semicolon/tab delimiters and mandatory headers.
  2. Inspect schemas, choose one or more shared exact key columns, then narrow common non-key compared columns if needed.
  3. Compare, inspect Added/Removed/Changed/Unchanged/Schema, download full JSON and prepare added/removed CSVs. Changed records export in JSON with explicit per-cell before/after diffs.

Worked example

Before: 1 Alice, 2 Bob. After: 2 Robert, 3 Cara. Key id, compare name gives one removed (1), one changed (2), one added (3), no unchanged. Reordering rows/headers does not alter matched values.

Exact matching and source references

Keys are collision-safe JSON arrays, so [ab,c] and [a,bc] differ. Cells such as 001 and 1 stay distinct strings; multiline quoted fields are one cell. Blank or duplicate selected keys stop comparison and identify logical source records. Headers match case-sensitively with no silent trim; blank and duplicate exact headers fail, near-matches warn but stay separate. Header-only schemas are valid.

Added/changed/unchanged follow After order; removed follows Before order. Ignored columns and schema-only additions/removals do not automatically change records. Presence-only allows no compared columns and labels matches unchanged under selected criteria. Records are represented by values arrays with separate headers, safely including __proto__ names. Source references count nonempty logical records, header 1—not physical lines.

Exports and limits

Full reports include schemas, columns, counts, keys, source references and values/diffs. Preview is limited to 50 findings/16,000 characters, not exports. Added/removed CSVs use their corresponding source schemas and standard quotes. Default-on spreadsheet protection prefixes formula-looking strings at export only; explicit raw mode is available. Negative-looking values may change. No universal spreadsheet-safety claim.

5 MiB, 50,000 records and 200 columns per source; 40 MiB report. Indexed matching runs in a local worker. Cancel or edits discard obsolete jobs; failed import preserves input but invalidates current results. No fuzzy matching, inferred keys, database connections or in-place modifications.