Join CSV files

Add lookup columns to a CSV and see why keys did or did not match.

FreeNo pass requiredNo ads

Your text and files stay in your browser.

Drop a file here, or use Open file. Ctrl+Enter / Command+Enter runs the tool.

Ready for your input
Processed on your device
No uploads. No ads. No Data Pass required. Buy me a coffee

Add lookup data and understand every missed match

Join CSV files locally, keep main rows in order, and add selected lookup columns. The report counts matches, duplicates and blank keys, then explains which optional rules would help unmatched keys. Each input has its own separator: join a comma-separated export to a tab-separated lookup.

CSV joins for everyday data work

Add an account manager

Input

customer_id,company
123,North Star
456,Harbor

Result

customer_id,company,manager
123,North Star,Avery
456,Harbor,Chloé

Lookup file: customer_id,manager followed by 123,Avery and 456,Chloé. The shared customer_id column is selected automatically. Each main row keeps its values and gains its account manager.

Find customers missing from the CRM

Input

customer_id,company
123,North Star
456,Harbor

Result

customer_id,company,manager
456,Harbor,

The lookup file contains only customer_id 123 and its manager Avery. Choose Only main-file rows with no match to find customer 456.

Explain keys that look similar

Input

key
ACME 
North Star
00123

Result

key,manager
ACME ,
North Star,
00123,

The lookup file uses ACME, North Star with an ordinary space, and 123. Exact matching keeps these main rows unmatched. The report identifies surrounding spaces, a non-breaking space (U+00A0), and leading zeros; enable only the matching rules you intend.

How to join two CSV files

  1. Paste or open the main and lookup files, each with a header row. Choose separators if automatic detection is uncertain.
  2. Review the two key pickers. A shared column name is selected first; add up to two more key pairs for composite matches.
  3. Choose rows to include, duplicate handling and lookup columns to add. Review near-match suggestions before enabling a matching option.
  4. Copy or download the joined CSV. Inspect it, convert it to JSON, or generate INSERT statements. Undo returns to the original join after a next step.

CSV join questions

How is this different from VLOOKUP?

The default keeps all main rows and the first lookup match, like VLOOKUP. Other modes keep matched or unmatched rows, include unmatched lookup rows, or expand duplicates. The report explains missing matches.

What happens with duplicate keys?

Use the first match is the default. One output row per match expands each main row in lookup order. Duplicate counts refer to distinct repeated key groups; the lookup list shows every source line. Unmatched means the key is absent in the other file, not a duplicate skipped by first-match mode.

Why didn't my keys match?

Matching starts exact. The report checks case, spaces, hidden formatting and digit-only leading zeros. If no single option helps, it finds a combined candidate and the smallest option set for that pair. Blank keys never match. Hidden matching keeps intentional joiners, accents and look-alike letters.

Can I match on two columns?

Yes. Add another key column for two or three pairs, matched in order. Each pair can have different header names. If any component is empty or whitespace-only, that row has a blank key.

Does it change my files?

No. Your source inputs stay unchanged. Matching options affect comparisons only; output copies original values, including leading zeros, Unicode and quoted line breaks. Files are read on your device and are never uploaded.

Headers, limits and output order

Both inputs require headers; the first record is treated as the header, since CSV cannot reliably distinguish names from data. Empty or duplicate header names are rejected. Missing fields become blank; extra fields are retained in clearly named extra columns and reported. Output uses the main separator and CRLF record endings. Full joins append unmatched lookup rows in lookup order and fill their keys into main key columns. Lists show 12 entries initially. Each input is limited to 10 MiB and 250,000 cells; output is also limited to 250,000 cells and the shared size/time limits. Duplicate expansion can reach these limits quickly. Hidden-character next steps inspect the affected source file, preferring main when both contain hidden keys.