Skip to content
100% local

CSV join by key

Join two CSV tables into one using a shared key column.

Input
Second CSV table

CSV join by key

Paste two CSV tables and this tool joins them into one, matching rows by a shared key column — the same operation as a spreadsheet VLOOKUP or a SQL JOIN, without installing anything. Paste an orders table and a customers table, or any two exports sharing an ID column, and get back one combined table.

The join type controls which rows survive: inner keeps only matching keys, left keeps every row from the first table, right keeps every row from the second, and full keeps every row from both, filling gaps with your chosen fill value. The key column can have a different name in each table, and comparison can trim whitespace and ignore case, so "ID-42" and " id-42 " still match. When both tables share a column name other than the key, the second table's version is renamed with a prefix you choose, so nothing is silently overwritten. Turning on "Flag rows with duplicate keys" marks any row whose key repeats within its own table — useful for catching a join about to fan out.

The tool reads CSV per RFC 4180, so quoted fields, embedded commas and line breaks inside quotes parse correctly, and it accepts Windows (CRLF) or Unix (LF) endings in either table. The input delimiter can be auto-detected per table or fixed to comma, semicolon, tab or pipe, with the output delimiter chosen independently. The live tally reports rows read from each table, how many keys matched, and how many were duplicated.

Everything runs locally in your browser — neither table is ever uploaded, so it's safe to join spreadsheets with customer data. Copy the result, download it as a .txt file, or send it back into the input to chain another step.

FAQ

What happens to rows whose key has no match?
It depends on the join type: inner drops them, left keeps every row from the first table, right keeps every row from the second, and full keeps unmatched rows from both, filling the missing side with your chosen fill value.
Can the key column have a different name in each table?
Yes. Set "Key column in first table" and "Key column in second table" independently — for example "user_id" on one side and "id" on the other.
What happens if the same key appears more than once?
Every matching pair is included, so a key that appears twice on one side and once on the other produces two output rows. Turn on "Flag rows with duplicate keys" to mark them.
What if two columns share the same name across both tables?
The second table's column is renamed with the prefix you set (default "right_") so both versions stay in the output without overwriting each other.
Are my CSV tables uploaded anywhere?
No. The join runs entirely in your browser — neither table ever leaves your device.