# EU TED Tender Monitor: Notices and Awards (`getascraper/eu-ted-tender-monitor`) Actor

Monitor official TED procurement notices and contract awards by country, keyword, or CPV code. Get source-linked NEW and CHANGED records for scheduled bid-intelligence workflows in Apify, n8n, Google Sheets, or procurement tools.

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

## Pricing

from $0.40 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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: Notices and Awards

<table width="100%" style="display:table;width:100%;border-collapse:collapse"><tr><td style="padding:24px 28px;background:#EFF6FF;border:1px solid #BFDBFE;border-top:4px solid #1E3A8A;border-radius:12px"><span style="font-size:23px;font-weight:800;color:#172554;line-height:1.3">See the procurement notices that match your bid strategy.</span><br><span style="font-size:15px;color:#334155;line-height:1.6">Watch public TED notices and awards by country, keyword, or CPV code. Keep the official source beside every result.</span></td></tr></table>

<table width="100%" style="display:table;width:100%;border-collapse:collapse;table-layout:fixed"><tr><td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFDBFE;border-radius:10px 0 0 10px;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#172554">🎯 Focused scope</span><br><span style="font-size:12px;color:#334155">Filter by country, title, or CPV code.</span></td><td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFDBFE;border-left:none;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#172554">🔔 Meaningful changes</span><br><span style="font-size:12px;color:#334155">Keep new and changed notices in view.</span></td><td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFDBFE;border-left:none;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#172554">🔗 Official evidence</span><br><span style="font-size:12px;color:#334155">Open the published TED notice from each row.</span></td><td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFDBFE;border-left:none;border-radius:0 10px 10px 0;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#172554">📅 Ready to repeat</span><br><span style="font-size:12px;color:#334155">Reuse one scope for recurring bid research.</span></td></tr></table>

Monitor official EU procurement notices and contract awards by country, title keyword, or CPV code. Use it to build a source-linked opportunity feed without manually revisiting TED.

### 🎯 What it does

The Actor reads public TED notice data and returns current records or only records that are new or changed since a complete earlier run. Every result keeps the official notice link so your team can review the original source.

### 👥 Who it is for

- Bid and procurement teams watching relevant public opportunities.
- Consultants building a repeatable tender research workflow.
- Data teams adding public procurement signals to a database or dashboard.

### ⚙️ How it works

<table width="100%" style="display:table;width:100%;border-collapse:collapse;table-layout:fixed"><tr><td style="padding:16px 14px;width:33%;background:#EFF6FF;border:1px solid #BFDBFE;border-radius:10px 0 0 10px;vertical-align:top"><span style="font-size:12px;font-weight:800;color:#1E3A8A;letter-spacing:1px">STEP 1</span><br><span style="font-size:14px;font-weight:700;color:#172554">Set your scope</span><br><span style="font-size:12px;color:#334155">Choose countries, keywords, or CPV codes.</span></td><td style="padding:16px 14px;width:33%;background:#EFF6FF;border:1px solid #BFDBFE;border-left:none;vertical-align:top"><span style="font-size:12px;font-weight:800;color:#1E3A8A;letter-spacing:1px">STEP 2</span><br><span style="font-size:14px;font-weight:700;color:#172554">Choose the window</span><br><span style="font-size:12px;color:#334155">Set dates and a practical record limit.</span></td><td style="padding:16px 14px;width:33%;background:#EFF6FF;border:1px solid #BFDBFE;border-left:none;border-radius:0 10px 10px 0;vertical-align:top"><span style="font-size:12px;font-weight:800;color:#1E3A8A;letter-spacing:1px">STEP 3</span><br><span style="font-size:14px;font-weight:700;color:#172554">Keep watch</span><br><span style="font-size:12px;color:#334155">Schedule the same scope for change-only output.</span></td></tr></table>

### 🧾 Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| Buyer countries | Array | No | TED three-letter buyer country codes. Leave empty to search all countries. |
| Title keywords | Array | No | Words that must appear in the notice title. |
| CPV codes | Array | No | Four to eight digit procurement classification codes. |
| Publication date from | Date | No | Earliest publication date. When empty, the recent publication window is used. |
| Recent publication window | Number | No | Number of recent days to search when no start date is set. |
| Return new and changed notices only | Boolean | No | Omits unchanged records after a complete baseline run. |
| Maximum records | Number | No | Caps returned records. A capped scope does not update the saved comparison state. |

### 📊 Output

| Field | Type | Description |
| --- | --- | --- |
| changeType | String | `CURRENT`, `NEW`, or `CHANGED` for the returned notice. |
| publicationNumber | String | Official TED publication number. |
| title | String | Published notice title. |
| buyer | String | Published buyer name. |
| tenderDeadline | String | Published tender deadline when available. |
| cpvCodes | Array | Published CPV classifications. |
| officialNoticeUrl | URL | Link to the official TED notice. |

### 💡 Good to know

- Use the same filters on scheduled change-only runs. A different scope has a different baseline.
- A first complete change-only run creates the baseline and returns `NEW` records.
- Missing source fields remain empty rather than being guessed.

### 💰 Pricing

This Actor uses pay per result. Empty runs do not create result charges. Choose a small, focused scope first so the returned notices match your workflow.

### ⭐ Enjoying EU TED Tender Monitor?

<table width="100%" style="display:table;width:100%;border-collapse:collapse"><tr><td style="padding:20px 24px 14px;background:#EFF6FF;border:1px solid #BFDBFE;border-left:5px solid #1E3A8A;border-radius:10px 10px 0 0"><span style="font-size:20px;letter-spacing:4px;color:#B45309">⭐ ⭐ ⭐ ⭐ ⭐</span><br><span style="font-size:17px;font-weight:800;color:#172554">A clear tender feed can save your team from repetitive portal checks.</span><br><span style="font-size:14px;color:#334155">A 5-star rating helps other bid and procurement teams find a focused TED monitor. Your feedback guides future improvements.</span></td></tr><tr><td style="padding:0;background:#1E3A8A;border:1px solid #BFDBFE;border-top:none;border-radius:0 0 10px 10px;text-align:center"><a href="https://apify.com/getascraper/eu-ted-tender-monitor/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a></td></tr></table>

### ❓ FAQ

**Does it search every procurement portal?** No. It searches the public TED data source only.

**Can I use it for contract awards?** Yes. Returned notice data includes published award information when TED provides it.

**Why did a capped run not update my watchlist?** A partial scope cannot safely confirm what changed, so it does not replace the saved baseline.

**Can I schedule it?** Yes. Run the same scope on an Apify schedule to maintain a change feed.

### 🔗 Other actors

- [Bahrain Tender Board Scraper](https://github.com/Devansh-365/actorstack/tree/main/actors/bahrain-tender-board-scraper)
- [SAM.gov Contract Monitor](https://github.com/Devansh-365/actorstack/tree/main/actors/sam-gov-contract-monitor)
- [Construction Permit Lead Monitor](https://github.com/Devansh-365/actorstack/tree/main/actors/construction-permit-lead-monitor)
- [England Planning Application Monitor](https://github.com/Devansh-365/actorstack/tree/main/actors/england-planning-application-monitor)

# Actor input Schema

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

TED three-letter buyer country codes to monitor. Leave empty to search all TED buyer countries.

## `keywords` (type: `array`):

Words that must appear in the TED notice title. Leave empty to rely on the other filters.

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

CPV classification codes to match. Use 4 to 8 digits per code.

## `publicationDateFrom` (type: `string`):

Optional earliest publication date. Leave blank to use the recent-days setting.

## `publicationDateTo` (type: `string`):

Optional latest publication date. Leave blank to include notices through the current day.

## `publishedWithinDays` (type: `integer`):

Number of recent days to search when no starting publication date is set.

## `changesOnly` (type: `boolean`):

Emit a NEW baseline on the first complete run, then omit unchanged notice records on later complete runs.

## `maxRecords` (type: `integer`):

Cap the returned notice records. A cap that cuts off the requested scope is reported and does not update monitor state.

## Actor input object example

```json
{
  "countries": [
    "LUX"
  ],
  "keywords": [],
  "cpvCodes": [],
  "publicationDateFrom": "",
  "publicationDateTo": "",
  "publishedWithinDays": 7,
  "changesOnly": false,
  "maxRecords": 10
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

## `monitorState` (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 = {
    "countries": [
        "LUX"
    ],
    "keywords": [],
    "cpvCodes": [],
    "publicationDateFrom": "",
    "publicationDateTo": "",
    "publishedWithinDays": 7,
    "changesOnly": false,
    "maxRecords": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/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 = {
    "countries": ["LUX"],
    "keywords": [],
    "cpvCodes": [],
    "publicationDateFrom": "",
    "publicationDateTo": "",
    "publishedWithinDays": 7,
    "changesOnly": False,
    "maxRecords": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/eu-ted-tender-monitor").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 '{
  "countries": [
    "LUX"
  ],
  "keywords": [],
  "cpvCodes": [],
  "publicationDateFrom": "",
  "publicationDateTo": "",
  "publishedWithinDays": 7,
  "changesOnly": false,
  "maxRecords": 10
}' |
apify call getascraper/eu-ted-tender-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/eu-ted-tender-monitor"
        }
    }
}

```

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/vA00B5co2w6naY0vJ/builds/9HFpHjf3xlXCr9H30/openapi.json
