Databron
Alle gegevens komen rechtstreeks uit het Open Data Portaal van de Tweede Kamer (het “gegevensmagazijn”), via de publieke OData v4 API. Er is geen API-sleutel nodig en er wordt niets handmatig ingevoerd: wat u ziet is wat de Kamer zelf publiceert.
Gebruikte gegevenssoorten (entiteiten):
| Entiteit | Wat het is | Gebruikt voor |
|---|---|---|
Fractie | Partijen/fracties met zetelaantal | Zetelverdeling, kleuren, matrix |
Besluit | Besluiten van de Kamer, incl. stemuitslag | Recente stemmingen, matrix, thema’s |
Stemming | Per besluit: wie stemde voor/tegen | Voor/tegen-balken, overeenstemming |
Zaak | De motie/het wetsvoorstel achter een besluit | Titels, dossiers, thema-indeling |
Persoon | Kamerleden met geboortedatum, geslacht, woonplaats | Kamerleden-pagina |
FractieZetelPersoon | Actuele koppeling lid ↔ fractiezetel | Fractie per Kamerlid |
ZaakActor | Indieners van een zaak | Meest actieve motie-indieners |
Document | Het officiële Kamerstuk achter een zaak | Links naar de volledige motie of het volledige voorstel |
PersoonGeschenk, PersoonReis, PersoonNevenfunctie | Openbare belangenregisters | Geschenken, reizen en bijbanen in persoons- en fractiedossiers |
De server haalt alle stemmingsbesluiten en moties sinds 12 november 2025 op — de installatie van de huidige Tweede Kamer na de verkiezingen. Zo beslaan alle analyses de volledige zittingsperiode in plaats van een rollend venster. Deze historische data wordt een uur gecachet (pasfoto’s een dag), zodat de API van de Kamer niet onnodig wordt belast; de eerste keer laden na een serverstart kan daarom even duren.
Berekeningen
Overeenstemmingsmatrix (“Wie stemt met wie?”)
Voor elk paar fracties tellen we de stemmingen waarin beide fracties voor of tegen stemden. Het percentage is het aandeel daarvan waarin ze hetzelfde stemden. Paren met minder dan 10 gedeelde stemmingen tonen geen waarde; de bondgenoten/tegenpolen-inzichten vereisen minstens 25 gedeelde stemmingen.
Voor/tegen-balken
Zetelaantallen per stemming komen uit FractieGrootte. Bij hoofdelijke stemmingen (per Kamerlid) telt elk lid als 1 en aggregeren we per fractie. Het streepje in de balk markeert 76 zetels: de kleinste meerderheid.
Thema-indeling
De indeling op de Onderwerpen-pagina is een eenvoudige, transparante trefwoordenclassificatie op de titel en het onderwerp van de zaak (bijv. “stikstof” → Klimaat & energie). Het eerste thema met een treffer wint; zonder treffer valt een stemming onder “Overig”. Dit is bewust simpel gehouden — het is indicatief, geen officiële indeling van de Kamer.
Verdeeldheid
De verdeeldheid van een stemming is 1 − |voor − tegen| / (voor + tegen): 0 bij unanimiteit, 1 bij een perfecte fifty-fifty. “Meest verdeeld thema” is het gemiddelde hiervan over alle stemmingen binnen een thema (minimaal 10 stemmingen).
Leeftijden en moties per lid
Leeftijden worden berekend uit de geboortedatum in het gegevensmagazijn. Het motie-aantal bij een Kamerlid telt iedere motie waarbij dat lid als indiener staat geregistreerd, dus ook gezamenlijke moties. Onder Alle leden opent ieder lid als een deelbaar persoonsdossier met motiefilters, thema’s, vergelijking met de mediaan, geregistreerde uitslagen, afwijkend stemgedrag, geschenken, reizen en nevenfuncties.
De besluittekst bevat soms alleen het woord “Aangenomen” of “Verworpen”. Dat is een uitslag, geen inhoudelijke uitleg. In dat geval toont de site de officiële zaak- of documentomschrijving en biedt zij een link naar het volledige document uit het gegevensmagazijn.
Motie-succes per fractie
Van elke motie waarover gestemd is, kijken we naar de fractie van de eerste indiener en of de motie werd aangenomen. Fracties met minder dan 5 in stemming gebrachte moties blijven buiten beeld.
Fractiedossiers
Per actieve fractie tellen we geregistreerde voor- en tegenstemmen, moties met een indiener uit die fractie, actuele leden en openbare registervermeldingen. Bondgenoten en tegenpolen gebruiken dezelfde overeenstemmingsberekening als de matrix. Een hoog aandeel voorstemmen is geen inhoudelijk rapportcijfer: de betekenis hangt af van het voorstel.
Zoeken
De globale zoekfunctie normaliseert hoofdletters en accenten en doorzoekt namen, woonplaatsen, fracties, motietitels, zaakonderwerpen, besluitteksten en indieners. Thema- en uitslagfilters gebruiken dezelfde definities als de rest van de site.
Dwarsliggers
Alleen bij hoofdelijke stemmingen is per Kamerlid vastgelegd wat er gestemd is. Per fractie bepalen we de meerderheid onder de aanwezige leden; wie daarvan afwijkt telt als afwijkende stem. Bij een gelijk verdeelde fractie is er geen fractielijn en telt niets als afwijkend.
De voorpagina-koppen en het weekjournaal
De koppen op de voorpagina worden automatisch gekozen: de stemming met de kleinste marge in de laatste zeven dagen mét stemmingen (recesbestendig), de dwarsligger met de meeste afwijkende stemmen, het recentste vermeldenswaardige registergeschenk en het grootste stemgedrag-blok. Er komt geen redactie aan te pas — wat opvalt, valt op omdat de cijfers dat zeggen.
Trends per maand
De trendlijnen op de pagina Opvallend tonen per kalendermaand het aandeel gelijk gestemde stemmingen voor een aantal sprekende fractieduo’s (grootste bondgenoten, grootste tegenpolen, de twee grootste fracties) en het gemiddelde binnen het grootste stemgedrag-blok. Maanden met minder dan 15 gedeelde stemmingen tonen geen punt. De formatie-barometer telt daarnaast stemmingen waarvan dossier of onderwerp expliciet aan de kabinetsformatie raakt.
Head-to-head
De vergelijker op de Fracties-pagina gebruikt dezelfde overeenstemmingsberekening als de matrix, uitgesplitst per thema (minimaal 8 gedeelde stemmingen per thema). De “hardste botsingen” zijn stemmingen waarin de twee fracties tegenover elkaar stonden én de uitslag krap was — daar deed hun verschil er het meest toe.
Beperkingen & datakwaliteit
- Dubbele fractierecords. Sommige fracties staan twee keer in het gegevensmagazijn (50PLUS heeft bijvoorbeeld een record uit 2012–2021 en een nieuw record sinds 2025), en recente stemmingen verwijzen soms naar het oude record. De site koppelt daarom eerst op fractie-ID en valt terug op de fractienaam.
- Periode. Alle analyses beslaan de huidige zittingsperiode (sinds 12 november 2025). De kabinetsformatie liep bij het bouwen van deze site nog; de installatiedatum van de Kamer is daarom het meest betrouwbare startpunt van “het huidige politieke klimaat”.
- Inconsistenties. De pagina Datakwaliteit rekent het gegevensmagazijn zelf na: dubbele fractierecords, stemmen op oude records, spookfracties bij indieners, uitslagen die de stemverhouding tegenspreken, officieel geregistreerde vergissingen, en meer. Alles live berekend, niets verzonnen.
- Thema’s zijn indicatief. De trefwoordenclassificatie kan een stemming in het verkeerde thema plaatsen; de Kamer zelf publiceert geen thema-indeling per stemming.
- Afsplitsingen. Groepen en eenlingen (zoals “Lid Keijzer”) worden als gewone fracties behandeld, in grijstinten.
- Stemgedrag ≠ standpunt. Een hoge overeenstemming tussen twee partijen betekent niet dat ze het overal over eens zijn; veel moties worden Kamerbreed gesteund.
Techniek
Node.js + Express serveert de pagina’s en werkt als doorgeefluik (met cache) naar de OData API. De frontend is bewust framework-loos: gewone HTML, CSS en JavaScript, met de hand getekende SVG-visualisaties. Licht- en donkerthema volgen de systeeminstelling.
Handige links voor wie zelf wil bouwen:
- Officiële API-documentatie — uitleg van alle entiteiten en het informatiemodel
- $metadata — het volledige OData-schema
GET /api/overview,GET /api/topicsenGET /api/opvallend— kleine, vooraf berekende paginavullingenGET /api/votesenGET /api/votes/:id— gepagineerde stemmingen en volledige besluitdetailsGET /api/ledenenGET /api/leden/:id/moties— ledenoverzicht en de uitleg achter ieder motie-aantalGET /api/fractiesenGET /api/fracties/:id— fractiekaarten en volledige fractiedossiersGET /api/search— zoeken en filteren over leden, moties en stemmingenGET /api/inconsistentiesenGET /api/foto/:persoonId— datakwaliteit en pasfoto’s