Productivity and Utilities

CSV Join Tool

Paste two CSV tables and name the key column to add the columns of one to the rows of the other.

Leave empty to use the same name.

    The join matches keys after trimming spaces. If a key repeats on both sides, every pairing is kept, as in a database join. Your data stays in this page and is not uploaded.

    Next step

    How to use the csv join tool

    1. Paste the left CSV and the right CSV, each with a header row.
    2. Type the key column in the left CSV. If the right CSV names it differently, type that name too.
    3. Choose which rows to keep: matching rows only, all left rows, or all rows from both.
    4. Copy the joined CSV or download it. Columns of the right table are added to the right of the left table.

    What a join does

    A join adds the columns of one table to the rows of another by matching a key. It works like a spreadsheet lookup applied to every row at once. Orders joined to customers on the customer id give rows that show the order and the customer name together.

    With the sample data, joining four orders to three customers on customer_id and keeping all left rows gives four rows. Orders 1001, 1002 and 1004 find a customer. Order 1003 has the id C9, which is not in the customer table, so its name and city are empty. Customer C3 has no orders and is left out, unless you keep all rows from both. That is 3 matched pairs, 1 left row with no match and 1 right row with no match.

    Choosing what to keep

    Matching rows only gives the overlap and drops anything unmatched on either side. All left rows keeps every row of the first table and fills blanks where there is no match. All rows from both also adds the right rows that matched nothing, with the left columns left empty and the key filled in.

    If a key appears more than once on a side, every pairing is kept, as in a database. Two orders for the same customer give two joined rows, which is usually what you want. If both sides repeat a key, you get all combinations, so check the row count in the summary line. To put two files with the same columns one under the other, use the CSV Merge and Split tool.

    Column names and tidy keys

    If the right table has a column with the same name as one in the left table, the right one is renamed with (2) after it, so nothing is overwritten. The key from the right table is not repeated, since it matches the left one. Keys are compared after trimming spaces, and you can ignore capital letters.

    Use the CSV Group By Summary afterwards to total the joined data, or the CSV Diff Tool to compare the result with an earlier version. The result is plain text in CSV form, which opens in any spreadsheet. The CSV JSON Converter turns it into JSON.

    Assumptions and limits

    • Both tables have a header row with unique column names, and the key column exists in each.
    • Keys are matched as text after trimming spaces, and optionally ignoring capital letters.
    • Up to 100,000 rows per file are read. Cells with quotes, commas and line breaks are handled.
    • Everything runs in your browser. Nothing is uploaded, and the data is not stored.

    Formulas reviewed October 10, 2026. See the calculation methodology for how SumPanda rounds, tests and sources its formulas.

    Frequently asked questions

    What is the difference between a left join and an inner join?

    An inner join keeps only rows with a match in both tables. A left join keeps every row of the first table and leaves the new columns empty when there is no match. Choose the left join when you must not lose any rows.

    What happens when a key is repeated?

    Every pairing is kept. If a customer appears once on the right and has three orders on the left, you get three joined rows. If a key repeats on both sides, all combinations are produced.

    Can the key columns have different names?

    Yes. Type the left name in the first box and the right name in the second. If you leave the second box empty, the tool uses the same name for both.

    Why was a column renamed with (2)?

    Both tables had a column with that name. The right one is renamed so that both columns are kept in the result.