Utilities tool

Join two CSV files by a key

Enrich CSV records through a unique lookup key with unmatched-record exports.

Your inputs

Your results

Ready when you are
Add your inputs or try an example.
Your results will appear here.

How it works

Join complete CSV records using an explicit key from each input. Each lookup key must identify one record. Inner joins retain matches; left joins retain every left record and attach blank lookup columns to unmatched rows.

Read the source reference ↗

A few things to know

No fuzzy or many-to-many matching, identifier coercion or automatic delimiter detection. Each input: 2 MB, 10,000 data rows, 200 columns. Output at most one row per left row. Uploaded files take priority. Formula-like export values receive apostrophes.

A little context

When to use this tool

A keyed CSV join attaches columns from a lookup table to each matching record in another export. Choose which column identifies the record on each side and whether unmatched left records should remain. The lookup must contain one row per compared key, which avoids silently selecting the first duplicate or creating an uncontrolled many-to-many expansion. Exact comparison is the default. Trimming or ignoring case is an explicit decision, not a hidden guess about identifiers. Output column names keep visible left and right prefixes, and unmatched records have their own downloads.

  • Attach product names to order records using SKU values.
  • Enrich a report from a unique customer or item lookup.
  • Review unmatched left records and unused lookup records separately.

How to use join two csv files by a key

  1. Supply both tables

    Paste or upload the left export and lookup CSV. Both use the selected delimiter and unique nonempty headers. Each uploaded file takes priority over its corresponding textarea.

  2. Choose keys and match rules

    Enter exact header names, choose left or inner join, and select exact, trimmed or trimmed case-insensitive comparison. Resolve duplicate normalized lookup keys before joining.

  3. Inspect matched and unmatched records

    Check match counts, the prefixed-column preview and all three CSV downloads. Repeated left keys are retained individually. Blank left keys never match.

Try the numbers

Attach one product to two orders

Inputs

Left orders A and B use SKU 001; order C uses 999. The lookup names SKU 001 Notebook and SKU 002 Pen. Use a left join.

Result

Three output records are produced. A and B both receive Notebook; C has blank lookup columns. Two left records match, one is unmatched, and the Pen lookup is unused.

What it means

001 is not coerced to 1. Unique lookup keys keep output cardinality at one row per left record.

Common mistakes to avoid

Allowing duplicate lookup keys

Resolve them rather than assuming the first row is correct. Case-insensitive comparison can create new duplicates.

Using an inner join when you need every order

An inner join omits unmatched left records. Inspect the separate unmatched export before relying on its output.

Ignoring column prefixes

left.SKU and right.SKU show their origin. Rename later only after verifying which source you want.

Useful answers

Frequently asked questions

Definitions, edge cases, and practical next steps for this tool. Search all tool FAQs ↗

What is the difference between left and inner joins?

Left retains all left records and fills unmatched lookup columns with empty strings. Inner retains only left records with a matching lookup key.

Can the same left key appear twice?

Yes. Each left record remains a separate row and receives the same unique lookup record. Lookup-side duplicates are rejected.

Are 001 and 1 treated as equal?

No. Keys remain strings. Even trimmed or case-insensitive comparison does not perform numeric conversion.

Will blank keys match other blanks?

No. Blank lookup keys are rejected, and blank left keys are unmatched. Trimming mode also treats whitespace-only left keys as blank.

Can I ignore case or whitespace?

Choose the explicit comparison mode. It affects matching keys, not exported source values. Review whether that normalization is appropriate for your identifiers.

What happens to duplicate column names across files?

Source prefixes keep them distinct, such as left.Product and right.Product. Duplicate headers within either single input are rejected.

Can this do fuzzy or many-to-many matching?

No. V1 requires unique lookup keys and produces at most one output row per left record. It avoids ambiguous matches and uncontrolled expansions.

How large can the result be?

Each input is capped at 2 MB, 10,000 rows and 200 columns. The exported CSV is bounded at 8 MB, including repeated lookup content.

Sources and method

Use the references below to check definitions and platform guidance. The model’s scope and limits are explained above. Read our editorial standards.

Help

How can we help?

Find instructions, report a problem, or leave a message.

Read this tool’s FAQs ↗

Common questions

Where do I start? Try an example, then replace its values with yours.

Why did my upload fail? Check the field error, accepted format and file-size limit. Start with a small sanitized sample.

Where are my results? Review the result panel, then use its copy or download controls. If a calculation fails, check the error beside the input.

Message us

Chat opens Tawk.to. It processes your messages and connection data. Do not paste private inputs or file contents. Availability and response times vary.