Zero Signup ToolsFree browser tools

Developer Tools

CSV Diff

Compare two CSVs by key column in your browser. See added, removed, and changed rows with per-cell diffs. RFC 4180 parser, no upload.

CSV diff

Paste CSV
Paste CSV

Compare mode

Both inputs must have a header row. The first non-empty header becomes the key.

CSV options

Delimiter

Match options

Normalization only affects matching. Cell values are reported as they appear in the source CSVs.

Columns to ignore

Comma separated header names or column numbers (1-based). Ignored columns are not included when deciding whether two rows differ.

Paste two CSVs above to see Added, Removed, and Changed rows. Both inputs are parsed locally in your browser; nothing is uploaded.

How to use

  1. Paste the original CSV into Original (A) and the updated version into Changed (B). Both inputs can be regular CSV, tab-separated values, semicolon-separated CSV, or pipe-separated CSV.
  2. Pick a delimiter and turn the header toggle on or off so it matches your input. Then choose a Compare mode: Auto by header for typical exports, By key column to pick the key yourself (great for reconciliations on foreign keys), or Positional to compare row by row without a key.
  3. Tune Match options if needed: trim whitespace, ignore casing, or collapse internal whitespace so trivial formatting differences are not flagged as changes. Use Columns to ignore to exclude volatile fields like updated_at from the equality check.
  4. Read the Added (only on the right), Removed (only on the left), and Changed (matching keys with different cells) sections. Each Changed row shows the before and after values for every cell that differs.
  5. Click Copy diff summary to grab a unified block of added rows, removed rows, and per-cell changes, ready to paste into a pull request, a data ticket, or a stakeholder email.

About this tool

CSV Diff compares two CSV files row by row and reports exactly what changed between them. Three comparison modes cover the situations most teams actually run into. Auto by header pairs rows using the first header column as the key, which is the right default for any export with an id, sku, email, or username field. By key column lets you pick the key explicitly by header name (or by column number when the file has no headers), so reconciliations against a foreign key like external_id, primary_email, or order_number work without renaming columns first. Positional compares row N in A against row N in B without using a key, which is the right mode for ordered exports like a paginated log dump or a deterministic CRM export where row order is meaningful. In every mode the result is split into four clear buckets: Added rows that appear only on the right, Removed rows that appear only on the left, Changed rows that share a key but contain at least one different cell (with a per-cell delta highlighting exactly which columns differ and showing the before and after values side by side), and Unchanged rows that are identical between both inputs and hidden by default to keep the diff scannable. The CSV parser is fully RFC 4180 compliant: quoted fields, embedded commas and newlines inside quotes, doubled quotes as a literal quote character, and LF, CR, and CRLF line endings are all handled correctly. Tab, semicolon, and pipe delimiters cover TSV exports and European-style CSV where the comma is the decimal separator. Match options control how aggressive the comparison is: trim leading and trailing whitespace, ignore casing differences, and collapse runs of internal whitespace so that real cell changes are not buried under formatting noise. Columns to ignore lets you exclude volatile fields like updated_at, last_seen, or session_id from the equality check by header name or column number, so the diff only surfaces the changes you actually care about. The copy summary produces a clean unified-style block listing added rows, removed rows, and changed-cell deltas in the original CSV format, ready to paste into a pull request, a release note, a data validation ticket, or an email to a stakeholder. Useful for verifying data migrations, comparing two exports from the same SaaS tool taken hours apart, diffing customer or product lists between two systems, validating CSV updates before importing into a database, reviewing the output of an ETL pipeline against a known baseline, and catching unintended row-level changes during refactors. Parsing and diffing happen entirely on your device, so the customer records, financial exports, and operational data you compare here never leave your browser.

Free to use. Works in your browser. No signup, no login.

Related tools

You may also like

All tools
All toolsDeveloper Tools