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 areYour 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.
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
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.
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.
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.
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.
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.