Tool die via de overheid.io openKVK API bedrijven in een postcode-range of op een wildcard-patroon ophaalt en per bedrijf detecteert of er (waarschijnlijk) een website is. Bedrijven zonder detecteerbare website zijn bruikbaar als leadslijst voor bv. webdesign-outreach.
Beschikbaar als:
- GUI (Streamlit) —
streamlit run app.py - CLI —
python main.py …
- openKVK geeft geen website-veld terug. De tool leidt dat zelf af
via:
- DNS + HTTP-probe op gokdomeinen (
bedrijfsnaam.nl,.com,.eu,.amsterdam); - fallback: DuckDuckGo-zoekopdracht met filter op bekende directories (KVK, LinkedIn, Facebook, Goudengids, Google Maps, etc.).
- DNS + HTTP-probe op gokdomeinen (
- Dit is een heuristiek, geen waarheid. Generieke bedrijfsnamen geven onvermijdelijk false positives/negatives. Gebruik de output als indicatie.
- Je hebt een overheid.io API key nodig. Registreren via overheid.io. Voor openKVK is er een gratis tier.
- Respecteer rate limits van zowel overheid.io als DuckDuckGo. De
slider "pauze tussen website-checks" in de GUI (of
--sleepin de CLI) geeft je daar controle over.
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# vul OVERHEID_API_KEY in .envstreamlit run app.pyOpent in de browser op http://localhost:8501.
Wat je ziet:
- Sidebar met API key, keuze tussen postcode-range (bv. 1011–1019)
of wildcard-patroon (bv.
1017*,*XD), en filters (alleen hoofdvestigingen, sleep, max per patroon). - Hoofdpaneel: progress bar, live-updating tabel met resultaten, en een Download CSV-knop als de scan klaar is.
# Amsterdam centrum (1011-1019), alleen hoofdvestigingen:
python main.py --from 1011 --to 1019 --only-main --out centrum.csv
# Losse wildcard-patronen:
python main.py --postcode "1017*" --out 1017.csv
python main.py --postcode "*XD" --out xd-bedrijven.csv
python main.py --postcode "1011*" --postcode "1012*" --out cluster.csv
# Heel Amsterdam:
python main.py --from 1000 --to 1109 --only-main --out amsterdam.csv
# Inclusief bedrijven mét website (met vlag in CSV):
python main.py --from 1011 --to 1013 --include-with-website --out centrum-full.csv| Vlag | Default | Omschrijving |
|---|---|---|
--from |
1000 |
Eerste 4-cijferige postcode in de range |
--to |
1109 |
Laatste 4-cijferige postcode in de range |
--postcode PATROON |
— | Wildcard-patroon (mag meerdere keren); overschrijft --from/--to |
--out |
kvk-zonder-website.csv |
Output-CSV |
--only-main |
off | Alleen hoofdvestigingen |
--include-with-website |
off | Ook bedrijven mét website wegschrijven |
--sleep |
0.2 |
Pauze (sec) tussen website-checks |
--max-pages |
— | Veiligheidsnet: max API-pagina's per patroon |
-v |
off | Debug-logging |
CSV met de kolommen:
postcode, handelsnaam, type,
straatnaam, huisnummer, plaats,
kvk_nummer, vestigingsnummer,
website_gevonden, website, detectie_methode
detectie_methode:
dns— kandidaat-domein (bedrijfsnaam.nl enz.) bestaat én serveert HTMLsearch— DuckDuckGo gaf een niet-directory resultaat terugnone— niks gevonden → waarschijnlijk geen website
| Gebied | Range |
|---|---|
| Centrum | 1011–1019 |
| Noord | 1021–1039 |
| West | 1051–1059 |
| Nieuw-West | 1060–1069 |
| Oud-Zuid | 1071–1083 |
| Oost | 1091–1099 |
| Zuidoost | 1101–1108 |
| Heel Amsterdam (grofweg) | 1000–1109 |
- Begin klein (1 patroon) om te zien of je API-key werkt.
- De CSV wordt tussentijds weggeschreven (CLI:
flush()per regel, GUI: dataframe update live), dus afbreken is veilig. - Voor serieuze leadslijsten: sanity-check altijd een steekproef handmatig.
KVK-data uit openKVK gebruiken voor direct marketing is aan regels gebonden. Check de overheid.io voorwaarden en houd je aan AVG + Telecommunicatiewet voor ongevraagde benadering (Bel-me-niet, opt-in e-mail, etc.). Deze tool is een hulpmiddel; de juridische verantwoordelijkheid voor wat je met de output doet ligt bij jou.