Think Build Implement Repeat
London, UK +44 7367 067226
WhatsApp FOLLOW f in X
  1. Home
  2. Blog
  3. Joining Records Across Systems With No Common Key
Data & Scraping

Joining Records Across Systems With No Common Key

The CRM, ERP and website each know the customer by a different identifier. How to build a link good enough to model on, and be honest about its limits.

Updated 2 min readBy SpiderHunts Technologies

Free estimateNo obligation

Get a free estimate

Tell us what you need. A senior engineer reads every enquiry.

Takes under a minute. We never share your details.

  • Free consultation
  • No commitment
  • NDA on request

Prefer to talk? Book a free 30-minute call →

Quick answer — TL;DR

Most businesses cannot join their systems cleanly because no shared identifier exists. Build an explicit mapping table with a confidence level per link, use only high-confidence links for modelling, and measure what share of records you could not match.

The join that does not exist

The single most common blocker we meet on data projects is not volume or quality. It is that the customer in the CRM, the account in the ERP and the visitor on the website cannot be reliably connected.

Each system was implemented separately with its own identifier, and the link lives in people's heads or in a spreadsheet somebody maintains. Any model needing a full customer view runs into this immediately.

Do not join inside the model

The instinct is to write a join with fuzzy matching inside the data pipeline. This buries a set of judgement calls in code where nobody can inspect them, and the same record may match differently between runs.

The better pattern is an explicit mapping table: a durable artefact listing which record in system A corresponds to which in system B, with a confidence level and a note on how the link was established.

  • It can be reviewed and corrected by people who know the customers
  • Corrections persist rather than being redone on every run
  • Downstream work can filter by confidence rather than accepting everything
  • Coverage becomes measurable, which turns a vague worry into a number

Building the mapping

  1. Start with anything deterministic - a company registration number, an email address, an account reference appearing in both systems even inconsistently formatted.
  2. Normalise aggressively before comparing: case, punctuation, company suffixes, address formats.
  3. Apply probabilistic matching on the remainder, scoring across several fields at once.
  4. Set a high threshold for automatic acceptance and route the middle band to review.
  5. Record confidence and method for every link, so downstream users can judge.

The techniques are the same as for finding duplicate customer records; the difference is that here you are linking across systems rather than within one.

Be honest about coverage

Every cross-system dataset should report what share of records were matched, and whether the unmatched ones differ systematically from the matched.

That second question is the important one. If matching succeeds mainly for large, long-standing accounts, then any model built on the joined data describes those customers and not the others. Presenting it as a view of all customers would be misleading.

CheckWhy
Match rate by valueCoverage of revenue, not just of rows
Match rate by age of accountOlder accounts often match better
Match rate by channelOnline-only customers frequently match worst
Unmatched profileWhether the gap is random or systematic

The permanent fix

A mapping table is a workaround. The durable answer is a shared customer identifier written into each system at the point of creation, so future records link by construction.

That is a systems change rather than an analytics one and it takes longer, but it removes the problem permanently rather than requiring maintenance forever. If a data project keeps hitting the same join, that is the business case for making the change.

A join rebuilt from scratch every night is a decision nobody is reviewing.

FAQ

Frequently asked questions

The questions readers ask us after this guide.

Still have a question?

Ask us directly — a senior engineer will get back to you.

Ask about your project

Can we use email address as the key?

Partly. It works where captured consistently, but people change email, share addresses within a company, and use different addresses in different channels.

How good does the match rate need to be?

Good enough that the matched set is representative. A lower rate that is unbiased is more useful than a higher one that systematically excludes a group.

Should unmatched records be discarded?

Not silently. Keep them, report them, and check whether they differ from the matched population before drawing conclusions.

Is a master data management system the answer?

It can be, though it is a significant undertaking. A reviewed mapping table often delivers most of the benefit far sooner.

Keep reading

More on Data & Scraping

Start here

Want machine learning project details from us?

Tell us what you are trying to predict and roughly what data you hold. We will come back with an honest view on whether machine learning is the right tool, what the work would involve and a realistic cost range. If a spreadsheet would do the job, we will say so.

  1. You tell us what you needTwo minutes on the form, or a message on WhatsApp.
  2. A senior engineer reviews itAnd comes back with questions, a realistic range and an honest view on fit.
  3. Free 30-minute scoping callWe talk through scope, options and a realistic estimate — with no obligation.
Free estimateNo obligation

Talk to someone who builds this

Send a short brief and we will come back with an honest view and a realistic range.

Takes under a minute. We never share your details.

  • Free consultation
  • No commitment
  • NDA on request

Prefer to talk? Book a free 30-minute call →