# EU Contract Award Radar (TED) (`fetchwerk/eu-award-radar`) Actor

Track who wins EU public contracts. Scrape TED contract-award notices with winner, contract value and number of bidders. Filter by CPV, country, winner and minimum value. Normalized output + digest mode.

- **URL**: https://apify.com/fetchwerk/eu-award-radar.md
- **Developed by:** [Fetchwerk](https://apify.com/fetchwerk) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 award records

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 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 Contract Award Radar (TED)

This **EU contract award radar** tracks who wins European public contracts. It reads **contract-award notices** from **TED** (Tenders Electronic Daily, the official EU procurement journal) and returns, for every awarded contract, the **winner**, the **contract value**, the **number of bidders** and the buyer. Filter by CPV, country, winner name and minimum value. No API keys, no login, no personal-data scraping beyond the winners that the EU itself publishes.

### Tenders vs awards: this is the other side

Most tender scrapers show you **open calls** (opportunities to bid). This actor shows you the **results**: which company won, for how much, and against how many competitors. That makes it a sales-intelligence and market-research tool rather than a bid-finding tool.

- **Competitor tracking**: follow a specific company and see every public contract it wins across the EU.
- **Market sizing**: aggregate award values by CPV, country or buyer to see who spends what.
- **Lead signals**: a winner is a company that just secured budget and often needs subcontractors; a losing bidder is a buyer with proven demand.

Pairs cleanly with our EU Tenders Scraper (open calls) on the same TED source.

### What data does it return?

```json
{
  "id": "ted-award:449210-2026",
  "source": "ted-award",
  "title": "Poland - Laboratory, optical and precision equipment - Purchase and delivery of spectrometers",
  "buyer": "Uniwersytet Warszawski",
  "country": "POL",
  "cpv_codes": ["38000000", "38433000", "42300000"],
  "notice_type": "can-standard",
  "publication_date": "2026-07-01",
  "url": "https://ted.europa.eu/en/notice/-/detail/449210-2026",
  "winners": ["SHIM-POL A.M. Borzymowski", "SPECTRO-LAB Sp. z o.o", "VERDER POLSKA"],
  "winner_countries": ["POL"],
  "award_value": 310562.33,
  "currency": "PLN",
  "num_bids": 16
}
```

### How to use it

Example input, all fields optional:

```json
{
  "cpvCodes": ["72000000"],
  "buyerCountries": ["NLD", "DEU"],
  "winners": ["Accenture", "Capgemini"],
  "minValue": 100000,
  "daysBack": 30,
  "maxItems": 200,
  "mode": "digest"
}
```

- **cpvCodes**: CPV codes, filtered server-side on TED (e.g. 72000000 for IT services).
- **buyerCountries**: ISO-3 codes. Empty for all of the EU.
- **winners**: keep only awards won by a company whose name contains one of these. Ideal for competitor tracking.
- **minValue**: only awards at or above this contract value. Awards without a published value are dropped when this is set.
- **daysBack**: publication window, 1 to 90 days.
- **mode**: `search` returns the dataset; `digest` also writes a ready-to-send markdown summary (grouped by country, with winner and value) to the key-value store under the key `DIGEST`.

### Award monitoring and alerts

Run the actor on a weekly [schedule](https://docs.apify.com/platform/schedules) in `digest` mode and connect an Apify integration (Slack, email, webhook, Make, Zapier) to deliver the `DIGEST` wherever your team works. Set `winners` to your competitors to get a weekly "who won what" briefing.

### FAQ

**Is this allowed?**
Yes. TED is the official EU procurement journal and publishes contract-award notices, including winners and values, as open government data. This actor uses the public, documented TED Search API v3.

**Are winner names personal data?**
Winners are organizations. In the rare case a winner is a sole proprietor, the name is published by the EU itself in the official award notice. No private-individual data is added.

**How does pricing work?**
Pay per event: a small fee per returned award record, and a flat fee per generated digest. `maxItems` caps your cost per run.

**Can I combine it with open tenders?**
Yes. It shares TED as a source with our EU Tenders Scraper, so opportunities and awards line up on the same buyers and CPV codes.

### Related Fetchwerk actors

All Fetchwerk procurement actors share a normalized output schema, so you can merge them into one pipeline:

- **[EU Tenders Scraper](https://apify.com/fetchwerk/eu-tenders-scraper)**: the opportunities side. EU-wide open calls from TED plus Dutch tenders from TenderNed.
- **[German Tenders Scraper](https://apify.com/fetchwerk/de-tenders-scraper)**: German national and below-threshold tenders from the official oeffentlichevergabe.de service.
- **[UK Tenders Scraper](https://apify.com/fetchwerk/uk-tenders-scraper)**: UK public contracts from Find a Tender and Contracts Finder, which left TED after Brexit.

***

Built and operated by **Fetchwerk**.

# Actor input Schema

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

Case-insensitive match on title, buyer and winner names. Empty = no keyword filter.

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

CPV classification codes, e.g. 72000000 (IT services). Filtered server-side on TED.

## `buyerCountries` (type: `array`):

ISO-3 codes, e.g. NLD, DEU, BEL. Empty = all of the EU.

## `winners` (type: `array`):

Only keep awards won by a company whose name contains one of these (competitor tracking). Empty = all winners.

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

Only awards with a total value at or above this amount. Awards without a published value are dropped when set.

## `daysBack` (type: `integer`):

Only award notices published in the last N days.

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

Hard cap on returned awards (also caps your cost).

## `mode` (type: `string`):

search = dataset only; digest = dataset + markdown digest in key-value store (key DIGEST).

## Actor input object example

```json
{
  "keywords": [],
  "cpvCodes": [],
  "buyerCountries": [],
  "winners": [],
  "minValue": 0,
  "daysBack": 30,
  "maxItems": 200,
  "mode": "search"
}
```

# 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("fetchwerk/eu-award-radar").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("fetchwerk/eu-award-radar").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 fetchwerk/eu-award-radar --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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