# EU Contract Award Intelligence - TED Winners & Values (`tiger19935/eu-contract-award-intelligence`) Actor

Who wins EU public contracts, and for how much? Contract award notices from TED with winner names, countries, contract values in EUR, number of bids, CPV sector presets and a mode that returns only new awards.

- **URL**: https://apify.com/tiger19935/eu-contract-award-intelligence.md
- **Developed by:** [Andrew Boiko](https://apify.com/tiger19935) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 contract awards

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/actors/running/actors-in-store.md#pay-per-event

## 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

## EU Contract Award Intelligence - TED Winners & Values

Who wins public contracts in the EU, and for how much? This Actor reads **contract award notices** from TED (Tenders Electronic Daily, the official EU procurement journal) and returns one clean dataset: winner names and countries, contract value in EUR, number of bids received, buyer, CPV category and a link to the notice.

Use it for competitor tracking, sales prospecting (companies that just won big contracts need suppliers), pricing benchmarks and market sizing.

### What you get

| Field | Meaning |
|---|---|
| `titleEn`, `title` | Contract title (English and original language) |
| `buyerName`, `buyerCountry`, `buyerCity` | Contracting authority |
| `winners[]`, `winnerNames`, `winnerCountries`, `winnerCount` | Winning companies (name, country, size class when published) |
| `awardValue`, `awardCurrency`, `awardValueEur` | Awarded value; EUR conversion uses official National Bank of Ukraine rates (`fxRateDate`) |
| `bidsReceived` | Number of tenders received, when published |
| `mainCpv`, `mainCpvLabelEn`, `cpv` | CPV category with English label |
| `procedureType`, `noticeType`, `contractNature` | Procedure details |
| `publishedAt`, `contractDate` | Publication date and contract conclusion date |
| `changeType` | `active`, `new` or `updated` (monitoring mode) |

The run summary (key-value store record `OUTPUT`) also contains **`topWinners`**: a ranking of the winners in your result by total awarded value (multi-winner notices split the value evenly).

### Filters

- **Sectors** (ready-made CPV groups, including EV charging) or your own **CPV codes**
- **Keywords** (full text, any of them)
- **Buyer countries** and **Winner countries** (3-letter ISO codes)
- **Winner name contains** - follow specific competitors or customers
- **Minimum contract value (EUR)**
- **Published within N days** and **Max awards**

### Monitoring

Set **Mode** to *New since last run* and schedule the Actor. Each run returns only awards that are new or changed (value, winners, bids) since the previous run with the same filters (or the same **Monitor name**).

### Pricing

Pay per result: one `award-record` event per award in the dataset (volume discounts for paid Apify plans). There is a small fixed start fee per run. You can cap spending with Apify's "maximum cost per run".

### Notes and limits

- Data comes from the public TED API. Not every award notice publishes winners or values; those fields are then empty (`winnerCount: 0`, `awardValueEur: null`) and a warning is added to the run summary.
- Value is the notice total when published, otherwise the sum of winning-tender values (only when all values share one currency).
- TED cannot filter by winner, so winner filters are applied after download; narrow other filters (sector, country, date) for large searches.
- Awards of Ukraine's Prozorro system are not included; use the "Prozorro & TED Tenders Scraper" Actor for Ukrainian tenders.

### Example input

```json
{
  "sectors": ["it"],
  "buyerCountries": ["POL", "DEU"],
  "minValueEur": 500000,
  "publishedWithinDays": 30,
  "maxItems": 100
}
```

### Run via API

Call the Actor from any language with a single HTTP request and get the dataset items in the response (replace `YOUR_API_TOKEN` with your Apify API token):

```bash
curl -X POST "https://api.apify.com/v2/acts/tiger19935~eu-contract-award-intelligence/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"sectors": ["it"], "publishedWithinDays": 30, "maxItems": 50}'
```

For long runs use the asynchronous `POST /v2/acts/tiger19935~eu-contract-award-intelligence/runs` endpoint and fetch the dataset when the run finishes.

# Changelog

This Actor's version history is a separate document: https://apify.com/tiger19935/eu-contract-award-intelligence/changelog.md

# Actor input Schema

## `sectors` (type: `array`):

Ready-made CPV groups. Combined with 'CPV codes' below. Leave both empty to get all sectors.

## `cpvPrefixes` (type: `array`):

Your own CPV codes or prefixes (2-8 digits). "45" = all construction, "4531" = electrical installation, "72000000" = IT services. Sub-codes are included automatically.

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

Optional full-text keywords (any of them matches), up to 10. Use the notice language for best results, e.g. "solar", "Ladeinfrastruktur".

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

3-letter ISO codes of the contracting authority's country, e.g. POL, DEU, FRA. Leave empty for all EU/EEA.

## `winnerCountries` (type: `array`):

Keep only awards won by a company from these countries (3-letter ISO codes). Leave empty for all.

## `winnerContains` (type: `array`):

Track competitors or customers: keep only awards where a winner's name contains any of these texts (case-insensitive), e.g. "Siemens", "Capgemini".

## `minValueEur` (type: `integer`):

Skip awards below this value (non-EUR values are converted with official National Bank of Ukraine rates). Awards without a published value are skipped when this is set.

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

Only award notices published in the last N days.

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

'All matching' returns every matching award. 'New since last run' returns only awards that are new or changed since the previous run with the same filters.

## `stateKey` (type: `string`):

Name for the monitoring memory, e.g. "it-poland". Runs with the same name share it. Leave empty to derive it from the filters. Letters, digits and '-' only.

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

Upper bound on awards returned (newest first).

## Actor input object example

```json
{
  "sectors": [
    "it"
  ],
  "cpvPrefixes": [],
  "keywords": [],
  "buyerCountries": [],
  "winnerCountries": [],
  "winnerContains": [],
  "publishedWithinDays": 30,
  "mode": "all",
  "maxItems": 50
}
```

# Actor output Schema

## `awards` (type: `string`):

Award notices found in this run, newest first.

## `summary` (type: `string`):

Totals, new/updated counts, ranking of top winners, exchange-rate source and warnings.

# 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 = {
    "sectors": [
        "it"
    ],
    "publishedWithinDays": 30,
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("tiger19935/eu-contract-award-intelligence").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 = {
    "sectors": ["it"],
    "publishedWithinDays": 30,
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("tiger19935/eu-contract-award-intelligence").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 '{
  "sectors": [
    "it"
  ],
  "publishedWithinDays": 30,
  "maxItems": 50
}' |
apify call tiger19935/eu-contract-award-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tiger19935/eu-contract-award-intelligence"
        }
    }
}
```

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/dFqnoqp2jWNk6oMiZ/builds/kd7Cg1ScxfoPZPFOH/openapi.json
