
Python gebruiken in RevOps: zo update je jouw CRM en voorkom je duplicaten
Ontdek via een praktijkcase hoe je met Python RevOps-taken stroomlijnt, zoals CRM-updates en ontdubbeling.

Haris Odobasic
Python kan heel nuttig zijn in Revenue Operations. Ik gebruik het graag als ik data moet verwerken.
Probleem: 300 miljoen paren om te controleren
Onlangs hadden we een case waarin we een lijst van 30.000 accounts moesten matchen met een CRM dat al 10.000 accounts bevatte. Je kunt er vergif op innemen dat er enorm veel duplicaten tussen zaten.
Het grootste probleem was dat het CRM vaak de merknaam gebruikte (The Lego Group) versus de statutaire naam (Lego A/S). Het nieuwe bestand bevatte alleen statutaire namen. Jammer.
Het probleem is dat we 300 miljoen mogelijke paren moeten vergelijken. Dit laat grafische tools zoals Excel of Google Sheets vastlopen (althans, dat gebeurde bij mij).
Tip: Voordat je data in het CRM importeert, wil je er zeker van zijn dat je dataset in de best mogelijke staat verkeert. Eenmaal in het CRM kost het veel meer tijd (en geld) om correcties door te voeren.
Oplossing: Python & ChatGPT schieten te hulp
Laat me raden: Python klinkt intimiderend? Dat dacht ik ook! Mijn kennis van coderen is verre van perfect. Vandaag de dag is het makkelijker te leren dan ooit en ChatGPT is een echte gamechanger. In een paar maanden kun je genoeg begrip opbouwen om het te gebruiken voor zakelijke cases (zoals fuzzy matching).
Aanpak
Je hebt de twee bronbestanden nodig om te matchen. In ons geval:
bestand 1 - brondata uit het CRM met record-ID
bestand 2 - nieuwe data van de dataprovider
Tip: Zorg ervoor dat er binnen elk bestand geen duplicaten staan!
Matching-variabele
Vervolgens moet elk bestand een matchingscriterium hebben. In ons voorbeeld hebben ze allemaal een veld genaamd "Account Name".
Mapstructuur
Plaats beide bestanden in dezelfde map als het script. De resultaten verschijnen later ook in deze map.

Fuzzy matching
Fuzzy matching is een methode om strings bij benadering te matchen. In gewoon Nederlands: het matcht vergelijkbare woorden. Zoals op de afbeelding:

Hier vind je een gedetailleerde uitleg van het concept.
Voor onze doeleinden hoef je alleen te weten dat we voor een fuzzy match een matchingspercentage moeten instellen. Dit percentage geeft de maximale gelijkenis van de woorden aan. Voorbeelden:
Te hoog, bijv. 97%, dan mis je matches
Te laag, bijv. 84%, dan heb je een grotere kans op foutieve matches.
Een goede praktijk is om 90-95% te gebruiken. Zie de 90 in de code. Dat is het getal waarmee je wilt spelen.
# Performing the fuzzy matching
dict_list = []
for name in df3['Account Name']:
match = match_name(name, df4['Accont Name'], 90)Je kunt onder de 90 gaan, maar dan zou ik een paar testruns doen en de data handmatig controleren op vreemde matches. Het hangt allemaal af van je brondata.
Volledige code
Hieronder vind je het volledige script. Je hoeft slechts een paar wijzigingen aan te brengen:
Vervang de bestandsstructuur van elk bestand
Vervang de matching-variabele ('Account Name' in dit voorbeeld)
Stel het fuzzy matchingspercentage in
Zodra je de code uitvoert, kan het een paar minuten duren voordat deze klaar is.
Hopelijk was dit nuttig! Het heeft mij talloze uren werk bespaard en de investering in een dure tool om dit probleem op te lossen.
import pandas as pd
from fuzzywuzzy import fuzz, process
# Function to match name using fuzzy matching
def match_name(name, list_names, min_score=0):
max_score = -1
max_name = ""
for name2 in list_names:
score = fuzz.ratio(name, name2)
if (score > min_score) & (score > max_score):
max_name = name2
max_score = score
return max_name, max_score
# Reading the data - insert your file structure in there
df3 = pd.read_csv('/Users/harisodobasic/Projects/duplication/file1', encoding='ISO-8859-1')
df4 = pd.read_csv('/Users/harisodobasic/Projects/duplication/file2', encoding='ISO-8859-1')
# Convert the 'Account Name' (insert here your matching variable) columns to strings (had to be done as in some cases strange strings in were in the name)
df3['Account Name'] = df3['Account Name'].apply(lambda x: str(x) if not pd.isnull(x) else '')
df4['Accont Name'] = df4['Accont Name'].apply(lambda x: str(x) if not pd.isnull(x) else '')
# Performing the fuzzy matching
dict_list = []
for name in df3['Account Name']:
match = match_name(name, df4['Accont Name'], 90)
dict_ = {
"Account_Name_df3": name,
"match_name_df4": match[0],
"score": match[1]
}
dict_list.append(dict_)
merge_table = pd.DataFrame(dict_list)
# Merging the fuzzy match results with the original data from df3
final_data = pd.merge(merge_table, df3, how='left', left_on='Account_Name_df3', right_on='Account Name')
# Merging the above result with df4 using an 'outer' join to include unmatched rows from df4
final_data = pd.merge(final_data, df4, how='outer', left_on='match_name_df4', right_on='Accont Name')
# Removing redundant columns
final_data.drop(columns=['Account_Name_df3', 'match_name_df4'], inplace=True)
# Exporting the result to a CSV file
final_data.to_csv('result.csv', index=False)
print("Fuzzy matching completed and results saved to 'result.csv'")Python kan heel nuttig zijn in Revenue Operations. Ik gebruik het graag als ik data moet verwerken.
Probleem: 300 miljoen paren om te controleren
Onlangs hadden we een case waarin we een lijst van 30.000 accounts moesten matchen met een CRM dat al 10.000 accounts bevatte. Je kunt er vergif op innemen dat er enorm veel duplicaten tussen zaten.
Het grootste probleem was dat het CRM vaak de merknaam gebruikte (The Lego Group) versus de statutaire naam (Lego A/S). Het nieuwe bestand bevatte alleen statutaire namen. Jammer.
Het probleem is dat we 300 miljoen mogelijke paren moeten vergelijken. Dit laat grafische tools zoals Excel of Google Sheets vastlopen (althans, dat gebeurde bij mij).
Tip: Voordat je data in het CRM importeert, wil je er zeker van zijn dat je dataset in de best mogelijke staat verkeert. Eenmaal in het CRM kost het veel meer tijd (en geld) om correcties door te voeren.
Oplossing: Python & ChatGPT schieten te hulp
Laat me raden: Python klinkt intimiderend? Dat dacht ik ook! Mijn kennis van coderen is verre van perfect. Vandaag de dag is het makkelijker te leren dan ooit en ChatGPT is een echte gamechanger. In een paar maanden kun je genoeg begrip opbouwen om het te gebruiken voor zakelijke cases (zoals fuzzy matching).
Aanpak
Je hebt de twee bronbestanden nodig om te matchen. In ons geval:
bestand 1 - brondata uit het CRM met record-ID
bestand 2 - nieuwe data van de dataprovider
Tip: Zorg ervoor dat er binnen elk bestand geen duplicaten staan!
Matching-variabele
Vervolgens moet elk bestand een matchingscriterium hebben. In ons voorbeeld hebben ze allemaal een veld genaamd "Account Name".
Mapstructuur
Plaats beide bestanden in dezelfde map als het script. De resultaten verschijnen later ook in deze map.

Fuzzy matching
Fuzzy matching is een methode om strings bij benadering te matchen. In gewoon Nederlands: het matcht vergelijkbare woorden. Zoals op de afbeelding:

Hier vind je een gedetailleerde uitleg van het concept.
Voor onze doeleinden hoef je alleen te weten dat we voor een fuzzy match een matchingspercentage moeten instellen. Dit percentage geeft de maximale gelijkenis van de woorden aan. Voorbeelden:
Te hoog, bijv. 97%, dan mis je matches
Te laag, bijv. 84%, dan heb je een grotere kans op foutieve matches.
Een goede praktijk is om 90-95% te gebruiken. Zie de 90 in de code. Dat is het getal waarmee je wilt spelen.
# Performing the fuzzy matching
dict_list = []
for name in df3['Account Name']:
match = match_name(name, df4['Accont Name'], 90)Je kunt onder de 90 gaan, maar dan zou ik een paar testruns doen en de data handmatig controleren op vreemde matches. Het hangt allemaal af van je brondata.
Volledige code
Hieronder vind je het volledige script. Je hoeft slechts een paar wijzigingen aan te brengen:
Vervang de bestandsstructuur van elk bestand
Vervang de matching-variabele ('Account Name' in dit voorbeeld)
Stel het fuzzy matchingspercentage in
Zodra je de code uitvoert, kan het een paar minuten duren voordat deze klaar is.
Hopelijk was dit nuttig! Het heeft mij talloze uren werk bespaard en de investering in een dure tool om dit probleem op te lossen.
import pandas as pd
from fuzzywuzzy import fuzz, process
# Function to match name using fuzzy matching
def match_name(name, list_names, min_score=0):
max_score = -1
max_name = ""
for name2 in list_names:
score = fuzz.ratio(name, name2)
if (score > min_score) & (score > max_score):
max_name = name2
max_score = score
return max_name, max_score
# Reading the data - insert your file structure in there
df3 = pd.read_csv('/Users/harisodobasic/Projects/duplication/file1', encoding='ISO-8859-1')
df4 = pd.read_csv('/Users/harisodobasic/Projects/duplication/file2', encoding='ISO-8859-1')
# Convert the 'Account Name' (insert here your matching variable) columns to strings (had to be done as in some cases strange strings in were in the name)
df3['Account Name'] = df3['Account Name'].apply(lambda x: str(x) if not pd.isnull(x) else '')
df4['Accont Name'] = df4['Accont Name'].apply(lambda x: str(x) if not pd.isnull(x) else '')
# Performing the fuzzy matching
dict_list = []
for name in df3['Account Name']:
match = match_name(name, df4['Accont Name'], 90)
dict_ = {
"Account_Name_df3": name,
"match_name_df4": match[0],
"score": match[1]
}
dict_list.append(dict_)
merge_table = pd.DataFrame(dict_list)
# Merging the fuzzy match results with the original data from df3
final_data = pd.merge(merge_table, df3, how='left', left_on='Account_Name_df3', right_on='Account Name')
# Merging the above result with df4 using an 'outer' join to include unmatched rows from df4
final_data = pd.merge(final_data, df4, how='outer', left_on='match_name_df4', right_on='Accont Name')
# Removing redundant columns
final_data.drop(columns=['Account_Name_df3', 'match_name_df4'], inplace=True)
# Exporting the result to a CSV file
final_data.to_csv('result.csv', index=False)
print("Fuzzy matching completed and results saved to 'result.csv'")Python kan heel nuttig zijn in Revenue Operations. Ik gebruik het graag als ik data moet verwerken.
Probleem: 300 miljoen paren om te controleren
Onlangs hadden we een case waarin we een lijst van 30.000 accounts moesten matchen met een CRM dat al 10.000 accounts bevatte. Je kunt er vergif op innemen dat er enorm veel duplicaten tussen zaten.
Het grootste probleem was dat het CRM vaak de merknaam gebruikte (The Lego Group) versus de statutaire naam (Lego A/S). Het nieuwe bestand bevatte alleen statutaire namen. Jammer.
Het probleem is dat we 300 miljoen mogelijke paren moeten vergelijken. Dit laat grafische tools zoals Excel of Google Sheets vastlopen (althans, dat gebeurde bij mij).
Tip: Voordat je data in het CRM importeert, wil je er zeker van zijn dat je dataset in de best mogelijke staat verkeert. Eenmaal in het CRM kost het veel meer tijd (en geld) om correcties door te voeren.
Oplossing: Python & ChatGPT schieten te hulp
Laat me raden: Python klinkt intimiderend? Dat dacht ik ook! Mijn kennis van coderen is verre van perfect. Vandaag de dag is het makkelijker te leren dan ooit en ChatGPT is een echte gamechanger. In een paar maanden kun je genoeg begrip opbouwen om het te gebruiken voor zakelijke cases (zoals fuzzy matching).
Aanpak
Je hebt de twee bronbestanden nodig om te matchen. In ons geval:
bestand 1 - brondata uit het CRM met record-ID
bestand 2 - nieuwe data van de dataprovider
Tip: Zorg ervoor dat er binnen elk bestand geen duplicaten staan!
Matching-variabele
Vervolgens moet elk bestand een matchingscriterium hebben. In ons voorbeeld hebben ze allemaal een veld genaamd "Account Name".
Mapstructuur
Plaats beide bestanden in dezelfde map als het script. De resultaten verschijnen later ook in deze map.

Fuzzy matching
Fuzzy matching is een methode om strings bij benadering te matchen. In gewoon Nederlands: het matcht vergelijkbare woorden. Zoals op de afbeelding:

Hier vind je een gedetailleerde uitleg van het concept.
Voor onze doeleinden hoef je alleen te weten dat we voor een fuzzy match een matchingspercentage moeten instellen. Dit percentage geeft de maximale gelijkenis van de woorden aan. Voorbeelden:
Te hoog, bijv. 97%, dan mis je matches
Te laag, bijv. 84%, dan heb je een grotere kans op foutieve matches.
Een goede praktijk is om 90-95% te gebruiken. Zie de 90 in de code. Dat is het getal waarmee je wilt spelen.
# Performing the fuzzy matching
dict_list = []
for name in df3['Account Name']:
match = match_name(name, df4['Accont Name'], 90)Je kunt onder de 90 gaan, maar dan zou ik een paar testruns doen en de data handmatig controleren op vreemde matches. Het hangt allemaal af van je brondata.
Volledige code
Hieronder vind je het volledige script. Je hoeft slechts een paar wijzigingen aan te brengen:
Vervang de bestandsstructuur van elk bestand
Vervang de matching-variabele ('Account Name' in dit voorbeeld)
Stel het fuzzy matchingspercentage in
Zodra je de code uitvoert, kan het een paar minuten duren voordat deze klaar is.
Hopelijk was dit nuttig! Het heeft mij talloze uren werk bespaard en de investering in een dure tool om dit probleem op te lossen.
import pandas as pd
from fuzzywuzzy import fuzz, process
# Function to match name using fuzzy matching
def match_name(name, list_names, min_score=0):
max_score = -1
max_name = ""
for name2 in list_names:
score = fuzz.ratio(name, name2)
if (score > min_score) & (score > max_score):
max_name = name2
max_score = score
return max_name, max_score
# Reading the data - insert your file structure in there
df3 = pd.read_csv('/Users/harisodobasic/Projects/duplication/file1', encoding='ISO-8859-1')
df4 = pd.read_csv('/Users/harisodobasic/Projects/duplication/file2', encoding='ISO-8859-1')
# Convert the 'Account Name' (insert here your matching variable) columns to strings (had to be done as in some cases strange strings in were in the name)
df3['Account Name'] = df3['Account Name'].apply(lambda x: str(x) if not pd.isnull(x) else '')
df4['Accont Name'] = df4['Accont Name'].apply(lambda x: str(x) if not pd.isnull(x) else '')
# Performing the fuzzy matching
dict_list = []
for name in df3['Account Name']:
match = match_name(name, df4['Accont Name'], 90)
dict_ = {
"Account_Name_df3": name,
"match_name_df4": match[0],
"score": match[1]
}
dict_list.append(dict_)
merge_table = pd.DataFrame(dict_list)
# Merging the fuzzy match results with the original data from df3
final_data = pd.merge(merge_table, df3, how='left', left_on='Account_Name_df3', right_on='Account Name')
# Merging the above result with df4 using an 'outer' join to include unmatched rows from df4
final_data = pd.merge(final_data, df4, how='outer', left_on='match_name_df4', right_on='Accont Name')
# Removing redundant columns
final_data.drop(columns=['Account_Name_df3', 'match_name_df4'], inplace=True)
# Exporting the result to a CSV file
final_data.to_csv('result.csv', index=False)
print("Fuzzy matching completed and results saved to 'result.csv'")Blijf op de hoogte met onze Revenue Blog
Blijf op de hoogte met onze Revenue Blog
Bekijk alle posts

Wanneer ARR-rapportages haperen: het pleidooi voor Custom Snapshots
28 sep 2026
Waarom CRM-native ARR-rapportage spaak loopt bij meerjarige deals, en hoe een custom snapshot-laag je een ARR-waterfall geeft die finance wél vertrouwt.

AI-pricingmodellen: de verborgen kosten van credit-based billing
18 sep 2026
Hoe AI-prijsmodellen echt werken, waarom facturering op basis van credits lastig te voorspellen is, en wat kopers moeten eisen voordat ze tekenen.

De 7 beste B2B SaaS-marketingbureaus voor je pipeline (2026)
1 jun 2026
De 7 beste B2B SaaS-marketingbureaus in 2026, met echte prijzen, eerlijke beperkingen en een direct antwoord op welk deel van jouw omzet-engine ze nu écht verbeteren.
Meer laden
Plan een gesprek
Kies een tijdstip

