CRM data quality
CRM data quality, and why your new accounts are not new
CRM data quality is whether one company occupies one record, whether that record is true today, and whether anyone can act on it. When sourcing keeps returning companies you already hold, those are not two problems. They are one, and it starts with what you match on.
What is CRM data quality, in practical terms?
CRM data quality is whether one company occupies exactly one record, whether that record says what is true today, and whether a person can act on it without checking something else first. Most CRM quality problems are failures of the first, and they create the second and third.
This page is about a specific and common version of the problem: a CRM that holds tens or hundreds of thousands of companies, a team that needs new accounts every week, and a situation where most apparently new companies turn out to be already in the system while the existing records are too poor to hand to anyone.
Those feel like two problems. They are one, and the fix for both starts in the same place.
Why are your new companies already in the CRM?
Because you are matching on name. Company names vary in punctuation, legal suffix, trading name and spelling, so the same business arrives repeatedly looking new. Every near match that slips through becomes another record, and the duplicate rate compounds with every import.
A GTM engineer describing exactly this situation on a French dataset of more than 100,000 companies got a reply that named the mechanism precisely: name matching is why new companies keep turning out to be in the CRM already, and why the bad records feel unusable. One cause, two symptoms.
Consider how many ways one company can be written. With and without a legal suffix. With an ampersand or the word and. With an accent or without. As a trading name rather than a registered one. After a rebrand. After an acquisition, under the parent. A fuzzy match catches some of these and introduces false positives of its own, which is its own kind of damage.
The answer is not better fuzzy matching. It is matching on something that does not vary.
What should you match on instead?
The official registration number, wherever one exists. It is unique, it survives renaming and rebranding, and it is published free by the register. Domain is a workable second choice once normalised. Company name should be a label you display, never the key you join on.
| Key | Quality | Why |
|---|---|---|
| Official registration number | Best | Stable, unique, survives renaming and acquisition. SIREN in France, company number in the UK, and the equivalent elsewhere. This is the key to hold. |
| Legal entity identifier | Good where present | A global identifier for entities that have one, which is a minority of companies but useful for larger ones. |
| Domain, normalised | Workable | Strip protocol, www and subdomain, lowercase it. Fails on companies with several domains and on subsidiaries sharing one. |
| Company name | Worst | The default in most CRMs and the cause of the problem. Punctuation, legal suffixes, trading names and typos all produce apparent new companies that are duplicates. |
Adding a registration number field to your CRM and backfilling it is the single highest value data project most B2B companies are not doing. It is unglamorous, it takes a week or two, and it makes every subsequent question answerable: do we already have this company, how many records is it, has anyone worked it.
One practical note on subsidiaries. A registration number identifies a legal entity, and a group may contain many. Decide early whether you sell to entities or to groups, because that decision determines whether two records with different numbers are duplicates or correctly separate. Getting it wrong in either direction is expensive, and nobody makes the decision explicitly unless prompted.
Where do you get registration numbers for free?
From the official register, in most countries that have an open one. Several publish full bulk downloads and keyless APIs. Coverage and openness vary enormously by country, and the gap between the best and the worst is the main constraint on this approach.
| Country | Source | Access | Caveat |
|---|---|---|---|
| United Kingdom | Companies House | Free API plus free monthly bulk snapshots, around 5.4 million companies, no commercial restriction | Beneficial ownership is included, but a large share of filed accounts are scanned documents rather than structured data |
| France | INSEE Sirene and INPI | Free and open, commercially reusable, with the SIREN identifier on every company | Split across more than one body, so you may need two sources for statistical and legal data |
| Norway | Brønnøysund | Free API and a full bulk download | Among the most developer friendly registers in Europe |
| Estonia, Finland, Czechia, Poland | National registers | Open bulk data available | Coverage and field depth vary by country |
| United States | SEC EDGAR | Free and keyless | Public filers only. It does not cover the state level registrations where most companies actually sit |
| Germany, Italy, Netherlands | National registers | Largely paid or restricted | One is capped at roughly 60 requests an hour, and at least one does not accept foreign organisations as subscribers directly |
Two warnings about that table. The details come from a survey of registry access rather than from each register's own documentation, and these things change, so verify against the register itself before planning a sprint around it. And the United States row is the one that catches people out: the free federal source covers public filers, while most American companies are registered at state level with no single free national source.
Where an official register is open, it is better than a commercial database for the fields it holds, for one reason: it is the source. Everyone else is a copy of it with a lag.
How do you build a genuinely greenfield list?
Subtract what you already hold. Filter the register by industry code and size band to get everything that could be a customer, then remove every registration number already in your CRM. What remains is genuinely new, and it is the only list worth paying to enrich.
The sequence, as described by a practitioner working on French data and generalised.
One. Backfill registration numbers onto your existing records, so you know what you hold in a form you can compare.
Two. Pull the register filtered to your industry codes and size bands. This is your addressable market as the government defines it, which is a more complete starting point than any vendor list.
Three. Subtract. Everything in the register that is not in your CRM is genuinely new.
Four. Re-run it monthly. The difference between runs gives you new company formations and companies crossing into your size band, which is a prospecting signal most teams buy and few generate themselves.
Five. Enrich and buy contacts on that delta only.
The last step is where the savings are. Most teams enrich the whole list because they cannot tell which part of it is new, which means paying repeatedly for companies they already hold.
Should you clean first or source first?
Clean first, almost always. Practitioners in this situation are close to unanimous: adding records to a system full of duplicates makes the problem worse and hides it at the same time. A week of cleaning usually produces more assignable accounts than a month of sourcing.
“If the CRM's full of junk data, no amount of new sourcing fixes the real problem. I'd spend a week cleaning what's already there before chasing fresh leads, otherwise you're just burning 500 slots a week on accounts that look new but are probably duplicates with misspelled names.”
A second reply in the same thread made the economic version of the argument: you are trying to solve a problem by throwing more money at it rather than fixing the root issue. Their suggestion was to ask what the data already in the CRM can tell you about which existing companies are worth targeting, which is a different and cheaper question than where to find more.
It is worth being concrete about what that means. In a CRM of 100,000 companies, it is unlikely all of them are customers or have been worked properly. Some were touched once by someone who has left. Some were disqualified for a reason that no longer applies. Some are excellent fits that nobody has ever called. Finding those is a query, not a purchase.
What does bad CRM data actually cost?
More than the storage and more than most teams count. The costs are spread across sales time, enrichment spend, reporting accuracy and trust in the system, and only the enrichment one appears on an invoice.
Sales time spent on records that were already worked
A rep assigned an account somebody called six months ago has no context, and the prospect does. That conversation starts at a disadvantage nobody chose.
Credits burned re-enriching companies you already hold
Paying again for a record that exists in a different spelling, which is the enrichment equivalent of buying the same book twice.
Reporting that quietly misleads
If one company occupies three records, your account coverage, penetration and territory numbers are all wrong in the same direction.
The erosion of trust in the system
Once the team knows the CRM is unreliable, they keep their own lists. Then there are two sources of truth and the official one gets worse.
“Bad quality data in many cases can be worse than no data as it just adds clutter and makes good data harder to action upon.”
That comment, from the same community, was aimed at a specific pattern worth naming: an executive who has heard that data matters and responds by maximising the amount of it in the CRM. Volume of records is the easiest thing to measure and the least related to whether the system is useful.
A better measure, if you need one for a board slide: the share of accounts a rep can act on without checking another system first. It is harder to game and it tracks what you actually want.
How do you deduplicate what you already hold?
Backfill the stable key, group by it, then merge deliberately with rules about which record survives. Do it in a staging copy, keep an audit of every merge, and accept that a residue will need human judgement. Automated merging without review is how a duplicate problem becomes a data loss problem.
A sequence that works on a large messy base.
Normalise before matching. Lowercase, strip legal suffixes, remove punctuation and accents, normalise domains to the registrable part. This alone surfaces a surprising share of duplicates.
Match against the register. Resolve each normalised name and domain to an official registration number. Where it resolves confidently, store it. Where it does not, flag it rather than guessing.
Group and rank. Within each group, decide which record survives by explicit rules: most recent activity, most complete, oldest created, whichever fits your operation. Write the rule down, because the exceptions will be argued about.
Preserve history. Merge activity and notes rather than discarding them. The reason a record is valuable is usually the history attached to it, not the fields.
Keep the residue. Some records will not resolve: sole traders, very new companies, foreign entities, anything misspelled beyond recognition. Flag them as unresolved rather than forcing a match. A known unknown is manageable, a wrong match is not.
Then prevent recurrence. None of this holds unless new records require the key on creation. A one off cleanup without a prevention rule means doing this again in eighteen months.
What does deduplication actually involve technically?
Three stages: blocking, comparison and resolution. Blocking narrows the candidate pairs so you are not comparing every record with every other, comparison scores the remaining pairs, and resolution decides which scores are high enough to merge automatically and which go to a human.
Deduplication at the scale of a hundred thousand records is a known problem with known techniques, and most CRM cleanups fail because they skip the first stage.
Blocking. Comparing every record with every other is quadratic, so a hundred thousand records means five billion comparisons. Instead you group records into blocks that could plausibly match, by normalised domain, by the first few characters of a normalised name, by postcode, and compare only within blocks. This turns an impossible job into a few minutes of compute.
Comparison. Within a block, score each pair on several fields rather than one. Normalised name similarity, domain match, address match, registration number match if present. A single field comparison produces either false merges or missed duplicates depending on how you set the threshold, and a multi field score lets you separate the confident cases from the ambiguous ones.
Resolution. Above a high threshold, merge automatically. Below a low one, ignore. The band between them goes to a review queue, and that band is where all the value and all the risk sits. Teams that automate the whole range either lose data or leave most duplicates in place.
Two engineering notes that save pain. Keep the merge reversible for a period, by recording what was merged rather than destroying the losing record immediately. And run the whole thing against a staging copy first, with a report of what would happen, reviewed by someone who knows the business before anything touches production.
How do you stop duplicates coming back?
Resolve the key at the point of creation, not afterwards. Every route that creates a company record, forms, imports, integrations and manual entry, should attempt resolution and either attach an existing record or create one with a key. Without this, a cleanup decays from the day it finishes.
The routes that create records in a typical B2B company, and what each needs.
Inbound forms. Resolve on submission from the email domain. A form that creates a fresh company record for every submission will rebuild your duplicate problem faster than anything else.
List imports. The largest single source of duplicates. Run the resolution step on the file before import rather than after, and report how many rows matched existing records. That number is usually higher than whoever supplied the list expects.
Integrations. Any tool writing into the CRM needs the same rule. A sales engagement platform or a marketing tool creating records with its own matching logic will quietly undo your work.
Manual creation. Search before create, with the search matching on normalised values rather than exact ones. Most CRMs make this configurable and most configurations leave it on exact match.
Then measure it. A monthly count of newly created duplicate groups tells you whether prevention is working, and it is a far better data quality metric than total record count. If that number is near zero, the pipeline is doing its job. If it is climbing, one of the four routes above has no resolution step.
What if your market has no open register?
Fall back to the domain as the key, and accept a lower ceiling. Normalised domain resolves a large share of B2B companies, fails on multi domain groups and on companies that share one, and is still far better than matching on name. Where a paid register exists and the market matters, buying it is usually cheap relative to the duplicate cost.
Several large European markets have restricted or paid registers, and the United States has no single free national source for the state level registrations where most companies sit. So this situation is common rather than exceptional.
What to do instead, in order of preference.
Use a paid register for that market only. You rarely need global coverage. If eighty percent of your pipeline is in two countries, buy those two and use domain matching elsewhere.
Normalise domains properly. Strip protocol, www and tracking, reduce to the registrable domain, and keep a list of known exceptions for groups that genuinely share one. This is an afternoon of work and it resolves most of what name matching misses.
Use a global identifier where entities have one. Larger companies and anything in financial markets frequently carry one, and lookup is free. Coverage is a minority of companies and heavily skewed to the large ones, which may be exactly your target market.
Accept an unresolved bucket. Sole traders, very small companies and recent formations will not resolve anywhere. Flag them, do not force a match, and review them as a group rather than letting them pollute the main base.
The point is not perfect resolution. It is replacing name matching with anything more stable, because almost anything is.
What should you refresh, and how often?
Refresh company level fields from live sources on a schedule, and person level fields only when you are about to use them. Company fields change slowly and can be refreshed in bulk cheaply. Person fields decay fast and refreshing them in bulk is how enrichment budgets disappear.
A workable cadence for most B2B companies.
Monthly, from the register. Status, size band, industry code, registered address. These come free where the register is open and they catch companies that have closed, changed size band or been acquired.
Monthly, from the company's own website. What they sell, their technology stack, whether they publish pricing, whether they are hiring. All free to read, all current because they maintain it, and all useful for scoring.
Before outreach, per person. Email validity and the mail provider. Checking that a domain can receive mail at all costs nothing and protects your sending reputation, which is the one asset in outbound you cannot repurchase.
On demand only, for contacts. Direct dials and personal emails, bought for the accounts you are actually working this quarter rather than across the whole base.
The principle underneath: refresh in proportion to how fast a field decays and how soon you will use it. Most enrichment overspend comes from refreshing fast decaying fields across records nobody will touch for a year.
Where do the free sources stop?
At the door of the company. Registers tell you an entity exists, its size band, its industry and its status. Company websites tell you what it sells and how it operates. Neither tells you who to call, and that genuinely does require paying someone.
Being clear about the boundary saves disappointment.
What free sources cover well. Existence, legal status, registration number, industry classification, size band, registered address, formation date, and from the website: what they sell, their stack, whether they publish pricing, whether they are hiring, published contact details.
What they do not cover. Named decision makers, direct dial numbers, verified personal email addresses, org charts, buying intent. These are the fields contact databases exist to supply, and no amount of register querying produces them.
So the honest architecture is layered. Registers for identity and the addressable market. Company websites for what they do and whether they fit. Paid contact data for the people, on the accounts that survived the first two. We built a free tool for the middle layer and we have written separately about where paid enrichment earns its fee.
Can you automate all of this?
Most of it, and you should, because a manual cleanup decays from the day it finishes. The parts worth automating are the key resolution, the register refresh, the greenfield delta and the duplicate detection. The part to keep human is the merge decision on ambiguous records.
What a working setup looks like in practice.
A resolution service. Given a name and a domain, return a registration number and a confidence level. Called on record creation and run in batch over the existing base.
A scheduled register sync. Monthly pull of your industry and size filters, diffed against last month, producing new formations and band crossings as a feed rather than a project.
A duplicate queue. Candidate groups surfaced for review rather than merged silently, with the high confidence ones merged automatically by an explicit rule.
A refresh job. Company level fields updated on a schedule from register and website, with a timestamp per field so you can tell what is stale.
None of this is exotic engineering. It is a handful of scheduled jobs and a resolution step, and it is the kind of work that pays back continuously rather than once. It is also the kind of work that sits in a backlog forever, because it is nobody's quarterly objective.
How do you measure CRM data quality without inventing a score?
Measure four things a person can act on: the duplicate rate, the share of records that resolve to a stable key, the share a rep can work without checking another system, and the count of new duplicate groups created each month. Composite quality scores out of a hundred are satisfying and drive no decisions.
Duplicate rate. Groups of records resolving to the same entity, as a share of total records. Measure it once properly and you will have the number that justifies the project.
Resolution rate. What share of your base carries a confident stable key. This is the ceiling on everything else, because records that do not resolve cannot be deduplicated or refreshed automatically.
Actionability. The share of accounts where a rep has what they need without opening another tab. Harder to measure, closest to what you actually want, and best sampled by asking five reps to work ten accounts and counting.
New duplicate groups per month. The prevention metric. Falling means the resolution step at creation is working. Climbing means one of your inbound routes has no check.
What we would not track: total records, which rewards exactly the behaviour that causes the problem; completeness percentage across all fields, which counts fields nobody uses; and any vendor supplied quality grade, which is calibrated to make their product look necessary.
Review these quarterly rather than monthly. Data quality work moves slowly and a monthly cadence produces fiddling rather than decisions.
What should you have ready before starting?
An export of your company records, agreement on who decides the merge rules, and an honest answer about which markets actually matter. Most of the scoping difficulty is organisational rather than technical, and the technical part cannot start until those three exist.
The export. Company records with whatever identifiers exist, creation dates, owner and last activity. The last two matter more than people expect, because they decide which record survives a merge.
The decision maker. One person who can settle entity versus group, which record wins, and what happens to unresolved records. These are business decisions wearing technical clothes, and a project without that person stalls in week two.
The markets that matter. Register availability varies enormously by country, so knowing that most of your pipeline sits in two markets changes the approach completely. Teams frequently scope for global coverage they do not need and then stall on the hardest country.
What you do not need: a target quality score, a tooling preference, or a cleaned sample. We would rather see the data as it actually is, because the mess is the requirement.
How does Voliom help with this?
We build the pipeline described above: key resolution, register sync, duplicate detection, scheduled refresh and the greenfield delta. It is ordinary integration work and it is the kind that keeps paying, because it runs every month without anyone remembering to run it.
A first engagement is usually four to six weeks and starts with a diagnosis rather than a build, because the shape of the problem varies more than people expect.
- 01
Measure the duplicate rate
Days 1 to 3
Normalise and resolve a sample against the register, and report what share of your base is duplicated and what share will not resolve. This number alone changes most people's plans.
- 02
Agree the keys and the rules
Week 1
Entity or group, which record survives a merge, what happens to unresolved records. Decisions, written down, before any data moves.
- 03
Build the pipeline
Weeks 2 to 5
Resolution, register sync, duplicate queue and refresh jobs, running against a staging copy until you are satisfied.
- 04
Hand it over
Week 6
In your repository, on your infrastructure, documented. You can run and change it without us, which is the point.
Scope decides the price and we quote line by line after the diagnosis. We run a blended squad at roughly 24 to 45 dollars an hour and a senior only pod at roughly 75 to 120 where the work touches production systems. You can read about the team, and systems integration covers the connection work in more depth.
FAQ
Common questions
Why do new companies keep turning out to be in our CRM already?
Because the matching is on company name. Names vary by punctuation, legal suffix, trading name, accent and typo, so the same business arrives repeatedly looking new. Matching on an official registration number instead removes most of this, because the number does not vary when the name does.
What is the best key to deduplicate a CRM on?
The official company registration number from the national register, such as the SIREN in France or the company number in the United Kingdom. It is unique, it survives renaming and rebranding, and it is published free. A normalised domain is a workable second choice. Company name should be a label you display, never the key you join on.
Where can we get company registration data for free?
From national registers, where they are open. The United Kingdom publishes a free API and monthly bulk snapshots, France publishes open commercially reusable data with the SIREN identifier, and Norway offers a free API and full bulk download. Germany, Italy and the Netherlands are largely paid or restricted, and in the United States the free federal source covers public filers only, not the state registrations where most companies sit.
Should we clean the CRM before sourcing new accounts?
Clean first, in almost every case. Adding records to a base full of duplicates makes the problem worse while hiding it, and a week of cleaning usually yields more assignable accounts than a month of sourcing. It is also likely that a meaningful share of your existing base has never been properly worked.
How do we build a list of companies we definitely do not have?
Filter the official register by industry code and size band to get everything that could be a customer, then subtract every registration number already in your CRM. What remains is genuinely new. Re-running it monthly gives you new formations and companies crossing into your size band, which is a prospecting signal most teams buy rather than generate.
How often should company data be refreshed?
Company level fields monthly, from the register and the company's own website, because those are cheap or free and change slowly. Person level fields only when you are about to use them, because they decay fast and refreshing them across the whole base is how enrichment budgets disappear.
Does this apply if we only sell in one country?
Single market selling benefits more, not less. A single market means one register to work with, which makes the whole approach simpler and cheaper, and it means your addressable market is finite and knowable rather than theoretical. Teams selling into one country can usually build the complete list of companies that could ever buy from them, which changes how territory and coverage are planned.
Is bad data really worse than no data?
Often, yes. A missing field is a known gap. A wrong field is acted on. Duplicates distort account coverage and territory reporting in the same direction, and once a team stops trusting the CRM they keep private lists, which creates a second source of truth and makes the first one worse.
How long does a CRM cleanup take?
Measuring the duplicate rate takes a few days. Building the resolution and refresh pipeline is typically four to six weeks. The merge itself is fast once the rules are agreed, and agreeing the rules is usually the slowest part because it is a business decision rather than a technical one. Prevention has to ship with it, or the base re-accumulates duplicates within about eighteen months.
Will deduplication lose our sales history?
Not if it is done properly. A merge should combine activity, notes and ownership rather than discarding the losing record, and it should stay reversible for a period by recording what was merged. Run the whole thing against a staging copy first with a report of what would happen, reviewed by someone who knows the accounts.
Can you build this for us?
Yes. Key resolution, scheduled register sync, duplicate detection and refresh jobs, built in your repository and handed over documented. A first engagement is typically four to six weeks and starts by measuring your actual duplicate rate, which usually changes the plan.
Keep exploring
Related
- Free B2B data enrichmentWhere paid enrichment earns its fee
- Open BrewFree company enrichment, no credits
- Systems integrationConnecting the CRM to everything else
- B2B SaaS marketingPipeline, not impressions
- B2B marketing auditThe full framework, free
- About VoliomWho does the work
Let's talk
Tell us what you're building.
Get a free 30-minute strategy call. You'll leave with a clear plan, a realistic estimate and our honest opinion, whether or not you work with us.
- Email usmail@voliom.com