# TenderNed public procurement

TenderNed is the government's procurement platform. Every publication (notice, award, correction, market consultation …) is in it with buyer, type of contract, procedure and CPV code. Open are the annual files (JSON in the Open Contracting standard, CC0) and a publication web service; on 16 October 2026 that service held 146,513 publications, 25,797 of them from 2025.

- Publisher: Rijksdienst voor Ondernemend Nederland
- Area: Netherlands · Finest detail: publication (tender, lot)
- Period: 2010 – 2026 (jaarbestanden); webservice volledig vanaf 2022 · Refreshed: daily
- Access: Open · Licence: CC0 1.0
- Join keys: 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

## What can you do with it?
- **What does your municipality put out to tender?.** Filter the annual files on buyer.name. For each contract see what is asked (tender.title, the CPV code) and whether it was tendered at European level.
- **Services, supplies or works?.** In 2025, 60% of publications were about services (15,390), against 6,924 about supplies and 3,621 about works. One publication can belong to more than one type.
- **Which procedures does government choose?.** Count open procedures against negotiated procedures without prior call per year. In the web service 92,654 of the 146,513 publications are open (procedure=OPE).
- **Follow one tender from start to finish.** In the annual files relatedNotices lists the related publications (e.g. "427208, 427890, 432426"). That lets you follow a tender from notice via correction to award, and see how long it took.

## How to process it
1. **Download an annual file.** JSON per year from 2016 (58 to 116 MB) and XLSX for 2010–2015, 2016–2020 and 2021–2026. The 2026 file runs to 1 October; TenderNed tops the files up every six months.
   `https://www.tenderned.nl/cms/sites/default/files/2026-07/Dataset_Tenderned-2025-01-01-2025-12-31.json`
2. **Count with the publication web service.** size=1 and the filters publicatieDatumVanaf, publicatieDatumTot and typeOpdracht (L, D, W) return the count in totalElements. Unknown filters are silently ignored.
   `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. **Follow the newest publications.** The Atom feed gives the latest publications with type, procedure and CPV description.
   `https://www.tenderned.nl/papi/tenderned-rs-tns/rss/laatste-publicatie.rss`
4. **Look at the structure first.** An annual file is big; a Range request shows the first releases without downloading everything. Fields follow 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"`

## Interesting combinations
- Who is behind the winner? → [kvk-handelsregister](https://www.opendataindex.nl/en/bron/kvk-handelsregister.md) via naam, adres en id van de leverancier (parties met rol supplier). In an award the winner is a party with role supplier, with name, address, an 8-digit id and whether it is an SME (scale: sme). That id looks like a Chamber of Commerce number (not confirmed); look the company up in the business register.
- How much do municipalities tender, given their budget? → [iv3-gemeentefinancien](https://www.opendataindex.nl/en/bron/iv3-gemeentefinancien.md) via gemeentenaam (buyer.name). Count each municipality's tenders in a year and compare with the expenses in its Iv3 budget.

## Similar sources
- [TED (Tenders Electronic Daily)](https://ted.europa.eu): European tenders from all EU countries, with an open search API. Mainly contracts above the European thresholds; national contracts are only in TenderNed.
- [rijksfinancien](https://www.opendataindex.nl/en/bron/rijksfinancien.md): What central government spends per scheme and recipient; TenderNed shows which contracts are put out for it.
- [ams-subsidies](https://www.opendataindex.nl/en/bron/ams-subsidies.md): Amsterdam's grants: money the city gives away, not contracts it awards.

## What to watch out for
- **The annual files are big.** 58 MB (2016) to 116 MB (2025) of JSON per year. Read them in chunks (streaming) or use the XLSX for a first look.
- **The web service is complete only from 2022.** 2020 has 3,221 publications, 2021 rises from 521 in January to 1,942 in December. Use the annual files for older years.
- **Web service is not in the official specification.** The publication web service is listed on data.overheid.nl, but is not in the OpenAPI of the TenderNed Notice Service. That XML API needs a login and is not taking new requests for now.
- **Personal data of contact persons.** The annual files contain name, email and phone number of contact persons at buyers. Do not use them beyond what you need.
- **Not all filters work.** In the web service typePublicatie and europees do not change the total: they are ignored. Count those types in the annual files.

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

- Base: https://www.tenderned.nl/papi/tenderned-rs-tns/v2
- Access: No key or account for the publication web service. (The TenderNed Notice Service, an XML API for contracting authorities, does require a login.) (tested)
- Formats: json, pdf, atom
- Size: 146559 publications in the web service (totalElements without filter, 16 Oct 2026) (tested)
- Filtering: Plain query parameters. Unknown or unsupported filters are silently ignored: typePublicatie, europees, digitaal, publicatiestatus, opdrachtgeverNaam, zoekterm and sort did not change the total. Always check whether totalElements changes.; 

### Endpoints
- `GET /publicaties?page=0&size=10`: List of publications, newest first, with filters. Spring paging: totalElements, totalPages, number, first, last.
- `GET /publicaties/{publicatieId}`: One publication with CPV and NUTS codes, procedure, contract type, legal framework, keywords, reference number and links.
- `GET /publicaties/{publicatieId}/documenten`: The documents of a publication (notice, clarifications …) with size and download link.
- `GET /publicaties/{publicatieId}/pdf`: The publication as PDF.
- `GET https://www.tenderned.nl/papi/tenderned-rs-tns/rss/laatste-publicatie.rss`: Atom feed with the latest publications.

### Parameters
- `page`: Page number, starts at 0. (tested)
- `size`: Number per page, at most 100 (101 returns 400 "must be less than or equal to 100"). size=1 is enough to count. (tested)
- `publicatieDatumVanaf`: From YYYY-MM-DD (inclusive). (tested)
- `publicatieDatumTot`: Up to and including YYYY-MM-DD (from and to 2026-10-01 gave 111). (tested)
- `typeOpdracht`: L (supplies), D (services) or W (works). (tested)
- `procedure`: Procedure code, e.g. OPE (open: 92,686). (tested)
- `cpvCodes`: CPV code, e.g. 45000000-7 (construction work: 22,773). (tested)
- `search`: Free text (search=belastingdienst: 1,149); the order is then no longer by date. (tested)

### Fields in list and detail (selection) (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

### Limits and pitfalls
- At most 100 per page. No documented rate limit; count with size=1 and the date filters. (tested)
- The web service is only complete from 2022: 2020 has 3,221 publications, 2021 rises from 521 (January) to 1,942 (December). Use the annual files for older years. (experience)
- The path without v2 (…/tenderned-rs-tns/publicaties) redirects with 301 to v2. No OpenAPI description was found (api-docs and swagger return 404); the web service is not in the TenderNed Notice Service specification. (tested)
- A publication can have several contract types: the counts per typeOpdracht (L+D+W) add up to more than the total. (experience)
- Annual files (OCDS 1.1 JSON, CC0): 58 MB (2016) to 116 MB (2025), topped up every six months; Range requests work to inspect the structure. They contain names, e-mail addresses and phone numbers of contact persons. (experience)
- robots.txt (/robots.txt redirects to /cms/robots.txt) does not exclude /papi/. (tested)

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

## How to fetch it

### 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"])
```

## What you can build with it
- [Procurement radar: who wins public contracts?](https://www.opendataindex.nl/en/bouwen/aanbestedingsradar.md): See per quarter which companies win Dutch public contracts, in which sector and for what amount, with their company number, LEI and parent company.


## Examples with real figures (2)

For each example the finding, the reference date and the call that fetches exactly these figures.

- **Publications on TenderNed: 25,797 publications in 2025, 15% more than in 2022** (2025). Table TNS publicaties (v2). [Example](https://www.opendataindex.nl/en/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`
- **TenderNed publications by type of contract: most services (15,390 publications), then supplies and works** (2025). Table TNS publicaties (v2). [Example](https://www.opendataindex.nl/en/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`
