csvkit.org
CSV (Comma-Separated Values) utilities, in the browser
Say hi →

Join Two CSVs on a Key

inner · left · right · full outer · match report · nothing uploaded

Merge two CSV files side by side on a shared column — customers with their orders, product IDs with their prices, users with their last login. This is the operation you'd do with VLOOKUP in a spreadsheet or a JOIN in SQL, with a report telling you exactly how many rows matched and how many didn't, which is the part spreadsheets never tell you.

join
A: drop a .csv here, or
B: drop a .csv here, or
ready

How to join two CSV files

  1. Put the left file in the first box and the right file in the second — paste, or drop a file onto either zone.
  2. Pick the key column on each side. They don't need the same name: id can join to customer_id.
  3. Choose the join type. Start with left if file A is your source of truth and you want to see what's missing.
  4. Read the report: matched rows, unmatched on each side, result row count. Then copy or download.

Which join type do I want?

When the key isn't unique

If a key appears twice on the right, each matching left row is emitted twice — that's how SQL behaves, and it's why a join can return more rows than either input. The report flags this so a surprise row count doesn't look like corruption. If you didn't expect duplicate keys, check the right-hand file with Find duplicates first; if the right side is a lookup table, Dedupe it before joining.

Why keys fail to match

Nearly always whitespace or case: "ABC123 " is not "abc123". Both toggles are on the toolbar — trimming is on by default, case-folding is off. Beyond that, watch for numeric keys stored differently on each side (007 against 7) and for IDs that a spreadsheet converted to scientific notation. Data profile shows both sides' formats quickly.

FAQ

What if both files have a column with the same name?

The right-hand copy gets the suffix from the toolbar (_b by default), so nothing is silently overwritten. The report lists every column it renamed.

How is this different from Merge files?

Merge files stacks files vertically — more rows, same columns. Joining works horizontally — same rows, more columns.

Can I join three files?

Join two, download the result, then join that with the third. Each pass keeps its own key selection.

Are the files uploaded?

No. Both files are parsed and joined in your browser, which matters when you're joining customer data against internal IDs.

Privacy

100% client-side. No upload. See the privacy policy.