303,525 datasets indexed1,419 publishers
Open Data IndexThe index of open data about the Netherlands
Sources›Government
Kiesraad
Dutch source

Election results from the Electoral Council

The official results of all elections: House of Representatives, municipal council, provincial, water board, European Parliament and referendums. The results database goes back to 1848 and has a CSV per municipality for each election. For recent elections data.overheid.nl also has the count files (EML) with votes per polling station and per candidate.

GovernmentOpenDownloadNetherlands · polling station
Up to date · updated in March 2026 · checked 17:23
verkiezingsuitslagen.nl
Screenshot of verkiezingsuitslagen.nl

Everything that's in it176

All elections in the Kiesraad's election results database, by type and decade, fetched every night. Every election has its own page with the CSV per municipality and per polling station.

176elections
176with an API or map service

Tweede Kamer64

Eerste Kamer6

Europees Parlement10

Provinciale Staten23

Waterschap3

Gemeenteraad60

Eilandsraad5

Kiescollege2

Nationaal referendum3

Votes for D66, 2025 general election: highest in Heemstede (29.5%), lowest in Urk (0.7%)

Votes for D66, 2025 general election per municipality, October 2025, in percent of valid votes. Netherlands as a whole: 16.9. 342 municipalities with a figure.

Source: Kiesraad, Databank verkiezingsuitslagen (Tweede Kamer 29 oktober 2025, uitslag per gemeente) · opgehaald 25 oktober 2026 · selection: partij: D66; aandeel in de geldige stemmen op partijenOpen the table Single block

Votes for the PVV, 2025 general election: highest in Rucphen (46.2%), lowest in Rozendaal (5.1%)

Votes for the PVV, 2025 general election per municipality, October 2025, in percent of valid votes. Netherlands as a whole: 16.7. 342 municipalities with a figure.

Source: Kiesraad, Databank verkiezingsuitslagen (Tweede Kamer 29 oktober 2025, uitslag per gemeente) · opgehaald 25 oktober 2026 · selection: partij: PVV (Partij voor de Vrijheid); aandeel in de geldige stemmen op partijenOpen the table Single block

Votes per party in the 2025 House of Representatives election: most D66 (1,790,634 votes), then PVV (Partij voor de Vrijheid) and VVD

Votes per party in the 2025 House of Representatives election, October 2025, in votes. Total: 10,571,990; the largest 12 of 27 categories are shown. D66 is 17% of the total. 15 parties won seats (D66 and PVV (Partij voor de Vrijheid) 26 each): D66 26, PVV (Partij voor de Vrijheid) 26, VVD 22, GROENLINKS / Partij van de Arbeid (PvdA) 20, CDA 18, JA21 9, Forum voor Democratie 7, BBB 4, DENK 3, Staatkundig Gereformeerde Partij (SGP) 3, Partij voor de Dieren 3, ChristenUnie 3, SP (Socialistische Partij) 3, 50PLUS 2, Volt 1. Turnout 78.3%.

Source: Kiesraad, Databank verkiezingsuitslagen (Tweede Kamer 29 oktober 2025) · opgehaald 25 oktober 2026Open the table Single block

What you can build with it1

What can you do with it?4 ideas

Getting started

Where did each party win?

Download the results per municipality of the 29 October 2025 general election and colour a map by largest party. Nationally D66 and PVV each won 26 seats.

Getting started

Turnout over the years

The database has eligible voters and turnout per election. In 2025, 78.3% of the 13,589,128 eligible voters turned out. Put the general elections side by side.

Advanced

Preference votes per candidate

The 2026 municipal election CSV shows per municipality how many votes each candidate received. Find candidates who overtook higher-placed names with preference votes.

Advanced

Votes per polling station next to the neighbourhood

Take the votes per polling station from the EML count files, find where each polling station is, and compare with CBS neighbourhood figures. Note: voters may vote anywhere in their municipality.

How to process it4 steps

  1. Pick the election in the database

    Each election has a code: type plus date, for example TK20251029 or GR20260318. You find them on the database home page.

    https://www.verkiezingsuitslagen.nl/verkiezingen
  2. Download the results per municipality

    A semicolon CSV: municipality, code, party, number of votes. The 2025 general election is 359 kB.

    https://www.verkiezingsuitslagen.nl/uitslag/verkiezing/TK20251029/gemeenten
  3. For polling stations and candidates, go to data.overheid.nl

    There you find a dataset per election with EML files (XML) and often a CSV. Search for 'verkiezingsuitslag' with the Kiesraad as owner.

    https://data.overheid.nl/data/api/3/action/package_search?q=verkiezingsuitslag&fq=authority:%22http://standaarden.overheid.nl/owms/terms/Kiesraad%22&rows=50
  4. Read the long format

    The 2026 municipal CSV has one value per row: the VeldType column says what it is (Kiesgerechtigden, Opkomst, KandidaatAantalStemmen …), the Waarde column holds the number. Pivot the table before calculating.

    https://data.overheid.nl/sites/default/files/dataset/09cf04e7-11ac-4b53-a2cc-baccf95e82fd/resources/GR2026.csv

Interesting combinations

Similar sources

What to watch out for

  • Every election has a different format

    The 2025 general election CSV has one row per party per municipality; the 2026 municipal one is long (VeldType and Waarde) and includes candidates. Older datasets mix EML, Excel and other municipal files. Write a separate reader per election.

  • Polling station CSV without municipality

    Where the database has polling stations (some elections since 2012), the CSV lacks the municipality: code SB25 occurs in many municipalities. Use the EML files per municipality for polling stations. For the 2025 general election the polling station CSV is empty.

  • EML is XML without support

    The Electoral Council itself says it offers no support for the EML format. The files come in large zips, for the 2025 general election in three parts.

  • Provisional or final

    The 2026 municipal dataset calls its own data provisional. Re-votes (Gorinchem, 29 April 2026) and merger elections are listed separately. Read the notes of each dataset.

  • Municipal boundaries shift

    Because of mergers, municipalities from an old election may no longer exist. Next to the municipality code the database gives an 'AmsterdamseCode' (historical code). Compare series only on the same boundaries.

APIBestanden (CSV) + JSON van de website · read 16 Oct 2026

StandardBestanden (CSV) + JSON van de websitedocs
Access no key

No key or account needed tested

Size176

elections in the database, 1848 to 2026 (list pages, 16 Oct 2026) experience

Formats

csvjsoneml/xml

Base URL

https://www.verkiezingsuitslagen.nl

Endpoints 5

  • GET/uitslag/verkiezing/{code}/gemeentenCSV with the result per municipality and party (semicolon, UTF-8 without BOM). TK2025: 359 kB, 8,150 lines, 343 codes, 27 parties.
  • GET/uitslag/verkiezing/{code}/stembureausCSV per polling station and party. Only filled for some elections (GR2022: 8.7 MB); for TK2025, PS2023, EP2024 only the header line.
  • GET/verkiezingen/detailJson/{code}JSON the site uses for the detail page: Info (name, date, remark), Stemregio (electorate, turnout, valid, blank and invalid votes), PieChart (votes and percentage per party), Regios (provinces, electoral districts). Undocumented.
  • GET/verkiezingen/detail/{code}Detail page (HTML); the national result with seats is JSON inside <textarea id="UitslagData">.
  • GET/Verkiezingen/index/{pagina}?v=1800&t=2027List of elections (HTML, 10 per page) with codes, turnout and votes cast. This is where you find the codes.

Filtering tested

No filters: one file per election. Filter yourself on the Code (municipality) or Partij column.

Parameters 1

codeElection code = type + date YYYYMMDD: TK (House of Representatives), EK, EP, PS, WS, GR (municipal council), ER, NR/RR (referendum). E.g. TK20251029, GR20220316.tested

Columns in the CSV per municipality (and per polling station) 7

NameTypeMeaning
GemeentetekstGemeentenaam zoals in dat jaar ('s-Gravenhage); niet uniek (twee keer Bergen)
CodetekstKiesraad-gemeentecode G0518 (= CBS GM0518). G9010 NBSB = briefstemmers buitenland, geen gemeente
AmsterdamseCodetekstHistorische gemeentecode (Amsterdamse code, bv. 11434)
PartijtekstPartijnaam zoals op het stembiljet
AantalStemmengetalStemmen op de partij in die gemeente; leeg = partij deed daar niet mee
AantalZetelsgetalAlleen bij gemeenteraadsverkiezingen gevuld (zetels in de raad); leeg bij TK, PS, EP
StembureautekstAlleen in de stembureau-CSV: nummer en naam ("000 - -"); Code is dan SB0, SB25 … zonder gemeente

Limits and pitfalls

  • No key and no documented limit. One file per election, usually a few hundred kB. tested
  • The Azure firewall rejects the default Python requests User-Agent (HTTP 403). Always set your own User-Agent; curl and an honest UA work. tested
  • An unknown election code returns HTTP 500 with an empty body, not 404. tested
  • The polling-station CSV has no municipality column: codes like SB25 occur in many municipalities. For polling stations use the per-municipality EML files from data.overheid.nl. tested
  • In detailJson, counts in Stemregio are Dutch-formatted text ("13.589.128", "78,3%"); in PieChart they are numbers. tested
  • Skip codes from G9000 when counting municipalities; join on code, not name (Bergen NH G0373 and Bergen L G0893). experience
  • Formats on data.overheid.nl differ per election (EML zips, wide or long CSV, Excel). Its CKAN API (/data/api/…) falls under Disallow: /data/ in robots.txt; the files themselves (/sites/default/files/…) do not. tested

Try it HTTP 200 · 385 ms · 16 Oct

https://www.verkiezingsuitslagen.nl/verkiezingen/detailJson/TK20251029
{
  "Info": {
    "KaartId": 67,
    "Id": 1876,
    "Code": "TK20251029",
    "Name": "Tweede Kamer",
    "Date": "29 oktober 2025",
    "Opkomst": null,
    "UitgebrachteStemmen": null,
    "Opmerking": "<b>LET OP!</b> In de databank vindt u de uitslagen per partij per gemeente. Uitslagen van stembureaus en stemmen op k…",
    "Voor1918": false,
    "IsReferendum": false,
    "StemmingId": 10926,
    "DateStemming": "29-10-2025",
    "HeeftZetelsBijGemeentes": false,
    "HeeftGemeentes": true
  },
  "Stemregio": {
    "OngeldigeStemmenPercentage": "0,27%",
    "BlancoStemmenPercentage": "0,38%",
    "StemmingId": 10926,
    "StemregioId": 745610,
    "Naam": "Nederland",
    "Kiesgerechtigden": "13.589.128",
    "OpkomstPercentage": "78,3%",
    "AantalZetels": null,
    "AantalGeldigeStemmen": "10.571.990",
    "AantalBlancoStemmen": "40.128",
    "AantalOngeldigeStemmen": "28.206",
    "AantalGeldigeBlancoStemmen": null,
    "AantalOngeldigeBlancoStemmen": null,
    "AantalStembriefjes": null
  },
  "Json": null,
  "Regios": {
    "Regios": [
      {
        "Id": 2,
        "Options": [
          {

Shortened response, saved at harvest time. Click the URL for the real, current response.

Read from Election results database: list of elections with their code and the download buttons · data.overheid.nl: EML files per election (polling stations, candidates). Labels: from the description stated in what the api itself publishes. tested from our own small call. platform applies to every api on this platform, per its documentation. experience learned while building open data index.

How to fetch it

curl -o tk2025-gemeenten.csv "https://www.verkiezingsuitslagen.nl/uitslag/verkiezing/TK20251029/gemeenten"

More from Kiesraad in our index

214 datasets in Kiesraad verkiezingsuitslagen, data.overheid.nl. These changed most recently.

All about Kiesraad

More in this topic

See how this page is built
bron: kiesraad-verkiezingen
blokken: []
secties:
  - ideeen
  - verwerken
  - koppelingen
  - vergelijkbaar
  - beperkingen
  - code
cache:
  tag: bron:kiesraad-verkiezingen
  ververs: na statuscheck, als de bron nieuwer is
statuscheck:
  methode: datum van de nieuwste verkiezing in de Databank Verkiezingsuitslagen
  verwacht: jaarlijks

Source: content/bronnen/kiesraad-verkiezingen.yaml · Markdown