Compare CSV files with different column headers
Connect Customer ID to client_id without rewriting your source exports.
Exports often describe the same records in different vocabularies. One system writes Customer ID; another writes client_id. A spreadsheet comparison that requires identical headers pushes you into renaming columns before you have checked what they mean.
Column mapping makes that relationship explicit. You keep the two originals, identify which fields correspond and compare the mapped values. This also makes exclusions visible: a column omitted from the mapping is outside the comparison you are asking the tool to perform.
Build a small field dictionary
Before importing, write down the key field and the two or three values that matter most. For a synthetic customer migration, the working dictionary might look like this:
| CRM export | Directory export | Role |
|---|---|---|
| Customer ID | client_id | Row key |
| Primary Email | email_address | Compared value |
| Billing City | invoice_city | Compared value |
| Last Synced | No equivalent | Exclude intentionally |
That final row matters. If one exporter includes its own processing timestamp, comparing it to an unrelated update timestamp can fill the result with differences that do not answer your migration question.
Use suggestions as evidence
Spreadsheet Comparison suggests mappings using header patterns and data overlap. A name such as customer_id can resemble Customer ID, and shared values can help identify a correspondence when names differ. Review the suggested destination for each field and adjust uncertain matches before comparing.
Overlapping data is useful but ambiguous. Billing and shipping city columns may contain many of the same city names. Several status fields can contain the word “active.” A good suggestion still needs your understanding of how the exporting systems use a field.
Check meaning, units and scope
Three questions prevent many misleading mappings. Does each field describe the same thing? Does it use the same units or representation? Does it cover the same scope? “Total” might mean a tax-inclusive invoice amount on one side and a pretax item subtotal on the other.
A mapping does not transform currency, split names, translate status labels or convert time zones. If one exporter writes “GB” and another writes “United Kingdom,” decide whether that representation difference matters. When a business transformation is necessary, perform it in a separate working export and retain the transformation steps with your review notes.
Separate the key from the compared fields
Map the identifier and mark it as the key. Then choose the values whose changes you want to inspect. If you make a frequently edited email address the key, an email correction may appear as a record present only in each file rather than a changed value on one matched record. A stable customer ID is usually the better identity when both systems preserve it.
Composite keys help when one column cannot identify a record. For invoice lines, map both invoice ID and line number. Inspect duplicate and blank-key warnings before interpreting the resulting groups.
Spot-check the mapping, then compare
Choose a known record and inspect the full row on both sides. Check the identifier, the most important value and one field you expect to differ. If almost every row changes, revisit the mapping and representation choices before assuming the migration failed.
The app also exposes fields from supported JSON object cells as separately mappable values. If one export puts a billing address into a JSON column while the other uses individual columns, see the JSON address guide. Map the leaf field that carries the value, not the whole address container.