How to use CSV Join, Merge & Compare
Reconcile two CSV exports — from CRM and billing, QA and production, source system and warehouse — using a shared key column such as id, email, order_id, or a composite key. Find missing rows on either side, detect duplicate keys, see exactly which cells changed, and export a joined CSV ready for Excel, Google Sheets, or a downstream load. All processing happens in your browser; no spreadsheet is uploaded.
What it does
- Join two CSVs by a single key or composite key.
- Support for inner, left, right, and outer (full) joins.
- Reports missing rows on each side and duplicate keys within each input.
- Cell-by-cell change detection for matched rows.
- Handles comma, semicolon, tab, and pipe delimiters; auto-detects headers and quoting.
- Exports the joined / merged CSV, the change report, and the diff summary.
When to use it
- QA vs production reconciliation by primary key.
- Compare CRM and billing exports to spot mismatched accounts.
- Validate a database migration by comparing pre- and post-cutover dumps.
- Reconcile analytics events vs server logs.
- Merge two partial exports into a single deduplicated CSV.
- Spot-check a vendor file against your internal source-of-truth export.
How to use it
- Paste or load the left CSV and the right CSV. Headers are required for keyed comparison.
- Select the key column (or columns for a composite key) that exists in both files.
- Choose the join type: inner shows matches only; left and right keep one side; outer keeps everything.
- Review the result tabs: matched / changed, only on left, only on right, duplicate keys, and the joined CSV preview.
- Copy or download the joined CSV, or copy the change report for tickets and PRs.
- For row-level value comparison only (no join), use the List Comparator; for JSON exports, use JSON Diff.
Tips & pitfalls
- Choose a stable key. Comparing by row index is unreliable — sorts and inserts will report wrong changes.
- Resolve duplicate keys before trusting the diff. Duplicates inflate matches and hide changes.
- Trailing whitespace and casing differ silently — enable trim and case-insensitive matching for emails and codes.
- If a CSV uses semicolons or tabs, set the delimiter manually; auto-detection fails on tiny files.
- For very wide CSVs, hide unchanged columns so the diff stays readable.
FAQ
- How do I compare two CSV files by key? Load both files, pick the shared key column (e.g.,
id or email), and the tool produces matched/changed rows, only-on-left, only-on-right, and a joined CSV.
- What is the difference between join and compare here? Join produces a combined CSV; compare produces a diff report. The tool does both at once — pick a join type to control which rows appear in the export.
- Can I use a composite key (multiple columns)? Yes — select multiple key columns to handle natural keys like
(tenant_id, user_id).
- Is my CSV uploaded? No. Parsing, joining, and diffing all happen in your browser. Nothing is sent to a server or logged.
- What if my files have different column names? Pick the matching column on each side as the key; non-key columns are compared by header name and shown as missing when only one side has them.
- How big can the CSVs be? The tool handles tens of thousands of rows comfortably; multi-million-row files may be slow — split by partition or load into a database for those.
Runs locally in your browser. No uploads. No analytics on pasted CSV data.