303,525 datasets indexed1,419 publishers
Open Data IndexThe index of open data about the Netherlands
Sources›Government
Publicatiebureau van de Europese Unie
International, relevant to the Netherlands

TED, European public procurement

TED (Tenders Electronic Daily) is the EU's procurement journal. Every public body buying above the European thresholds must report here: prior information, contract notice, award and modification, with CPV code, contracting authority and often the winner and value. The search API works without a key. In 2025 Dutch contracting authorities published 22,755 notices, over 183,000 since October 2016.

GovernmentFinanceEconomyOpenAPIDownloadSearch serviceEurope · notice (per tender and lot)
Up to date · updated 15 hours ago · checked 17:23
ted.europa.eu
Screenshot of ted.europa.eu

TED notices from Dutch contracting authorities: 22,755 notices in 2025, 68% more than in 2017

TED notices from Dutch contracting authorities, 2017 – 2025, in notices. That is the highest point in the series.

Source: Publicatiebureau van de EU, TED (Tenders Electronic Daily), API v3 · opgehaald 25 oktober 2026 · selection: buyer-country=NLD (aanbestedende dienst in Nederland); alle soorten aankondigingen: vooraankondiging, aankondiging, gunning, wijzigingOpen the table Single block

What you can build with it1

What can you do with it?4 ideas

Getting started

What does your municipality buy?

Search by the contracting authority's name. On 16 October 2026, for example, there was an award by the municipality of Hengelo for office furniture.

Getting started

More tenders per year

Count per year with buyer-country=NLD and a date range. From 13,531 in 2017 to 22,755 in 2025. Mind the switch to eForms in 2023.

Advanced

Who wins most often?

Fetch one year's awards (form-type=result) and count per winner. Link the names to GLEIF or KvK to group companies into their parent groups.

Advanced

Services, supplies or works

In 2025, 14,214 Dutch notices concerned services, 6,836 supplies and 2,510 works. A notice with several lots can fall into more than one group.

How to process it4 steps

  1. Search with an expert query

    POST to /v3/notices/search with query, fields and limit. No key. At most 250 per page and 15,000 per query (page × limit).

    curl -X POST -H "Content-Type: application/json" -d '{"query":"buyer-country=NLD SORT BY publication-date DESC","fields":["publication-number","publication-date","notice-title","buyer-name","notice-type"],"limit":10,"paginationMode":"PAGE_NUMBER"}' https://api.ted.europa.eu/v3/notices/search
  2. Count without fetching everything

    With limit 1 the count is in totalNoticeCount. This way you count per year, per notice form (form-type) or per contract type (contract-nature).

    curl -X POST -H "Content-Type: application/json" -d '{"query":"buyer-country=NLD AND publication-date>=20250101 AND publication-date<=20251231 AND form-type=result","fields":["publication-number"],"limit":1,"paginationMode":"PAGE_NUMBER"}' https://api.ted.europa.eu/v3/notices/search
  3. More than 15,000 results

    Use paginationMode ITERATION. Each response returns an iterationNextToken for the next batch.

    curl -X POST -H "Content-Type: application/json" -d '{"query":"buyer-country=NLD AND publication-date>=20261001","fields":["publication-number"],"limit":250,"paginationMode":"ITERATION"}' https://api.ted.europa.eu/v3/notices/search
  4. The full notice

    Each result links to the notice as XML (eForms) and as PDF in all EU languages.

    https://ted.europa.eu/en/notice/599786-2026/xml

Interesting combinations

Similar sources

  • TenderNed public procurement

    TenderNed is the Dutch procurement platform, also for contracts below the European thresholds. TED only has the European tenders, but from all EU countries.

  • data.europa.eu

    The European data portal lists TED as a dataset (ted-1) and a CSV subset (ted-csv), handy for bulk, but no search on individual notices.

What to watch out for

  • Only above the European thresholds

    Smaller contracts are not in TED. For a full picture of Dutch procurement also look at TenderNed.

  • A notice is not a tender

    One tender often produces several notices (prior information, contract notice, award, modification). Count per notice form if you want to count tenders.

  • Search index starts in October 2016

    Queries on earlier publication dates returned zero results on 16 October 2026. Look for older notices in the TED datasets on data.europa.eu.

  • Switch to eForms

    Since late 2023 contracting authorities use eForms, with different forms and fields. Compare years before and after the switch with care.

  • Fields are sometimes lists or multilingual

    contract-nature and buyer-name come back as a list or as an object per language (e.g. buyer-name.nld). A notice with lots can therefore count twice.

APIREST (POST, JSON), OpenAPI 3 · read 16 Oct 2026

StandardREST (POST, JSON), OpenAPI 3docs
Access no key

No key for searching. The other v3 endpoints (submit, validate, render) are for contracting authorities and eSenders and need an API key. tested

Size183,548

notices with a Dutch buyer (buyer-country=NLD, scope ALL, 16 Oct 2026); 17,776 active tested

Formats

jsonxmlpdfhtml

Base URL

https://api.ted.europa.eu/v3

Endpoints 3

  • POST/notices/searchSearch with an expert query; JSON body with query (required), fields (required), limit, page, scope, paginationMode. Response: notices, totalNoticeCount, iterationNextToken.
  • GEThttps://ted.europa.eu/{taal}/notice/{publicatienummer}/xmlThe full notice as XML (eForms or the old TED schema). Every search result includes these links.
  • GEThttps://ted.europa.eu/{taal}/notice/{publicatienummer}/pdfThe notice as PDF in every EU language (also /html).

Filtering tested

TED expert query: field operator value, combined with AND/OR/NOT and brackets, lists with IN (A B), text contains with ~ "word", FT~ for full text, sort with SORT BY field ASC|DESC at the end.

=!=>>=<<=IN ( )~FT~ANDORNOTSORT BY

Parameters 9

queryExpert query, e.g. buyer-country=NLD AND publication-date>=20250101 SORT BY publication-date DESC. Dates as YYYYMMDD.tested
fieldsWhich fields to return (required), e.g. publication-number, publication-date, notice-title, buyer-name, notice-type, form-type, classification-cpv, winner-name.from the description
limitNumber per page, default 10, at most 250 (251 returns SEARCH_EXCEEDS_MAX_LIMIT). Also at most 10,000 fields per page (limit × number of fields).tested
pagePage number, starts at 1 (PAGE_NUMBER only).from the description
paginationModePAGE_NUMBER (default, at most 15,000 results) or ITERATION (unlimited, with iterationNextToken; valid until 24 hours after the next OJ S issue).from the description
iterationNextTokenToken from the previous response, for the next page in ITERATION.from the description
scopeALL (default), ACTIVE (only active notices) or LATEST (only the latest OJ S issue).tested
onlyLatestVersionsOnly the latest version of a notice.from the description
checkQuerySyntaxOnly check the syntax, don't search.from the description

Fields you can request in fields (selection of 1,830) 14

NameTypeMeaning
publication-numberstringPublicatienummer (715510-2026)
publication-datedatePublicatiedatum met tijdzone (2026-10-16+02:00)
notice-titleobjectTitel per taal (nld, eng …)
buyer-nameobjectAanbesteder per taal, waarde is een lijst
buyer-countrystringLand van de aanbesteder (ISO-3: NLD)
notice-typestringSoort bericht (cn-standard, can-standard …)
form-typestringcompetition, result, planning, dir-awa-pre, cont-modif, change
contract-naturelijstworks, supplies, services; per perceel, dus kan dubbel
classification-cpvlijstCPV-codes (8 cijfers), per perceel herhaald
procedure-typestringopen, restricted, neg-w-call …
place-of-performancelijstNUTS-codes en land
winner-nameobjectWinnaar per taal (bij gunningen; kan een persoon zijn)
Show all 14
NameTypeMeaning
deadline-receipt-tender-date-lotlijstSluitingsdatum per perceel
linksobjectLinks naar xml, pdf en html per taal

Limits and pitfalls

  • PAGE_NUMBER: at most 250 per page and 15,000 per query (page × limit; beyond that SEARCH_WINDOW_TOO_WIDE). ITERATION: no maximum number of results. from the description
  • No rate limit headers seen. A query with SORT BY took about 7 s; a count with limit 1 is faster. tested
  • Errors come as JSON with error.type: QUERY_UNKNOWN_FIELD (with fieldName and position), QUERY_SYNTAX_ERROR, SEARCH_EXCEEDS_MAX_LIMIT … tested
  • Counting: limit 1 and read totalNoticeCount. NL 2025: 22,755 notices; with buyer-country IN (NLD BEL) 349,226 since 2016. tested
  • The search index starts in October 2016; earlier publication dates return 0. buyer-country=NLD is incomplete for the first years (2016: 2,912, 2018: 15,491). experience
  • Fields that are missing are simply not returned (total-value was absent for awards). buyer-name and notice-title are objects per language; contract-nature and classification-cpv are lists per lot, so count notices, not list values. tested
  • api.ted.europa.eu has no robots.txt (404). On ted.europa.eu only portal and search pages are disallowed; /…/notice/<nr>/xml is allowed. experience

Try it HTTP 200 · 519 ms · 16 Oct

curl -X POST "https://api.ted.europa.eu/v3/notices/search" \
  -d '{"query":"buyer-country=NLD SORT BY publication-date DESC","fields":["publication-number","publication-date","buyer-name","notice-type","form-type"],"limit":3,"paginationMode":"PAGE_NUMBER"}'
{
  "notices": [
    {
      "notice-type": "cn-standard",
      "publication-number": "715510-2026",
      "publication-date": "2026-10-16+02:00",
      "buyer-name": {
        "nld": [
          "SSC IUC DJI"
        ]
      },
      "links": {
        "xml": {
          "MUL": "https://ted.europa.eu/en/notice/715510-2026/xml"
        },
        "pdf": {
          "BUL": "https://ted.europa.eu/bg/notice/715510-2026/pdf",
          "SPA": "https://ted.europa.eu/es/notice/715510-2026/pdf",
          "CES": "https://ted.europa.eu/cs/notice/715510-2026/pdf",
          "DAN": "https://ted.europa.eu/da/notice/715510-2026/pdf",
          "DEU": "https://ted.europa.eu/de/notice/715510-2026/pdf",
          "EST": "https://ted.europa.eu/et/notice/715510-2026/pdf",
          "ELL": "https://ted.europa.eu/el/notice/715510-2026/pdf",
          "ENG": "https://ted.europa.eu/en/notice/715510-2026/pdf",
          "FRA": "https://ted.europa.eu/fr/notice/715510-2026/pdf",
          "GLE": "https://ted.europa.eu/ga/notice/715510-2026/pdf",
          "HRV": "https://ted.europa.eu/hr/notice/715510-2026/pdf",
          "ITA": "https://ted.europa.eu/it/notice/715510-2026/pdf",
          "LAV": "https://ted.europa.eu/lv/notice/715510-2026/pdf",
          "LIT": "https://ted.europa.eu/lt/notice/715510-2026/pdf"
        },
        "pdfs": {
          "NLD": "https://ted.europa.eu/nl/notice/715510-2026/pdfs"
        },
        "html": {
          "BUL": "https://ted.europa.eu/bg/notice/-/detail/715510-2026",
          "SPA": "https://ted.europa.eu/es/notice/-/detail/715510-2026",
          "CES": "https://ted.europa.eu/cs/notice/-/detail/715510-2026",
          "DAN": "https://ted.europa.eu/da/notice/-/detail/715510-2026",
          "DEU": "https://ted.europa.eu/de/notice/-/detail/715510-2026",

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

Read from OpenAPI of the TED API v3 (450 kB): search parameters, limits, error types and 1,830 retrievable fields (NoticeResponse) · Swagger UI to try calls · Expert Search: compose a query, check the syntax and look up all fields. 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 -X POST -H "Content-Type: application/json" -d '{"query":"buyer-country=NLD SORT BY publication-date DESC","fields":["publication-number","publication-date","buyer-name","notice-type"],"limit":5,"paginationMode":"PAGE_NUMBER"}' https://api.ted.europa.eu/v3/notices/search

More in this topic

See how this page is built
bron: ted-aanbestedingen
blokken: []
secties:
  - ideeen
  - verwerken
  - koppelingen
  - vergelijkbaar
  - beperkingen
  - code
cache:
  tag: bron:ted-aanbestedingen
  ververs: na statuscheck, als de bron nieuwer is
statuscheck:
  methode: publicatiedatum van de nieuwste Nederlandse aankondiging (SORT BY
    publication-date DESC)
  verwacht: dagelijks

Source: content/bronnen/ted-aanbestedingen.yaml · Markdown