Merge two CSVs like VLOOKUP or a SQL JOIN: inner, left, right or full outer, with match counts and a CSV download.
To join two CSV files, paste both, name the key column that appears in each, and choose a join type: the tool matches rows whose key is equal and writes one combined CSV. It works like a VLOOKUP in a spreadsheet or a JOIN in SQL. With the sample, file A has the people 001 to 004 and file B has plans for 001, 003 (twice) and 009. An inner join returns 3 rows: 001 once and 003 twice, because 003 appears twice in B. A left join also keeps 002 and 004 with empty plan cells, giving 5 rows. A right join keeps 009 instead, and a full outer join keeps all of them, 6 rows in total. Leave the key boxes empty and the tool uses the first column name found in both files.
The join types are the ones defined in the SQL standard (ISO/IEC 9075). Inner keeps only rows whose key is in both files. Left keeps every row of file A and fills the file B columns when a match exists. Right does the same for file B. Full outer keeps every row of both files. The counts under the result show how many rows of A matched, how many rows of A and B found no partner, and how many keys repeat, so you can see at once whether the join did what you expected. For a lookup that adds columns to a list you already have, use Left.
When a key appears 2 times in A and 3 times in B, every pair matches and you get 6 rows. That is correct for a join but often surprises people, so the tool warns when keys repeat in B. Choose First match only to get at most one matched row per row of A, like VLOOKUP, which also returns the first match; use Left plus First match for exactly one row per row of A. Keys are compared as text, so 001 and 1 are different and leading zeros are kept. Trim spaces and Ignore case make 'ann ' match 'Ann'. Rows with an empty key never match anything. Several key columns work too: write them separated by a semicolon, such as id; region, in the same order for both files.
Column names that exist in both files are kept once when they are the key, and otherwise the B column is renamed with _b, such as name_b. Use Output columns to keep only some columns in the order you want. Cells that start with = + - @, a tab, a line break or the full-width forms = + - @ (after any spaces) get a leading apostrophe by default, following the OWASP CSV injection guidance. This reduces the risk of a spreadsheet running them as formulas but does not guarantee it; turn this off if you need the raw values. The separator of each file is detected (comma, semicolon, tab or pipe). Each file can hold up to 10,000 rows and 200 columns, a row cannot have more values than the header, the output can have up to 50,000 rows, and the result is capped at 2 million characters (about 2 MB), so long text cells lower the row limit. First match only is available for Inner and Left joins. Everything runs in your browser and nothing is uploaded; only your option choices are remembered.
Paste file A and file B, type the key column name (or leave it empty to use the first name both files share), pick Inner, Left, Right or Full outer, and download the result. Two files with 4 and 4 rows and 2 shared keys give 3 inner-join rows in the sample.
Inner keeps only keys found in both files. Left keeps all rows of A, right keeps all rows of B, and full outer keeps all rows of both. A key missing on one side gets empty cells for that side's columns.
A key repeats in file B. If 003 appears 2 times in B, the one row 003 in A becomes 2 rows. Choose First match only to keep at most one matched row per row of A, like VLOOKUP. Use Left plus First match for exactly one row per row of A.
Yes. Every value is handled as text, so 001 stays 001 and does not match 1. If you want them to match, fix the zeros in one file first.
Yes. Write the key columns separated by a semicolon, for example id; region, in both key boxes. A row matches only when every key part is equal, in the same order.
Up to 10,000 rows and 200 columns per file, up to 50,000 output rows, and up to 2 million characters of output, whichever comes first. The data stays in your browser.