# 🇪🇺 EU Tender & Procurement Scraper (TED API) (`automation_studio/eu-tender-procurement-scraper`) Actor

Real-time European public procurement contracts, government tenders, and RFPs across 27 EU nations via official TED API v3. Clean CPV sector filtering, values in EUR, and direct buyer inquiry emails.

- **URL**: https://apify.com/automation\_studio/eu-tender-procurement-scraper.md
- **Developed by:** [Automation Studio](https://apify.com/automation_studio) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 verified intelligence record leads

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 Government Tender & Procurement Contract Scraper (TED API)

> **Access Europe's multi-trillion Euro public procurement pipeline in real-time.** Automatically discover and extract high-value government tenders, RFPs, and contracts published across 27 EU member states and EEA nations via the official **European Commission Tenders Electronic Daily (TED) API v3**.

***

### ⚡ Why Use This Actor?

Every year, public authorities across the European Union publish over **€2 Trillion** worth of public procurement contracts on the TED portal. Winning just **one** public tender can transform a company's financial trajectory.

Commercial procurement intelligence platforms like Stotles, Tenderstream, and GovSpend charge **€3,000 to €20,000 per year** for access.

This Actor provides direct, unmetered programmatic access to official EU public tenders with zero vendor markups, zero scraping fragility, and instant alert capabilities.

#### 🌟 Key Unfair Advantages:

- **Official European Commission API v3**: Direct, stable connection to `https://api.ted.europa.eu/v3/notices/search`. No HTML scraping, zero IP bans, sub-second latency.
- **Curated Sector CPV Presets**: 1-click filtering across major commercial markets (IT/Software, Defense/Security, Healthcare/Pharma, Energy/Utilities, Construction, Consulting).
- **Valuation Filtering**: Focus exclusively on high-ticket tenders (e.g. filter for tenders > €500,000 or > €1,000,000).
- **Direct Buyer Contact Information**: Extract the purchasing authority's official contact email, department, and location to ask questions before the bidding window closes.
- **Deadline Countdown & Urgency Badging**: Automatically flags tenders closing in `< 7 days` (CRITICAL) or `< 14 days` (URGENT).
- **Instant Webhook Alerts**: Connect directly to your team's Slack or Discord channel for automated deal flow notifications.

***

### 🏛️ Supported Industry Sectors

| Sector Preset | CPV Codes | Example Contract Opportunities |
|---|---|---|
| 💻 **IT, Software, Cloud & AI** | `72000000`, `48000000` | Cloud migration, cybersecurity ops, SAP/Salesforce rollouts, custom software |
| 🛡️ **Defense, Tactical & Security** | `35000000` | Drone surveillance, border security systems, tactical gear, radar networks |
| 🏥 **Healthcare, Medical & Pharma** | `33000000`, `85000000` | Hospital imaging (MRI/CT), ICU monitors, pharmaceuticals, diagnostic kits |
| ⚡ **Renewable Energy & Utilities** | `09300000`, `65000000` | Solar farms, wind turbines, grid modernization, water treatment facilities |
| 🏗️ **Civil Infrastructure & Works** | `45000000`, `71200000` | Highway construction, railway engineering, bridge maintenance, public buildings |
| 📊 **Consulting & Legal Services** | `79000000` | Management consulting, statutory auditing, legal advisory, financial audits |
| 🚚 **Transport & Logistics** | `60000000`, `34000000` | Fleet vehicle electrification, municipal bus procurement, courier logistics |

***

### 📥 Input Parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `sectors` | `array` | `["IT_SOFTWARE", "DEFENSE_SECURITY"]` | Industry categories mapped to official EU CPV divisions |
| `customCpvCodes` | `string` | `null` | Optional comma-separated 8-digit CPV codes (e.g. `72260000, 35120000`) |
| `countries` | `array` | `[]` | Filter by EU buyer countries (e.g. `DEU`, `FRA`, `ITA`, `ESP`, `POL`, `NLD`) |
| `keywords` | `string` | `null` | Full-text search across tender title and specifications (e.g. `cybersecurity`) |
| `minContractValueEur`| `integer` | `0` | Minimum contract estimated valuation in € EUR (0 = all tenders) |
| `noticeTypes` | `array` | `["cn-standard", "pin-only"]` | Contract Notices (active RFPs) or Prior Information Notices (pre-tenders) |
| `daysBack` | `integer` | `14` | How many days back to search from today (1 to 90 days) |
| `maxResults` | `integer` | `50` | Maximum number of tenders to extract per run (up to 2,000) |
| `webhookUrl` | `string` | `null` | Optional Discord or Slack webhook URL for real-time tender alert cards |

***

### 📤 Sample Output Record

```json
{
  "publicationNumber": "522906-2024",
  "title": "Italy – Engineering services – Detailed feasibility and executive engineering design",
  "titleOriginal": "Affidamento dei servizi di ingegneria di progettazione di fattibilità tecnico economica",
  "description": "Engineering services for technical-economic feasibility study and hydraulic safety works...",
  "noticeType": "Contract Notice (Open RFP)",
  "publicationDate": "2024-09-02+02:00",
  "deadlineDate": "2024-09-23 12:00 UTC",
  "daysUntilDeadline": 21,
  "urgencyStatus": "🟢 ACTIVE (21d left)",
  "estimatedValueEur": 353942.65,
  "valueFormatted": "€353,943",
  "buyerName": "Comune di Foiano di Val Fortore",
  "buyerCountry": "ITA",
  "buyerCity": "Foiano di Val Fortore",
  "buyerEmail": "protocollo.foianovalfortore@asmepec.it",
  "sectorName": "Architectural, Engineering & Inspection Services",
  "primaryCpv": "71300000",
  "cpvCodes": ["71300000"],
  "contractNature": "services",
  "tenderUrl": "https://ted.europa.eu/en/notice/522906-2024/html",
  "tenderPdfUrl": "https://ted.europa.eu/en/notice/522906-2024/pdf",
  "procurementDocsUrl": "https://portaleappalti.comune.foiano.bn.it"
}
```

***

### 💰 Pricing & Monetization

- **Startup Fee**: $0.003
- **Per Tender Extracted**: $0.005

Extracting 100 high-value government RFPs costs just **$0.50** — a fraction of the cost of legacy RFP intelligence databases.

***

### 🎯 Pro Tip: Automated B2B Sales Workflow

1. Select your target sector (e.g. `IT_SOFTWARE`).
2. Add your Slack or Discord webhook in `webhookUrl`.
3. Set `daysBack: 1` and schedule the Actor to run every morning at 08:00 CET using Apify's built-in scheduler.
4. Your sales and bid management team will wake up to fresh, high-ticket government RFPs directly in your company communication channel!

# Actor input Schema

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

Select one or more major procurement sectors. Maps directly to official EU Common Procurement Vocabulary (CPV) divisions.

## `customCpvCodes` (type: `string`):

Optional comma-separated list of specific 8-digit CPV codes (e.g. `72260000, 35120000, 33111000`). If provided, these are queried alongside the selected sectors.

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

Optional keyword or phrase to search within tender titles and descriptions (e.g. `cybersecurity`, `cloud migration`, `ultrasound`, `solar farm`, `AI`).

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

Filter by EU Member State or partner country. Leave empty to include all countries across Europe.

## `noticeTypes` (type: `array`):

Select types of procurement notices to retrieve. 'Contract Notice' represents live bidding competitions.

## `minContractValueEur` (type: `integer`):

Filter out small contracts below this estimated valuation threshold in EUR. Set to 0 to include all tenders.

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

How many days back from today to search for published notices (1 = today only, 7 = past week, 14 = past two weeks, 30 = past month). Max: 90.

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

Maximum number of tender notices to retrieve and store in the dataset per run.

## `webhookUrl` (type: `string`):

Optional Discord, Slack, or webhook URL to receive instant alert cards with tender title, buyer name, value, and deadline.

## Actor input object example

```json
{
  "sectors": [
    "IT_SOFTWARE",
    "DEFENSE_SECURITY"
  ],
  "countries": [],
  "noticeTypes": [
    "cn-standard",
    "pin-only"
  ],
  "minContractValueEur": 0,
  "daysBack": 14,
  "maxResults": 50
}
```

# Actor output Schema

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

Dataset containing public procurement contracts, estimated values in EUR, buyer names, contact emails, CPV codes, and submission deadlines

# 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_SOFTWARE",
        "DEFENSE_SECURITY"
    ],
    "countries": [],
    "noticeTypes": [
        "cn-standard",
        "pin-only"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation_studio/eu-tender-procurement-scraper").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_SOFTWARE",
        "DEFENSE_SECURITY",
    ],
    "countries": [],
    "noticeTypes": [
        "cn-standard",
        "pin-only",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("automation_studio/eu-tender-procurement-scraper").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_SOFTWARE",
    "DEFENSE_SECURITY"
  ],
  "countries": [],
  "noticeTypes": [
    "cn-standard",
    "pin-only"
  ]
}' |
apify call automation_studio/eu-tender-procurement-scraper --silent --output-dataset

```

## MCP server setup

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

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/NyPBVxMs21wxFFN7S/builds/EmNWKvx44GDc64oNF/openapi.json
