# TenderNed aanbestedingen

TenderNed is het aanbestedingsplatform van de overheid. Elke publicatie (aankondiging, gunning, rectificatie, marktconsultatie …) staat erin met aanbesteder, soort opdracht, procedure en CPV-code. Open zijn de jaarbestanden (JSON in de Open Contracting-standaard, CC0) en een publicatie-webservice; in die webservice stonden op 16 oktober 2026 146.513 publicaties, waarvan 25.797 uit 2025.

- Uitgever: Rijksdienst voor Ondernemend Nederland
- Gebied: Nederland · Laagste detail: publicatie (aanbesteding, perceel)
- Periode: 2010 – 2026 (jaarbestanden); webservice volledig vanaf 2022 · Ververst: dagelijks
- Toegang: Open · Licentie: CC0 1.0
- Koppelsleutels: publicatieId, kenmerk, CPV-code, aanbesteder (naam, buyer.id)
- Status: ok (2026-10-16) · 146.559 publicaties
- URL: https://www.tenderned.nl/cms/nl/aanbesteden-in-cijfers/datasets-aanbestedingen

## Wat kun je ermee?
- **Wat besteedt jouw gemeente aan?.** Filter de jaarbestanden op buyer.name. Zeg per opdracht wat er gevraagd wordt (tender.title, de CPV-code) en of het Europees is aanbesteed.
- **Diensten, leveringen of werken?.** In 2025 ging 60% van de publicaties over diensten (15.390), tegen 6.924 over leveringen en 3.621 over werken. Een publicatie kan bij meer soorten horen.
- **Welke procedures kiest de overheid?.** Tel per jaar de openbare procedures tegen de onderhandelingsprocedures zonder voorafgaande oproep. In de webservice zijn 92.654 van de 146.513 publicaties openbaar (procedure=OPE).
- **Volg één aanbesteding van begin tot eind.** In de jaarbestanden noemt relatedNotices de verwante publicaties (bv. "427208, 427890, 432426"). Zo volg je een aanbesteding van aankondiging via rectificatie tot gunning, en zie je hoe lang het duurde.

## Zo verwerk je het
1. **Een jaarbestand downloaden.** JSON per jaar vanaf 2016 (58 tot 116 MB) en XLSX voor 2010–2015, 2016–2020 en 2021–2026. Het bestand van 2026 loopt tot 1 oktober; TenderNed vult de bestanden elk halfjaar aan.
   `https://www.tenderned.nl/cms/sites/default/files/2026-07/Dataset_Tenderned-2025-01-01-2025-12-31.json`
2. **Tellen met de publicatie-webservice.** size=1 en de filters publicatieDatumVanaf, publicatieDatumTot en typeOpdracht (L, D, W) geven in totalElements het aantal. Onbekende filters worden stil genegeerd.
   `https://www.tenderned.nl/papi/tenderned-rs-tns/v2/publicaties?page=0&size=1&publicatieDatumVanaf=2025-01-01&publicatieDatumTot=2025-12-31&typeOpdracht=W`
3. **De nieuwste publicaties volgen.** De Atom-feed geeft de laatste publicaties met soort, procedure en CPV-omschrijving.
   `https://www.tenderned.nl/papi/tenderned-rs-tns/rss/laatste-publicatie.rss`
4. **Kijk eerst naar de structuur.** Een jaarbestand is groot; met een Range-verzoek zie je de eerste releases zonder alles te downloaden. Velden volgen OCDS 1.1: parties, buyer, tender (title, classification, procurementMethodDetails, lots).
   `curl -r 0-6000 "https://www.tenderned.nl/cms/sites/default/files/2026-10/Dataset_Tenderned-2026-01-01-2026-10-01.json"`

## Interessante koppelingen
- Wie zit er achter de winnaar? → [kvk-handelsregister](https://www.opendataindex.nl/bron/kvk-handelsregister.md) via naam, adres en id van de leverancier (parties met rol supplier). Bij een gunning staat de winnaar als partij met rol supplier, met naam, adres, een id van 8 cijfers en of het een mkb-bedrijf is (scale: sme). Dat id lijkt een KvK-nummer (niet bevestigd); zoek het bedrijf op in het Handelsregister.
- Hoeveel besteden gemeenten aan, gezien hun begroting? → [iv3-gemeentefinancien](https://www.opendataindex.nl/bron/iv3-gemeentefinancien.md) via gemeentenaam (buyer.name). Tel per gemeente de aanbestedingen in een jaar en zet dat naast de lasten in de Iv3-begroting.

## Vergelijkbare bronnen
- [TED (Tenders Electronic Daily)](https://ted.europa.eu): Europese aanbestedingen van alle EU-landen, met een open zoek-API. Vooral opdrachten boven de Europese drempels; nationale opdrachten staan alleen in TenderNed.
- [rijksfinancien](https://www.opendataindex.nl/bron/rijksfinancien.md): Wat het Rijk uitgeeft per regeling en ontvanger; TenderNed laat zien welke opdrachten daarvoor worden uitgezet.
- [ams-subsidies](https://www.opendataindex.nl/bron/ams-subsidies.md): Subsidies van Amsterdam: geld dat de gemeente geeft, geen opdrachten die ze uitzet.

## Waar je op moet letten
- **De jaarbestanden zijn groot.** 58 MB (2016) tot 116 MB (2025) JSON per jaar. Lees ze in stukken (streaming) of gebruik de XLSX voor een eerste blik.
- **De webservice is pas vanaf 2022 compleet.** 2020 telt er 3.221 publicaties, 2021 loopt op van 521 in januari naar 1.942 in december. Gebruik voor oudere jaren de jaarbestanden.
- **Webservice staat niet in de officiële specificatie.** De publicatie-webservice wordt op data.overheid.nl genoemd, maar staat niet in de OpenAPI van de TenderNed Notice Service. Die XML-API vraagt een login en neemt voorlopig geen nieuwe aanvragen aan.
- **Persoonsgegevens van contactpersonen.** In de jaarbestanden staan naam, e-mail en telefoonnummer van contactpersonen bij aanbesteders. Gebruik die niet verder dan nodig.
- **Niet alle filters werken.** In de webservice veranderen typePublicatie en europees het totaal niet: ze worden genegeerd. Tel die soorten in de jaarbestanden.

## API (REST (JSON), Spring-paginering)

- Basis: https://www.tenderned.nl/papi/tenderned-rs-tns/v2
- Toegang: Geen sleutel of account voor de publicatiewebservice. (De TenderNed Notice Service, een XML-API voor aanbesteders, vraagt wel een login.) (getest)
- Formaten: json, pdf, atom
- Omvang: 146559 publicaties in de webservice (totalElements zonder filter, 16 okt 2026) (getest)
- Filteren: Gewone queryparameters. Onbekende of niet-ondersteunde filters worden stil genegeerd: typePublicatie, europees, digitaal, publicatiestatus, opdrachtgeverNaam, zoekterm en sort veranderden het totaal niet. Controleer altijd of totalElements verandert.; 

### Endpoints
- `GET /publicaties?page=0&size=10`: Lijst van publicaties, nieuwste eerst, met filters. Spring-paginering: totalElements, totalPages, number, first, last.
- `GET /publicaties/{publicatieId}`: Eén publicatie met CPV- en NUTS-codes, procedure, soort opdracht, juridisch kader, trefwoorden, referentienummer en links.
- `GET /publicaties/{publicatieId}/documenten`: De documenten bij een publicatie (aankondiging, nota van inlichtingen …) met grootte en downloadlink.
- `GET /publicaties/{publicatieId}/pdf`: De publicatie als PDF.
- `GET https://www.tenderned.nl/papi/tenderned-rs-tns/rss/laatste-publicatie.rss`: Atom-feed met de laatste publicaties.

### Parameters
- `page`: Paginanummer, begint bij 0. (getest)
- `size`: Aantal per pagina, hoogstens 100 (101 geeft 400 "must be less than or equal to 100"). size=1 is genoeg om te tellen. (getest)
- `publicatieDatumVanaf`: Vanaf JJJJ-MM-DD (inclusief). (getest)
- `publicatieDatumTot`: Tot en met JJJJ-MM-DD (vanaf en tot 2026-10-01 gaf 111). (getest)
- `typeOpdracht`: L (leveringen), D (diensten) of W (werken). (getest)
- `procedure`: Procedurecode, bv. OPE (openbaar: 92.686). (getest)
- `cpvCodes`: CPV-code, bv. 45000000-7 (bouwwerkzaamheden: 22.773). (getest)
- `search`: Vrije tekst (search=belastingdienst: 1.149); de volgorde is dan niet meer op datum. (getest)

### Velden in lijst en detail (selectie) (15)
`publicatieId` string, `kenmerk` integer, `publicatieDatum` date, `typePublicatie` object, `aanbestedingNaam` string, `opdrachtgeverNaam` string, `sluitingsDatum` datetime, `procedure` object, `typeOpdracht` object, `europees` boolean, `publicatiecode` object, `opdrachtBeschrijving` string, `cpvCodes` lijst, `nutsCodes` lijst, `isGegund` boolean

### Limieten en valkuilen
- Hoogstens 100 per pagina. Geen gedocumenteerde rate limit; tel met size=1 en de datumfilters. (getest)
- De webservice is pas vanaf 2022 compleet: 2020 telt 3.221 publicaties, 2021 loopt op van 521 (januari) naar 1.942 (december). Gebruik voor oudere jaren de jaarbestanden. (ervaring)
- Het pad zonder v2 (…/tenderned-rs-tns/publicaties) stuurt met 301 door naar v2. Er is geen OpenAPI-beschrijving gevonden (api-docs en swagger geven 404); de webservice staat niet in de specificatie van de TenderNed Notice Service. (getest)
- Een publicatie kan meer soorten opdracht hebben: de tellingen per typeOpdracht (L+D+W) zijn samen groter dan het totaal. (ervaring)
- Jaarbestanden (OCDS 1.1 JSON, CC0): 58 MB (2016) tot 116 MB (2025), elk halfjaar aangevuld; Range-verzoeken werken om de structuur te bekijken. Ze bevatten naam, e-mail en telefoon van contactpersonen. (ervaring)
- robots.txt (/robots.txt stuurt door naar /cms/robots.txt) sluit /papi/ niet uit. (getest)

### Voorbeeld
```
https://www.tenderned.nl/papi/tenderned-rs-tns/v2/publicaties?page=0&size=3&publicatieDatumVanaf=2026-10-01&typeOpdracht=W
```

## Zo haal je het op

### curl
```bash
curl "https://www.tenderned.nl/papi/tenderned-rs-tns/v2/publicaties?page=0&size=5&publicatieDatumVanaf=2026-10-01"
```

### python
```python
import requests

url = "https://www.tenderned.nl/papi/tenderned-rs-tns/v2/publicaties"
for jaar in range(2022, 2026):
    r = requests.get(url, params={"page": 0, "size": 1,
                                  "publicatieDatumVanaf": f"{jaar}-01-01",
                                  "publicatieDatumTot": f"{jaar}-12-31"}).json()
    print(jaar, r["totalElements"])
```

## Wat je ermee kunt bouwen
- [Aanbestedingsradar: wie krijgt de overheidsopdrachten?](https://www.opendataindex.nl/bouwen/aanbestedingsradar.md): Zie per kwartaal welke bedrijven Nederlandse overheidsopdrachten winnen, in welke sector en voor welk bedrag, met hun KvK-nummer, LEI en moedermaatschappij.


## Voorbeelden met echte cijfers (2)

Per voorbeeld de bevinding, de peildatum en de aanroep die precies deze cijfers ophaalt.

- **Publicaties op TenderNed: 25.797 publicaties in 2025, 15% meer dan in 2022** (2025). Tabel TNS publicaties (v2). [Voorbeeld](https://www.opendataindex.nl/voorbeeld/tenderned-publicaties-per-jaar)
  - `https://www.tenderned.nl/papi/tenderned-rs-tns/v2/publicaties?page=0&size=1&publicatieDatumVanaf=2025-01-01&publicatieDatumTot=2025-12-31`
- **Publicaties op TenderNed per soort opdracht: het meest diensten (15.390 publicaties), dan leveringen en werken** (2025). Tabel TNS publicaties (v2). [Voorbeeld](https://www.opendataindex.nl/voorbeeld/tenderned-soort-opdracht)
  - `https://www.tenderned.nl/papi/tenderned-rs-tns/v2/publicaties?page=0&size=1&publicatieDatumVanaf=2025-01-01&publicatieDatumTot=2025-12-31&typeOpdracht=D`
  - `https://www.tenderned.nl/papi/tenderned-rs-tns/v2/publicaties?page=0&size=1&publicatieDatumVanaf=2025-01-01&publicatieDatumTot=2025-12-31`
