# Netherlands Public Tenders (TED) (`eudatadesk/netherlands-public-tenders`) Actor

Netherlands public procurement notices from the public TED API as clean JSON: buyer, subject, CPV, values, deadlines, company winners and notice link. Filter by keyword, CPV, date and value. Personal data removed.

- **URL**: https://apify.com/eudatadesk/netherlands-public-tenders.md
- **Developed by:** [EU Data Desk](https://apify.com/eudatadesk) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Netherlands Public Tenders (TED)

Track public procurement in Netherlands: calls for tender, contract awards and transparency notices from gemeenten, provincies, waterschappen, Rijkswaterstaat and universities. Each result is one notice as clean JSON with buyer, subject, CPV codes, estimated and awarded value with currency, deadlines, winning companies and a link to the notice.

**Source: TED (ted.europa.eu).** This Actor is an independent tool. It is not an official service of the EU, the Publications Office or any national government.

### Example

Find recent green-space maintenance contracts: set `cpvPrefix` to `77310`, or search `keyword` = `groenonderhoud`, with `dateFrom` set to the start of last month.

Dutch notices are often in Dutch only; `titleEn` gives TED's English category label where available.

### Coverage, please read

Data comes only from the public TED API (notices where the buyer country is Netherlands). TED mainly holds notices above EU thresholds plus those published voluntarily, so **this Actor may miss small national-only tenders**, for example those published on TenderNed only. It does not promise full coverage of Dutch procurement.

### Input

| Field | Description |
|---|---|
| keyword | Full-text search, e.g. `groenonderhoud` (it can also match names inside notices) |
| cpvPrefix | CPV code prefix, e.g. `45` (construction), `72` (IT) |
| dateFrom / dateTo | Publication date range, `YYYY-MM-DD` |
| minValue / maxValue | Value in the notice currency (awarded value if present, otherwise estimated) |
| strictPrivacy | ON by default: winners without a recognised company legal form are dropped |
| maxItems | Max results (default 50) |

### Output (one item per notice)

`noticeId, country, title, titleEn, noticeType, procedureType, contractNature, publicationDate, tenderDeadline, buyer, buyerCity, buyerWebsite, cpvCodes, placeOfPerformance, estimatedValue, awardedValue, currency, winners, winnersRemovedAsIndividuals, noticeUrl, source, attribution`

### Privacy

We do not collect names, emails or phone numbers of contact persons, officers or jury members; only the buyer organisation and its website are kept. We **try to** remove winners who are natural persons or sole traders, but automatic detection may miss some names. With `strictPrivacy` on (default), any winner without a recognised company legal form is dropped. There is no per-person search or profiling. To object or request removal, contact us via the Actor's Issues tab.

### Fair use

Requests are made slowly (one page of 50 notices about every 1.5 s) through TED's public API. No websites are scraped.

### Licence and credit

Data: © European Union, TED notices reused under Decision 2011/833/EU; TED editorial content CC BY 4.0; not affiliated with TED. Please keep the `attribution` field when you republish data.

### Nederlands

Openbare aanbestedingen en gunningen in Nederland uit de openbare TED-API als schone JSON: aanbestedende dienst, onderwerp, CPV-codes, geraamde en gegunde waarde, termijnen, winnende bedrijven en link naar de aankondiging.

**Bron: TED (ted.europa.eu).** Onafhankelijke tool, geen officiële dienst van de EU, van het Publicatiebureau of van de Nederlandse overheid.

**Dekking:** alleen TED. Kleine aanbestedingen die alleen op TenderNed staan, kunnen ontbreken. Geen garantie op volledigheid.

**Privacy:** geen namen, e-mails of telefoonnummers van contactpersonen. We **proberen** winnaars te verwijderen die natuurlijke personen of eenmanszaken zijn; automatische herkenning kan namen missen en zoeken op trefwoord kan ook namen raken. Geen zoeken of profileren op persoon. Bezwaar of verwijdering: via het Issues-tabblad van de Actor.

# Actor input Schema

## `keyword` (type: `string`):

Full-text keyword in any language (e.g. 'groenonderhoud'). Note: full-text search can also match names inside notices.

## `cpvPrefix` (type: `string`):

Keep notices with a CPV code starting with this (e.g. '45' works, '72' IT).

## `dateFrom` (type: `string`):

Published from (YYYY-MM-DD).

## `dateTo` (type: `string`):

Published to (YYYY-MM-DD).

## `minValue` (type: `integer`):

Minimum value in the notice currency (awarded value if present, otherwise estimated).

## `maxValue` (type: `integer`):

Maximum value in the notice currency (awarded value if present, otherwise estimated).

## `maxItems` (type: `integer`):

Max items.

## `strictPrivacy` (type: `boolean`):

ON (default): drop any winner without a recognised company legal form. OFF: keep more companies, but some individuals may slip through.

## Actor input object example

```json
{
  "cpvPrefix": "45",
  "maxItems": 20,
  "strictPrivacy": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "cpvPrefix": "45",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("eudatadesk/netherlands-public-tenders").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "cpvPrefix": "45",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("eudatadesk/netherlands-public-tenders").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "cpvPrefix": "45",
  "maxItems": 20
}' |
apify call eudatadesk/netherlands-public-tenders --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,eudatadesk/netherlands-public-tenders"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/gNBUk7Dx8sHWuToKh/builds/fgXkX3BTkbeKGsxAn/openapi.json
