CSV comparison tool

Compare two CSV files by a unique identifier

Check whether an export or repair changed your values. Match rows by an ID instead of their position, and keep leading zeros and long numbers as text.

Compare the values, not just the CSV formatting
Choose two UTF-8 CSV files with a header row, then select a unique identifier present in both.
Local browser processing
Up to 5 MiB. Comma, semicolon, tab, or pipe.
Values remain text, including leading zeros.
Choose an ID that is unique and nonempty in each file. Matching is exact and case-sensitive; spaces in values are significant.

Files are processed in this browser. Their contents are not sent to a CSVFixLab server.

How to compare your original and updated CSV

  1. Choose the authoritative original and the version you want to review. Both need a header row and UTF-8 encoding.
  2. Choose a stable identifier such as a record ID that is present, unique, and nonempty in both files. If SKU is repeated across locations or variants, choose another unique identifier. This version does not combine multiple key columns.
  3. Review added and removed rows, changed cells in shared columns, and added or removed columns. Row and column ordering alone is ignored.
  4. Download the complete JSON report. The screen previews the first 200 difference entries; the report contains every entry from a successful comparison.

Exact text is the comparison rule

00123 differs from 123, and 03/04/2026 differs from 2026-04-03. Empty strings differ from spaces. Matching is case-sensitive, values are not trimmed, and numbers or dates are not inferred. Equivalent CSV quoting and record line endings are ignored after parsing; a line break inside a cell remains part of its value.

Headers are aligned by their exact names, including outer spaces. Empty headers or duplicate headers after outer-space trimming block comparison to avoid ambiguous choices. A changed identifier appears as a removed row plus an added row, because this tool cannot infer that two different IDs represent the same item.

A changed schema is separate from a changed shared value

Added and removed columns are reported explicitly, with their values for matched rows. These schema changes make matched rows count as changed. The changed-cell total counts value differences in shared columns only; it excludes cells in newly added or removed columns and entire added or removed rows. The JSON report uses null for absence and "" for an existing empty value.

Reproduce the two public samples

The samples are synthetic CSVs, not Excel, Google Sheets, or Shopify import outcomes. Use the sample buttons above, select record_id, and compare. The actual comparison module was tested on 2026-10-11.

Value-change sample

Three records remain in both files. One record has three changed cells: postal code, long identifier, and date text. Expected: 1 changed row, 3 changed cells, 2 unchanged rows.

Original CSV · Updated CSV

Row-change sample

Rows and columns are reordered, one ID is removed, and another is added. The original remaining record still has three changed values. Expected: 1 added row, 1 removed row, 1 changed row, 1 unchanged row.

Original CSV · Updated CSV

Download measured test results and fixture hashes. The report includes the exact comparisons for both samples and the automated checks performed. No customer file was used.

Limits and when to stop

Each file can contain up to 5 MiB, 50,000 data records, 200 columns, and 1,000,000 data cells. A comparison exceeding 100,000 difference entries stops without providing a partial report. Purely blank records are ignored; delimited empty values and space-only values are preserved. Record numbers in the JSON include the header and exclude ignored blank records; they are not physical line numbers.

Malformed quoting, inconsistent row widths, unknown encodings, and blank or duplicate identifiers block comparison. Diagnose those files with the CSV checker first. For a known legacy encoding, use the source-confirmed encoding tool.

What a comparison cannot prove

An unchanged result means the parsed text and header names match under the selected key. It does not prove the original was correct, restore earlier lost digits, validate business meaning, neutralize spreadsheet formulas, or guarantee a destination will accept an import. JSON reports keep literal text and are not replacement CSVs. The checker does not execute values as formulas or HTML.

Selected files and comparison results stay in browser memory. They are not uploaded or stored by the comparison code. Clear files or leave the page to discard the working data. Your browser saves downloaded reports on your device. Site delivery and advertising are described in the privacy policy.