303.525 datasets geïndexeerd1.419 uitgevers
Open Data IndexDe index van open data over Nederland
Open Data Index›Bouwen›Zorgkosten-vergelijker per gemeente
ToolOm te beginnenGezondheidFinancieel

Zorgkosten-vergelijker per gemeente

Een tool die laat zien wat de basisverzekering per inwoner uitgeeft in jouw gemeente, per zorgsoort, en hoe dat zich verhoudt tot de rest van Nederland, ook na correctie voor leeftijd.

Je AI-assistentOpen Data Index MCP aan
De MCP-server van Open Data Index staat aan in je chat. Zo leest de assistent dit project en de bronnen zelf.
Jij plakt de prompt van dit project
De assistent haalt op bij Open Data Index
  • geef_project("zorgkosten-vergelijker")
  • geef_bron("vektis-zorgkosten")
  • geef_bron("cbs-kwb")
  • geef_bron("waarstaatjegemeente")
De assistent

Ik heb het project, de geteste aanroepen en de valkuilen. Ik bouw een tool met Vektis open data zorgkosten, Kerncijfers wijken en buurten en Waarstaatjegemeente.nl. Zo kan het eruitzien:

Dit bouw je zelf. Kopieer de prompt naar Claude, ChatGPT of Cursor, met de MCP-server aan, of volg de stappen hieronder.

Volg de stappen
zsh — zorg+
~/zorg $ zorgkosten utrecht --jaar 2024
✓ vektis 2024 · 12.992 rijen · 2,9 MB
✓ 342 van 342 gemeenten aan CBS gekoppeld

UTRECHT GM0344 · 378.121 inw.
kosten per verzekerdejaar  € 2.898
plaats                     333 van 342 (goedkoop)
na correctie leeftijd      index 102 · plaats 74

ZORGSOORT         €/VJ  MINDER MEER     
med. specialist  1.395  -22%
farmacie           278  -23%
ggz-consulten      374  +61%
verpleging         117  -37%
hulpmiddelen        80  -31%
huisarts overig     96   +1%
  verschil met alle gemeenten samen

~/zorg $ zorgkosten top 3
HOOGST            €/VJ  IDX  LAAGST       €/VJ  IDX
Heerlen          4.520  125  Urk         2.601   96
Landgraaf        4.520  120  Staphorst   2.641   86
Brunssum         4.471  119  Rozendaal   2.700   78
  Nederland € 3.349 per verzekerdejaar = 100
~/zorg $ 
Mockup

Dit is een mockup, geen werkende versie, met de cijfers uit onze proefdraai van 16 oktober 2026 met het Vektis-bestand over kostenjaar 2024 (gepubliceerd 20 juli 2026). De MCP-server zet je aan met het adres op Voor AI.

Voor wie

Raadsleden en beleidsmedewerkers zorg en sociaal domein, zorgjournalisten, studenten gezondheidswetenschappen, en iedereen die wil weten of 'onze gemeente duur is' echt klopt of alleen komt doordat er veel ouderen wonen.

Wat je krijgt

Een vergelijker waarin je een gemeente kiest en ziet: de zorgkosten per verzekerdejaar, de plaats tussen alle 342 gemeenten, een index na correctie voor leeftijd en geslacht (Nederland = 100) en per zorgsoort het verschil met alle gemeenten samen.

Proefdraai op 16 oktober 2026 met het nieuwste bestand (kostenjaar 2024, gepubliceerd 20 juli 2026): - De basisverzekering betaalde in 2024 59.525 miljoen euro uit voor 17.773.377 verzekerdejaren: 3.349 euro per verzekerdejaar. - Alle 342 gemeentenamen gekoppeld aan een CBS-code (indeling 2026), met twee vaste aliassen. - Hoogste kosten: Heerlen en Landgraaf (allebei 4.520 euro per verzekerdejaar). Laagste: Urk (2.601), Staphorst (2.641) en Rozendaal (2.700). - Na correctie voor leeftijd en geslacht blijft Heerlen het duurst (index 125), maar Urk komt op 96: de lage kosten komen vooral doordat 34% van de verzekerdejaren daar onder de 20 is (landelijk 20%). Laagste index: Hilvarenbeek (77) en Rozendaal (78). - Utrecht: 2.898 euro per verzekerdejaar, plaats 333 van 342, dus een van de goedkoopste. Na correctie staat Utrecht op plaats 74 met index 102: iets duurder dan je bij zo'n jonge bevolking zou verwachten. Ggz-consulten kosten in Utrecht 374 euro per verzekerdejaar, 61% meer dan in alle gemeenten samen (233).

Zorgkosten in de basisverzekering per verzekerde: het hoogst in Heerlen en 1 andere gemeente (4.520 euro), het laagst in Urk (2.601 euro)

Zorgkosten in de basisverzekering per verzekerde per gemeente, 2024, in euro per verzekerdejaar. Heel Nederland: 3.349. 342 gemeenten met een cijfer.

Bron: Vektis, Open Databestand Zorgverzekeringswet 2024 (gemeente); bron: Vektis · opgehaald 25 oktober 2026 · selectie: kostenjaar 2024; basisverzekering (Zvw), alle kostenrubrieken; per verzekerdejaarOpen de tabel Los blok

Zo zou je kunnen starten6 stappen

  1. 1

    Zoek het nieuwste bestand

    Vektis heeft geen API maar vaste bestandsnamen per kostenjaar. Probeer met een HEAD-verzoek het pad met dalende jaartallen: op 16 oktober 2026 gaf 2025 een 404 en 2024 een 200 (2.864.955 bytes, Last-Modified 20 juli 2026). Het volgende bestand komt volgens Vektis medio 2027. Let op uitzonderingen: 2020 heet ..._versie2.csv en 2011 tot en met 2016 staan in een andere map.

  2. 2

    Lees het CSV en haal de restcategorie apart

    Puntkomma als scheidingsteken, punt als decimaalteken, 12.992 datarijen: 342 gemeenten × 2 geslachten × 19 leeftijdsklassen, plus één restcategorie. Die eerste datarij heeft geen geslacht, leeftijd of gemeente (412.394 verzekerden, 220.748,91 verzekerdejaren): groepjes kleiner dan tien en onbekende kenmerken. Tel hem mee voor het landelijke totaal, niet bij een gemeente. Er zijn 26 kolommen die met kosten_ beginnen; de namen zijn afgekapt op 32 tekens (kosten_medisch_specialistische_z).

    https://www.vektis.nl/vektisnl-assets/prd/storage/uploads/Docs per pagina/Open Data Bestanden/2024/Vektis Open Databestand Zorgverzekeringswet 2024 - gemeente.csv
    geslacht;leeftijdsklasse;gemeentenaam;aantal_bsn;aantal_verzekerdejaren;kosten_medisch_specialistische_z;kosten_farmacie;kosten_huisarts_inschrijftarief;...
    ;;;412394;220748.91;75738481.61;11107600.71;6081467.62;2120101.39;1852201.82;7886723.95;...
    M;0 t/m  4 jaar;AA EN HUNZE;503;462.82;594197.18;32444.9;35500.43;20536.52;15357.5;60736.99;...
    M;0 t/m  4 jaar;AALSMEER;731;665.75;1829500.58;55985.58;51112.38;25609.76;17045.38;96918.18;...
  3. 3

    Koppel de gemeentenamen aan CBS-codes

    In het Vektis-bestand staat alleen de naam in hoofdletters ('S GRAVENHAGE', 'NOARDEAST-FRYSLAN', 'BERGEN LB'), geen GM-code. Het bestand 2024 volgt de gemeentelijke indeling van 2026, dus neem de gemeentelijst van de Kerncijfers wijken en buurten 2026 (86358NED). Maak beide namen gelijk (accenten, leestekens en spaties weg, hoofdletters). CBS onderscheidt gelijke namen met een provincie ('Bergen (L.)', 'Bergen (NH.)', 'Beek (L.)'): gebruik de naam zonder haakjes alleen als die uniek is. Twee aliassen blijven over: BERGEN LB = Bergen (L.) en NUENEN CA = Nuenen, Gerwen en Nederwetten. Daarmee koppelen alle 342.

    https://datasets.cbs.nl/odata/v1/CBS/86358NED/WijkenEnBuurtenCodes?$filter=DimensionGroupId eq 'GM'&$select=Identifier,Title
    {"@odata.context":"https://datasets.cbs.nl/odata/v1/CBS/86358NED/$metadata#WijkenEnBuurtenCodes(Identifier,Title)","value":[
     {"Identifier":"GM1680","Title":"Aa en Hunze"},{"Identifier":"GM0358","Title":"Aalsmeer"},
     {"Identifier":"GM0197","Title":"Aalten"},{"Identifier":"GM0059","Title":"Achtkarspelen"},
     {"Identifier":"GM0482","Title":"Alblasserdam"},{"Identifier":"GM0613","Title":"Albrandswaard"}, ...
  4. 4

    Haal inwoners per gemeente op (voor de kaart en ter controle)

    Aantal inwoners op 1 januari 2026 is Measure T001036. Gebruik dat voor de tooltip en als controle, niet als noemer: de kosten deel je door aantal_verzekerdejaren uit het Vektis-bestand zelf. Een verzekerdejaar weegt mee hoe lang iemand verzekerd was en in de gemeente woonde (wie verhuist, geboren wordt of overlijdt telt voor een deel). Landelijk: 17.773.377 verzekerdejaren in 2024 tegen 18.130.208 inwoners op 1 januari 2026. Wij gebruiken datasets.cbs.nl (OData v4): codes zonder opvulspaties, CORS open. De oude API op opendata.cbs.nl gaf op 16 oktober 2026 rond 23.30 uur een 503.

    https://datasets.cbs.nl/odata/v1/CBS/86358NED/Observations?$filter=startswith(WijkenEnBuurten,'GM') and Measure eq 'T001036'&$select=WijkenEnBuurten,Value
    {"@odata.context":"https://datasets.cbs.nl/odata/v1/CBS/86358NED/$metadata#Observations(WijkenEnBuurten,Value)","value":[
     {"Value":26062.0,"WijkenEnBuurten":"GM1680"},{"Value":33459.0,"WijkenEnBuurten":"GM0358"},
     {"Value":27608.0,"WijkenEnBuurten":"GM0197"},{"Value":28254.0,"WijkenEnBuurten":"GM0059"}, ...
  5. 5

    Reken per verzekerdejaar en corrigeer voor leeftijd en geslacht

    Tel per gemeente alle kosten_-kolommen op en deel door de verzekerdejaren. Vergelijk daarna eerlijk met indirecte standaardisatie: bereken landelijk (zonder restcategorie) de kosten per verzekerdejaar voor elke combinatie van geslacht en leeftijdsklasse (38 cellen), vermenigvuldig met de verzekerdejaren van de gemeente in die cellen en tel op. Dat is wat de gemeente 'zou moeten' kosten. Werkelijk gedeeld door verwacht maal 100 is de index. Een 85-jarige kost veel meer dan een 25-jarige: zonder correctie zie je vooral waar ouderen wonen. Sorteer leeftijdsklassen niet als tekst: '0 t/m 4 jaar' en '5 t/m 9 jaar' hebben een dubbele spatie en de laatste klasse heet '90+'.

  6. 6

    Waarstaatjegemeente: wel kijken, niet automatiseren

    Het dashboard Zorggebruik op waarstaatjegemeente.nl (VNG) toont vergelijkbare cijfers per gemeente al bewerkt. De OData-API daarachter is bèta en alleen voor gemeenten (API-key, maximaal 40 gemeenten, documentatie in een besloten Pleio-groep). Wij hebben geen sleutel en hebben de API dus niet getest. robots.txt verbiedt /handlers/ en /zoeken en vraagt 2 seconden tussen verzoeken: automatiseer de Viewer niet. Wat wel open is: de RSS-feed met recente wijzigingen, handig om te zien wanneer er nieuwe cijfers zijn. Werk je bij een gemeente, vraag dan een sleutel aan via VNG Realisatie.

    https://www.waarstaatjegemeente.nl/feed.ashx
    <?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="style/rss.xsl"?><rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0"><channel>
    <title>Waarstaatjegemeente.nl - cijfers en statistieken van gemeenten</title>
    <item><category>Link</category><title>Monitor Brede Regeling Combinatiefuncties 2025</title><description />
     <pubDate>Fri, 16 Oct 2026 00:00:00 +0200</pubDate><datum>16-10-2026</datum></item>
    <item><category>News</category><title>Waarstaatjegemeente.nl in VNG Magazine: deze maand aandacht voor de Wet open overheid</title> ...

Hoe de bronnen samenkomen

  • Vektis open data zorgkostenKerncijfers wijken en buurtenvia gemeentenaam (genormaliseerd) naar GM-code, indeling 2026

    Vektis geeft alleen de naam in hoofdletters. De gemeentelijst van de Kerncijfers 2026 (86358NED) geeft de GM-code en het aantal inwoners. Met de code kun je de gemeentegrenzen van PDOK erbij halen voor een kaart en andere CBS-cijfers koppelen, zoals inkomen of leeftijdsopbouw.

  • Vektis open data zorgkostenWaarstaatjegemeente.nlvia gemeente

    Waarstaatjegemeente zet zorggebruik naast het sociaal domein (Wmo, jeugdhulp). Gebruik het om je uitkomst te controleren en om te zien welke indicatoren de VNG er zelf bij zet; haal de cijfers voor je eigen tool bij de oorspronkelijke bron.

Laat AI het bouwen

Plak deze prompt in Claude, ChatGPT, Cursor of Lovable. Hij noemt de echte endpoints, de koppelsleutels en de valkuilen, zodat de assistent meteen werkende code schrijft. Controleer de uitkomst altijd met de bron zelf.

Bouw een zorgkosten-vergelijker per gemeente: een klein Node-script dat de data voorbereidt, plus één HTML-pagina die het resultaat toont.

Data:
- Vektis open databestand Zorgverzekeringswet, per gemeente (CSV, 2,9 MB):
  https://www.vektis.nl/vektisnl-assets/prd/storage/uploads/Docs%20per%20pagina/Open%20Data%20Bestanden/2024/Vektis%20Open%20Databestand%20Zorgverzekeringswet%202024%20-%20gemeente.csv
  Het nieuwste jaar vind je door hetzelfde pad met dalende jaartallen te proberen (HEAD; 2025 gaf op 16 okt 2026 een 404).
- CBS Kerncijfers wijken en buurten 2026 (OData v4, CORS open):
  gemeentecodes: https://datasets.cbs.nl/odata/v1/CBS/86358NED/WijkenEnBuurtenCodes?$filter=DimensionGroupId eq 'GM'&$select=Identifier,Title
  inwoners: https://datasets.cbs.nl/odata/v1/CBS/86358NED/Observations?$filter=startswith(WijkenEnBuurten,'GM') and Measure eq 'T001036'&$select=WijkenEnBuurten,Value

Het script (Node 20+, fetch) maakt een JSON per gemeente met: GM-code, naam, inwoners, verzekerdejaren, kosten per verzekerdejaar (totaal en per kostenrubriek), de index na correctie voor leeftijd en geslacht, en de rang. De pagina laat me een gemeente kiezen en toont: kosten per verzekerdejaar met de rang, de index (Nederland = 100), een staafdiagram per zorgsoort (gemeente tegen alle gemeenten samen) en de vijf gemeenten die qua index het dichtst bij liggen.

Valkuilen:
- Het Vektis-bestand stuurt geen CORS-kop: de browser kan het niet direct ophalen. Bereid daarom voor met het script (of een server) en serveer de JSON zelf.
- Puntkomma's, punt als decimaalteken, CRLF. 26 kolommen beginnen met kosten_ (namen afgekapt op 32 tekens); tel ze allemaal op voor het totaal. Kolommen verschillen per jaar (ggz-rubrieken nieuw vanaf 2022): lees de kop, gebruik geen vaste posities.
- De eerste datarij is de restcategorie (geslacht, leeftijd en gemeente leeg; 412.394 verzekerden). Wel meetellen voor Nederland, niet voor een gemeente.
- Deel door aantal_verzekerdejaren, niet door aantal_bsn en niet door inwoners.
- Gemeenten staan als naam in hoofdletters zonder code ('S GRAVENHAGE', 'BERGEN NH', 'BERGEN LB', 'NUENEN CA'). Normaliseer (accenten, leestekens en spaties weg) en koppel aan de CBS-lijst van 2026; naam zonder haakjes alleen als die uniek is; aliassen BERGEN LB = Bergen (L.), NUENEN CA = Nuenen, Gerwen en Nederwetten. Controleer dat alle 342 koppelen en meld wat niet koppelt.
- Leeftijdscorrectie: landelijke kosten per verzekerdejaar per geslacht x leeftijdsklasse (zonder restcategorie), maal de verzekerdejaren van de gemeente per cel, opgeteld = verwacht. Index = werkelijk / verwacht x 100.
- Leeftijdsklassen hebben dubbele spaties ('0 t/m  4 jaar') en de laatste is '90+': maak er een getal van voor het sorteren.
- Kosten zijn declaraties over acht kwartalen, negatieve bedragen zijn correcties, specialistische ggz is ongeveer 90% compleet. Alleen wat via de basisverzekering loopt: geen Wmo, geen Wlz, geen aanvullende verzekering.
- Voorwaarden van Vektis: niet-commercieel gebruik, en zet 'bron: Vektis' onder elke grafiek.

Controle: kostenjaar 2024 geeft voor Nederland 3.349 euro per verzekerdejaar (59.525 mln euro, 17.773.377 verzekerdejaren), Heerlen 4.520 euro met index 125, Utrecht 2.898 euro met index 102 (plaats 333 ongecorrigeerd, 74 na correctie).

Probeer het zelf

De kern van het project in een klein script. Nodig: Node 20 of nieuwer (ingebouwde fetch), geen pakketten. Opslaan als zorgkosten.mjs en draaien met: node zorgkosten.mjs Utrecht. Getest op 2026-10-16; hieronder de echte uitvoer van die proefdraai.

// Zorgkosten-vergelijker: kosten van de basisverzekering per verzekerdejaar per gemeente en per zorgsoort,
// met en zonder correctie voor leeftijd en geslacht. Bron: Vektis open databestand Zvw (gemeente, CSV) en
// CBS Kerncijfers wijken en buurten 2026 (86358NED: GM-codes en inwoners, indeling 2026 = indeling van het Vektis-bestand 2024).
// Vektis-voorwaarden: niet-commercieel gebruik, vermeld "bron: Vektis". Draai met: node zorgkosten.mjs [gemeentenaam]
const UA = { "User-Agent": "mijn-zorgkosten/1.0 (+jij@voorbeeld.nl)" };
const VEKTIS = (j) => `https://www.vektis.nl/vektisnl-assets/prd/storage/uploads/Docs%20per%20pagina/Open%20Data%20Bestanden/${j}/Vektis%20Open%20Databestand%20Zorgverzekeringswet%20${j}%20-%20gemeente.csv`;
const KWB = "https://datasets.cbs.nl/odata/v1/CBS/86358NED";
const MIJN = (process.argv[2] ?? "Utrecht").toUpperCase();
const euro = (x) => Math.round(x).toLocaleString("nl-NL");
const norm = (s) => s.normalize("NFD").replace(/[̀-ͯ]/g, "").toUpperCase().replace(/[^A-Z0-9]/g, "");

// 1. Nieuwste kostenjaar: probeer het vaste pad met dalende jaartallen (HEAD). 2025 gaf op 16 okt 2026 nog 404.
let jaar = new Date().getFullYear();
while (!(await fetch(VEKTIS(jaar), { method: "HEAD", headers: UA })).ok) jaar--;
const tekst = await (await fetch(VEKTIS(jaar), { headers: UA })).text();
const regels = tekst.trim().split(/\r?\n/).map((r) => r.split(";"));
const kop = regels[0];
const iG = kop.indexOf("gemeentenaam"), iS = kop.indexOf("geslacht"), iL = kop.indexOf("leeftijdsklasse"), iVj = kop.indexOf("aantal_verzekerdejaren");
const kol = kop.map((k, i) => [k, i]).filter(([k]) => k.startsWith("kosten_"));
console.log(`Vektis ${jaar}: ${regels.length - 1} rijen, ${kol.length} kostenrubrieken, ${(tekst.length / 1e6).toFixed(1)} MB`);

// 2. Optellen. De eerste datarij (geen gemeente, geslacht of leeftijd) is de restcategorie: alleen landelijk meetellen.
const gem = new Map(), cel = new Map(); // cel = landelijk per geslacht x leeftijdsklasse (zonder restcategorie)
let nlEuro = 0, nlVj = 0;
const nlRub = Object.fromEntries(kol.map(([k]) => [k, 0])); // per rubriek, zonder restcategorie
let gemVj = 0;
for (const r of regels.slice(1)) {
  const vj = Number(r[iVj]);
  let tot = 0;
  for (const [k, i] of kol) tot += Number(r[i]) || 0;
  nlEuro += tot; nlVj += vj;
  if (!r[iG]) continue;
  gemVj += vj;
  for (const [k, i] of kol) nlRub[k] += Number(r[i]) || 0;
  const g = gem.get(r[iG]) ?? { euro: 0, vj: 0, rub: {}, cellen: [] };
  g.euro += tot; g.vj += vj; g.cellen.push([r[iS] + r[iL], vj]);
  for (const [k, i] of kol) g.rub[k] = (g.rub[k] ?? 0) + (Number(r[i]) || 0);
  gem.set(r[iG], g);
  const c = cel.get(r[iS] + r[iL]) ?? { euro: 0, vj: 0 };
  c.euro += tot; c.vj += vj; cel.set(r[iS] + r[iL], c);
}
console.log(`Nederland: ${euro(nlEuro / 1e6)} mln euro, ${euro(nlVj)} verzekerdejaren, ${euro(nlEuro / nlVj)} euro per verzekerdejaar (incl. restcategorie)`);

// 3. Correctie voor leeftijd en geslacht: wat zou de gemeente kosten met de landelijke bedragen per geslacht en leeftijdsklasse?
for (const g of gem.values()) {
  const verwacht = g.cellen.reduce((a, [k, vj]) => a + vj * (cel.get(k).euro / cel.get(k).vj), 0);
  g.perVj = g.euro / g.vj;
  g.index = (g.euro / verwacht) * 100;
}

// 4. Koppel de namen (hoofdletters, zonder code) aan CBS-gemeentecodes en inwoners op 1 januari 2026.
const codes = (await (await fetch(`${KWB}/WijkenEnBuurtenCodes?$filter=DimensionGroupId eq 'GM'&$select=Identifier,Title`, { headers: UA })).json()).value;
const inw = Object.fromEntries((await (await fetch(`${KWB}/Observations?$filter=startswith(WijkenEnBuurten,'GM') and Measure eq 'T001036'&$select=WijkenEnBuurten,Value`, { headers: UA })).json()).value.map((o) => [o.WijkenEnBuurten, o.Value]));
const opNaam = new Map(), kaal = new Map();
for (const c of codes) {
  opNaam.set(norm(c.Title), c);
  const k = norm(c.Title.replace(/\s*\(.*\)$/, "")); // "Beek (L.)" -> BEEK, maar alleen als dat uniek is
  kaal.set(k, kaal.has(k) ? null : c);
}
for (const [k, c] of kaal) if (c && !opNaam.has(k)) opNaam.set(k, c);
opNaam.set("BERGENLB", opNaam.get("BERGENL")); // Vektis: BERGEN LB = Bergen (L.)
opNaam.set("NUENENCA", opNaam.get("NUENENGERWENENNEDERWETTEN"));
const mis = [...gem.keys()].filter((n) => !opNaam.get(norm(n)));
for (const [n, g] of gem) g.cbs = opNaam.get(norm(n));
console.log(`Gekoppeld aan CBS: ${gem.size - mis.length} van ${gem.size} gemeenten${mis.length ? ` (niet: ${mis.join(", ")})` : ""}`);

// 5. Ranglijst en jouw gemeente.
const rij = [...gem.entries()].filter(([, g]) => g.cbs);
const rang = (f) => [...rij].sort((a, b) => f(b[1]) - f(a[1])).map(([n]) => n);
const rPer = rang((g) => g.perVj), rIdx = rang((g) => g.index);
const toon = (n) => { const g = gem.get(n); return `${g.cbs.Title.padEnd(26)} ${g.cbs.Identifier} ${euro(g.perVj).padStart(6)} euro/vj  index ${g.index.toFixed(0).padStart(3)}  (${euro(inw[g.cbs.Identifier])} inw.)`; };
console.log("\nHoogste kosten per verzekerdejaar (ongecorrigeerd):"); rPer.slice(0, 3).forEach((n) => console.log("  " + toon(n)));
console.log("Laagste:"); rPer.slice(-3).forEach((n) => console.log("  " + toon(n)));
console.log("Hoogste na correctie voor leeftijd en geslacht (index, Nederland = 100):"); rIdx.slice(0, 3).forEach((n) => console.log("  " + toon(n)));
console.log("Laagste na correctie:"); rIdx.slice(-3).forEach((n) => console.log("  " + toon(n)));

const m = gem.get(MIJN);
console.log(`\n${toon(MIJN)}\n  plaats ${rPer.indexOf(MIJN) + 1} van ${rij.length} ongecorrigeerd, ${rIdx.indexOf(MIJN) + 1} na correctie`);
const naam = (k) => k.replace(/^kosten_/, "").replace(/_/g, " ");
const verschil = kol.map(([k]) => [k, m.rub[k] / m.vj, nlRub[k] / gemVj]).filter(([, , n]) => n > 20).sort((a, b) => b[2] - a[2]).slice(0, 6);
console.log("  Grootste zorgsoorten, euro per verzekerdejaar (gemeente / alle gemeenten samen):");
for (const [k, g, n] of verschil) console.log(`    ${naam(k).padEnd(30)} ${euro(g).padStart(5)} / ${euro(n).padStart(5)}  (${(g / n * 100 - 100 >= 0 ? "+" : "") + (g / n * 100 - 100).toFixed(0)}%)`);
Uitvoer
Vektis 2024: 12992 rijen, 26 kostenrubrieken, 2.9 MB
Nederland: 59.525 mln euro, 17.773.377 verzekerdejaren, 3.349 euro per verzekerdejaar (incl. restcategorie)
Gekoppeld aan CBS: 342 van 342 gemeenten

Hoogste kosten per verzekerdejaar (ongecorrigeerd):
  Heerlen                    GM0917  4.520 euro/vj  index 125  (87.764 inw.)
  Landgraaf                  GM0882  4.520 euro/vj  index 120  (36.844 inw.)
  Brunssum                   GM0899  4.471 euro/vj  index 119  (27.474 inw.)
Laagste:
  Rozendaal                  GM0277  2.700 euro/vj  index  78  (1.837 inw.)
  Staphorst                  GM0180  2.641 euro/vj  index  86  (18.219 inw.)
  Urk                        GM0184  2.601 euro/vj  index  96  (22.431 inw.)
Hoogste na correctie voor leeftijd en geslacht (index, Nederland = 100):
  Heerlen                    GM0917  4.520 euro/vj  index 125  (87.764 inw.)
  Landgraaf                  GM0882  4.520 euro/vj  index 120  (36.844 inw.)
  Stadskanaal                GM0037  4.458 euro/vj  index 120  (32.110 inw.)
Laagste na correctie:
  Schiermonnikoog            GM0088  3.255 euro/vj  index  83  (972 inw.)
  Rozendaal                  GM0277  2.700 euro/vj  index  78  (1.837 inw.)
  Hilvarenbeek               GM0798  2.797 euro/vj  index  77  (16.315 inw.)

Utrecht                    GM0344  2.898 euro/vj  index 102  (378.121 inw.)
  plaats 333 van 342 ongecorrigeerd, 74 na correctie
  Grootste zorgsoorten, euro per verzekerdejaar (gemeente / alle gemeenten samen):
    medisch specialistische z      1.395 / 1.777  (-22%)
    farmacie                         278 /   362  (-23%)
    consulten ggz                    374 /   233  (+61%)
    verpleging en verzorging         117 /   184  (-37%)
    hulpmiddelen                      80 /   115  (-31%)
    huisarts overig                   96 /    96  (+1%)

Waar het misgaat

  • Zonder correctie voor leeftijd meet je vooral vergrijzing. Urk heeft de laagste kosten per verzekerdejaar (2.601 euro), maar na correctie index 96: 34% van de verzekerdejaren is daar onder de 20. Rozendaal en Hilvarenbeek zijn ook na correctie laag (78 en 77). Toon altijd beide cijfers.
  • De restcategorie (eerste datarij, zonder gemeente) hoort bij het landelijke totaal, niet bij een gemeente. Laat je hem weg, dan klopt het landelijke cijfer (3.349 euro) niet; tel je hem bij een gemeente op, dan krijg je een fantasiegemeente met 75,7 miljoen euro ziekenhuiskosten.
  • Namen in hoofdletters zonder code. Koppel met de gemeentelijke indeling van 2026 (het bestand 2024 gebruikt die), niet met die van 2024. Twee aliassen zijn nodig: BERGEN LB en NUENEN CA. Bergen (NH.) en Bergen (L.) zijn twee verschillende gemeenten: nooit alleen op 'Bergen' koppelen.
  • Het CSV heeft geen CORS-kop: een webpagina kan het niet zelf ophalen. Verwerk het vooraf (script, build-stap of eigen server) en lever een kleine JSON aan de browser.
  • Kolommen veranderen per jaar: 2011 had hoofdletters en volle namen (KOSTEN_TWEEDELIJNS_GGZ), vanaf 2022 zijn er drie nieuwe ggz-rubrieken. Wil je een reeks over jaren, lees dan de kop per jaar en vergelijk alleen het totaal of rubrieken die echt hetzelfde betekenen.
  • Alleen de basisverzekering. Wmo (gemeente), Wlz (verpleeghuis, langdurige zorg) en aanvullende verzekeringen staan er niet in. Een gemeente met veel mensen in een verpleeghuis kan daardoor juist lage wijkverpleging hebben. Noem het 'zorgkosten basisverzekering', niet 'alle zorgkosten'.
  • Voorwaarden: Vektis staat alleen persoonlijk gebruik en onderzoek toe, niet commercieel, met de vermelding 'bron: Vektis'. Een betaalde app of een klantportaal van een bedrijf valt daar niet onder.

Verder bouwen

  • Kaart van Nederland met de index per gemeente: haal de gemeentegrenzen 2026 bij PDOK of gebruik die van 2025 en meld de verschillen. Kleur rond 100 met een tweezijdige schaal.
  • Tijdreeks 2017 tot en met 2024 per gemeente uit de jaarbestanden, alleen voor het totaal en rubrieken die niet van naam veranderden (farmacie, huisarts, ziekenhuiszorg). Let op herindelingen: een gemeente van 2024 bestond in 2017 soms nog niet.
  • Dieper inzoomen met het postcode3-bestand (21,8 MB, leeftijd per jaar): zorgkosten per postcodegebied binnen je gemeente. Koppel aan inkomen per postcode (CBS-vierkantstatistieken) en kijk of ggz-kosten samenhangen met inkomen.
  • Zet de gecorrigeerde index naast leefstijl en gezondheid per gemeente (GGD-gezondheidsmonitor, RIVM) of naast het aandeel mensen met een laag inkomen uit de kerncijfers. Zeg erbij dat samenhang geen oorzaak is.

Meer met deze data

Zorgkosten in de basisverzekering per soort zorg: het meest Medisch-specialistische zorg (31.273 miljoen euro), dan Geneesmiddelen (farmacie) en Ggz, consulten

Zorgkosten in de basisverzekering per soort zorg, 2024, in miljoen euro. Totaal: 59.525; de grootste 12 van 25 categorieën staan in de grafiek. Medisch-specialistische zorg is 53% van het totaal. Gedeclareerde kosten in de basisverzekering, inclusief de restcategorie (groepjes kleiner dan tien en onbekende kenmerken). 17.773.377 verzekerdejaren.

Bron: Vektis, Open Databestand Zorgverzekeringswet 2024 (gemeente); bron: Vektis · opgehaald 25 oktober 2026 · selectie: kostenjaar 2024; basisverzekering (Zvw), alle kostenrubriekenOpen de tabel Los blok

De bronnen3

Vektis open data zorgkosten

Vektis, namens de zorgverzekeraarsNederland, postcode (3 cijfers) en gemeente

Wat de basisverzekering per jaar uitbetaalt, verdeeld over 26 kostensoorten zoals ziekenhuiszorg, medicijnen, huisarts en ggz. Per gemeente (leeftijd in klassen van 5 jaar) en per postcodegebied van drie cijfers (per leeftijdsjaar), voor alle verzekerden. Kostenjaren 2011 tot en met 2024.

OpenDownloadGezondheidFinancieel
Actueel
bijgewerkt in juli 2026

Kerncijfers wijken en buurten

CBSNederland, buurt

Ruim honderd cijfers per buurt: inwoners naar leeftijd, huishoudens, WOZ-waarde, inkomen, uitkeringen, auto's en afstand tot voorzieningen. Elk jaar een nieuwe tabel.

OpenAPIDownloadBevolkingWonen en ruimteEconomie
Actueel
bijgewerkt gisteren

Waarstaatjegemeente.nl

VNG, gebouwd door ABF ResearchNederland, gemeente, wijk en buurt

Het datapunt van de VNG over alle gemeenten. Cijfers uit openbare bronnen en van gemeenten zelf, in dashboards voor sociaal domein, wonen, energie, veiligheid, financiën en meer. In de database maak je zelf tabellen en kaarten en exporteer je de cijfers. De publicatiekalender noemt per bron wanneer er nieuwe cijfers komen.

OpenDownloadAPIBestuurGezondheidWonen en ruimte
Actueel
bijgewerkt 17 uur geleden

Meer om te bouwen