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
- Paste or open the main and lookup files, each with a header row. Choose separators if automatic detection is uncertain.
- Review the two key pickers. A shared column name is selected first; add up to two more key pairs for composite matches.
- Choose rows to include, duplicate handling and lookup columns to add. Review near-match suggestions before enabling a matching option.
- 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.