# EU TED Tender Monitor & Procurement Data API (`koalastuff/eu-ted-tender-monitor`) Actor

Search official TED public procurement notices by keyword, country, CPV code, and date. Export normalized tender data for bid teams, research, automation.

- **URL**: https://apify.com/koalastuff/eu-ted-tender-monitor.md
- **Developed by:** [Timo Schmidt](https://apify.com/koalastuff) (community)
- **Categories:** Business, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 tender notices

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## EU TED Tender Monitor & Normalizer

Search official TED public procurement notices by keyword, country, CPV code, and date. Export normalized tender data for bid teams, research, automation.

This is an unofficial community Actor. It is not affiliated with or endorsed by the European Union Publications Office.

### Try this first

Start with the example input below to retrieve recent German notices. The normalized rows are written to the default dataset and can be exported as JSON, CSV, or Excel.

[![EU TED Tender Monitor & Normalizer icon](https://api.apify.com/v2/key-value-stores/JoHkELuyqjk6waZJX/records/icon-eu-ted-tender-monitor.png)](https://apify.com/koalastuff/eu-ted-tender-monitor)

#### Example output

[![Example output preview](https://api.apify.com/v2/key-value-stores/JoHkELuyqjk6waZJX/records/preview-eu-ted-tender-monitor.svg)](https://apify.com/koalastuff/eu-ted-tender-monitor)

This preview is generated from a checked-in official-source fixture. It shows the normalized output shape without inventing live demand or results.

### Use cases

- Monitor procurement opportunities by country and CPV category.
- Feed normalized tenders into CRM, BI, research, or automation workflows.
- Export multilingual notices into consistent JSON or CSV.
- Build scheduled alerts with Apify Tasks without maintaining TED field mappings.

### Input

| Field | Description | Default |
| --- | --- | --- |
| `keywords` | Full-text phrase | none |
| `countries` | Three-letter country codes | `DEU` |
| `cpvCodes` | Eight-digit codes or families such as `72*` | none |
| `publishedFrom`, `publishedTo` | Inclusive `YYYY-MM-DD` range | none |
| `expertQuery` | Optional raw TED expert query; overrides filters | none |
| `language` | Preferred notice title/link language | `eng` |
| `scope` | `ACTIVE`, `LATEST`, or `ALL` | `ACTIVE` |
| `maxResults` | Hard output and billing limit | `100` |
| `requestDelayMs` | Delay between API pages | `500` |

Example:

```json
{
  "keywords": "data platform",
  "countries": ["DEU", "FRA"],
  "cpvCodes": ["72*"],
  "publishedFrom": "2026-07-01",
  "language": "eng",
  "maxResults": 100
}
````

### Output

Each dataset row contains the publication number, localized title, buyers, publication date, tender deadlines, CPV codes, countries, notice/form type, normalized estimated lot-value sum where currencies are consistent, official TED links, and retrieval timestamp.

```json
{
  "id": "497792-2026",
  "title": "Lithuania – Biomedical equipment – Microbiological safety research equipment",
  "buyers": ["Example university"],
  "publicationDate": "2026-07-20",
  "deadlines": ["2026-08-25"],
  "cpvCodes": ["38434540"],
  "countries": ["LTU"],
  "estimatedValue": 38825,
  "currency": "EUR",
  "url": "https://ted.europa.eu/en/notice/-/detail/497792-2026",
  "source": "TED"
}
```

### Reliability and limits

- HTTP API only; no browser or proxy.
- Maximum 250 notices per TED page and 10,000 Actor results.
- One request at a time with configurable delay and three bounded retries.
- Deduplication uses the TED publication number.
- Missing IDs are rejected; empty result sets fail explicitly.
- TED can omit fields for some notices. Arrays preserve lot-level coverage where practical.
- Estimated values are summed only when all returned lots use one currency.

### Pricing

Pay per event:

- Actor start: USD 0.00005
- Normalized dataset item: USD 0.001

A two-result Apify smoke run on 256 MB used USD 0.0000988564 of platform resources and completed in 3.665 seconds. No browser, proxy, paid API, or external subscription is required. The user's configured maximum charge per run remains the hard billing limit.

### Data source and rights

Source: <https://api.ted.europa.eu/v3/notices/search>. TED documents the Search API for analysis and reuse of published procurement notices. Users remain responsible for their downstream use and any personal data present in official notices.

### Support

Report reproducible problems with the input, run link, expected field, and affected TED publication number. Do not include credentials or private procurement documents.

### Related Actors

- [EU Funding Call Monitor](https://apify.com/koalastuff/eu-funding-call-monitor) for grants, prizes, and cascade-funding opportunities.
- [World Bank WDI Indicator Explorer](https://apify.com/koalastuff/world-bank-wdi-explorer) for country and market-context data.

# Actor input Schema

## `keywords` (type: `string`):

Full-text phrase, for example data platform or solar panels.

## `countries` (type: `array`):

Three-letter TED/ISO country codes such as DEU, FRA, or ESP.

## `cpvCodes` (type: `array`):

Eight-digit CPV codes or two-digit families such as 72\*.

## `publishedFrom` (type: `string`):

Inclusive publication date in YYYY-MM-DD format.

## `publishedTo` (type: `string`):

Inclusive publication date in YYYY-MM-DD format.

## `expertQuery` (type: `string`):

Optional raw TED expert query. When set, the filter fields above are ignored.

## `language` (type: `string`):

Language used for localized notice titles and official TED links when available.

## `scope` (type: `string`):

ACTIVE returns open opportunities, LATEST the latest OJ S release, and ALL all matching notices.

## `maxResults` (type: `integer`):

Hard result and billing limit.

## `requestDelayMs` (type: `integer`):

Conservative delay in milliseconds between TED API pages.

## Actor input object example

```json
{
  "countries": [
    "DEU"
  ],
  "language": "eng",
  "scope": "ACTIVE",
  "maxResults": 100,
  "requestDelayMs": 500
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("koalastuff/eu-ted-tender-monitor").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("koalastuff/eu-ted-tender-monitor").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{}' |
apify call koalastuff/eu-ted-tender-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=koalastuff/eu-ted-tender-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "EU TED Tender Monitor & Procurement Data API",
        "description": "Search official TED public procurement notices by keyword, country, CPV code, and date. Export normalized tender data for bid teams, research, automation.",
        "version": "0.1",
        "x-build-id": "e3HdUFLZSCK0NzvC3"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/koalastuff~eu-ted-tender-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-koalastuff-eu-ted-tender-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/koalastuff~eu-ted-tender-monitor/runs": {
            "post": {
                "operationId": "runs-sync-koalastuff-eu-ted-tender-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/koalastuff~eu-ted-tender-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-koalastuff-eu-ted-tender-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "keywords": {
                        "title": "Keywords",
                        "maxLength": 200,
                        "type": "string",
                        "description": "Full-text phrase, for example data platform or solar panels."
                    },
                    "countries": {
                        "title": "Countries of performance",
                        "maxItems": 20,
                        "type": "array",
                        "description": "Three-letter TED/ISO country codes such as DEU, FRA, or ESP.",
                        "items": {
                            "type": "string",
                            "pattern": "^[A-Za-z]{3}$"
                        },
                        "default": [
                            "DEU"
                        ]
                    },
                    "cpvCodes": {
                        "title": "CPV codes",
                        "maxItems": 20,
                        "type": "array",
                        "description": "Eight-digit CPV codes or two-digit families such as 72*.",
                        "items": {
                            "type": "string",
                            "pattern": "^(?:[0-9]{2}\\*|[0-9]{8})$"
                        }
                    },
                    "publishedFrom": {
                        "title": "Published from",
                        "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
                        "type": "string",
                        "description": "Inclusive publication date in YYYY-MM-DD format."
                    },
                    "publishedTo": {
                        "title": "Published to",
                        "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
                        "type": "string",
                        "description": "Inclusive publication date in YYYY-MM-DD format."
                    },
                    "expertQuery": {
                        "title": "TED expert query",
                        "maxLength": 2000,
                        "type": "string",
                        "description": "Optional raw TED expert query. When set, the filter fields above are ignored."
                    },
                    "language": {
                        "title": "Preferred output language",
                        "enum": [
                            "eng",
                            "deu",
                            "fra",
                            "spa",
                            "ita",
                            "nld",
                            "pol",
                            "por",
                            "swe"
                        ],
                        "type": "string",
                        "description": "Language used for localized notice titles and official TED links when available.",
                        "default": "eng"
                    },
                    "scope": {
                        "title": "Search scope",
                        "enum": [
                            "ACTIVE",
                            "LATEST",
                            "ALL"
                        ],
                        "type": "string",
                        "description": "ACTIVE returns open opportunities, LATEST the latest OJ S release, and ALL all matching notices.",
                        "default": "ACTIVE"
                    },
                    "maxResults": {
                        "title": "Maximum results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Hard result and billing limit.",
                        "default": 100
                    },
                    "requestDelayMs": {
                        "title": "Delay between API pages",
                        "minimum": 0,
                        "maximum": 60000,
                        "type": "integer",
                        "description": "Conservative delay in milliseconds between TED API pages.",
                        "default": 500
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
