Deduplicate Companies in Your CRM Using the KVK Number
The same Dutch customer three times in your CRM? Learn how to deduplicate companies by KVK number, which pitfalls to watch for, and how to keep it clean.
Search your CRM for “Van Dijk”. Chances are you will find Van Dijk Beheer B.V., Van Dijk Beheer, Van Dijk bv and a separate “Fietsen Direct”, and all of them are the same customer. One was created by sales, one came in through a web form, one was imported from the accounting package. Nobody did anything wrong, and yet you now have four records, four open quotes, and an account manager who does not know his colleague has been talking to the same customer for three weeks.
This article shows how to fix that with the KVK number: clean up once, then make sure it does not come back.
Why company names make a poor key
Most CRMs deduplicate on name by default, sometimes combined with domain or postcode. That works for contacts with an email address, but not for companies. In practice one company has several names: the statutory name from the deed of incorporation, one or more trade names, and the variant an employee types from memory. The difference between “B.V.” and “BV” means nothing to a person and everything to a matching rule. The distinction between statutory and trade names is covered on our page about trade name versus statutory name.
It also fails the other way round. Two different companies can have nearly the same name, and then you merge the wrong ones. A name is a label, not an identity.
The KVK number is an identity. It has eight digits, it is unique per registration, and it does not change when the company moves, adds a trade name or rebrands. For companies registered in the Netherlands, it is the key you are looking for.
Step 1: give every company a KVK number
A CRM that only holds names has no KVK numbers yet, so the first job is to find them. Start with the records where the number already exists: on invoices, in the accounting package, in the footer of a quote or on the customer’s website. That often covers a third to half of your records.
For the rest, use the search endpoint with the name, and filter the results on the city from your CRM. When in doubt, never take the first result automatically. Let a person confirm whenever there are several candidates, and show the address next to each one, because people recognise an address faster than a number.
import requests
API_KEY = "your_api_key"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
def find_candidates(name: str, city: str) -> list[dict]:
r = requests.get(
"https://api.kvkbase.nl/v1/search",
params={"q": name},
headers=HEADERS,
timeout=10,
)
r.raise_for_status()
results = r.json()["results"]
return [c for c in results if c["city"].lower() == city.lower()]
If you already have a list of KVK numbers and want current details, the batch endpoint takes up to 25 per request. A basic lookup costs 1 token per company, with enrichment 2. Details are in the API documentation.
Step 2: group by KVK number and see what is left
Once the numbers are in place, deduplication is just grouping. Everything with the same KVK number is one company. An export from your CRM and a few lines of code give you a list of groups with two or more records.
Then comes the real work, and it is not technical. For each group you have to decide which record survives and what happens to the rest. A few rules of thumb that work well:
- The record with the most activity (open deals, recent touchpoints) becomes the master.
- Contacts, notes and deals move to the master, they are not deleted.
- Name, address and legal form are taken from the business register, not from whichever record happens to be filled in best.
- Old names are kept as aliases, so searching for “Fietsen Direct” still finds the company.
Almost every CRM has a merge function that handles this properly, including re-pointing linked deals. Use it instead of copying by hand. And export first, because merging cannot be undone in most systems.
The pitfalls you only meet by doing it
One KVK number, many branches. A chain with forty stores is one company with forty branches. If you merge everything on KVK number, the individual locations disappear from your CRM. To keep them, store the branch number on the location record and use the KVK number only to recognise the parent. How that works is explained in our article on KVK number versus branch number.
Sole traders. For a sole trader the business and the person are the same party. The KVK number exists, but the same entrepreneur can hold several registrations, for example for two different activities. Formally those are two companies, even if the same person answers the phone.
Groups and holdings. Parent and subsidiary each have their own KVK number and must stay separate, even if the same director sits behind both. To capture the relationship, use a parent field in your CRM rather than merging.
Foreign customers. A German or Belgian customer has no Dutch KVK number. Leave them out of this deduplication and use another identifier, such as the VAT number.
Deregistered companies. Sometimes one of the duplicates belongs to a company that has been deregistered. That is not a reason to delete it, but it is a reason to flag it. You want to know there is nothing left to sell there.
Step 3: stop it from coming back
Cleaning up without prevention is an annual chore. The lasting effect is in the moment of entry. Make sure a new company can only be created through a search field that queries the business register, and store the KVK number at that moment. With the autocomplete endpoint a user types a few letters and picks a company from the list, after which name, address and number are filled in. That is faster than free typing and produces no variants.
Then check on save whether that KVK number already exists. If it does, the user opens the existing company instead of creating a second one. If you cannot build this into your CRM directly, most systems allow it through a webhook or a workflow that checks the KVK number on creation. A fuller example of enriching on creation is in automatically enriching CRM company data.
Also schedule a periodic check, say every quarter. A short query that groups by KVK number and lists everything with more than one record is enough. That way you see duplicates within weeks instead of after two years.
What you get out of it
The gain is less about a tidier database than about what you can do afterwards. Revenue per customer reports are right again, because revenue is no longer spread over four records. Sales stops calling twice, and invoicing goes to the right address. And if you later want to know which customers are going bankrupt or moving, you can follow that, because you have one reliable key per company.
Want to try it yourself? Create a KVKBase account, look up your first KVK numbers and see how many duplicates your CRM holds. More about connecting company data to your CRM is on our CRM enrichment page.