# EU TED Tenders & Public Procurement Scraper (`scrapers_lat/eu-ted-tenders-scraper`) Actor

Extract EU public procurement notices from TED (Tenders Electronic Daily). Get notice title, buyer name and country, winning supplier, contract value, CPV codes, deadline and place across 27 EU states plus EEA and UK. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/eu-ted-tenders-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Business, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $2.00 / 1,000 results

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 Tenders & Public Procurement Scraper](https://scrapers.lat/banners/eu-ted-tenders-scraper.png)](https://console.apify.com/actors/0etBIng4xLlYRu5jz/input)

## EU TED Tenders & Public Procurement Scraper

> The most complete EU tenders scraper. Extract public procurement notices from TED (Tenders Electronic Daily), the official journal of EU public contracts covering 30+ countries, with buyer contact details, full scope description, CPV codes, estimated and awarded values, winning suppliers and NUTS regions.

**📥 [Input](https://apify.com/scrapers_lat/eu-ted-tenders-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/eu-ted-tenders-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/eu-ted-tenders-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/eu-ted-tenders-scraper/examples)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-EU%2027%20%2B%20EEA%20%2B%20UK-blue)
![Maintained](https://img.shields.io/badge/Maintained-Yes-brightgreen)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)

<table><tr>
<td align="center"><strong>38 fields</strong><br>per notice</td>
<td align="center"><strong>32 countries</strong><br>coverage</td>
<td align="center"><strong>JSON / CSV / Excel</strong><br>output formats</td>
</tr></table>

<br>

### What you get per notice

Every notice is returned as a flat record with up to 38 fields, far more than the title-and-value dumps most tools give you:

| Group | Fields |
|---|---|
| **Notice** | title, full scope description, notice number, TED URL, PDF URL, XML URL, notice type, procedure type, language, publication date, dispatch date |
| **Buyer (contracting authority)** | buyer name, email, phone, website, city, postcode, country, main activity |
| **Classification** | main CPV codes, additional CPV codes, contract nature (works, supplies or services), place of performance, NUTS region codes |
| **Money** | estimated value and currency, awarded / total value and currency |
| **Deadline** | submission deadline, days until deadline (still biddable at a glance) |
| **Award result** | winning supplier name, city, country, email, company size, award date, number of offers received |

Buyer email and phone turn every tender into a sales lead. The estimated-versus-awarded value split and the number of offers received let you benchmark competition and pricing. NUTS region codes, which most competitors do not expose, let you target a specific region rather than a whole country.

### Who is it for

| Use case | Who benefits |
|---|---|
| Find live tenders to bid on by country and CPV | Companies selling to the public sector |
| Track who wins contracts and at what value | Market and competitor analysts |
| Build supplier and buyer lead lists | Sales and business development teams |
| Monitor public spending and procurement trends | Journalists, researchers, NGOs |
| Feed tender data into a bid-management tool | GovTech and SaaS builders |

### Frequently Asked Questions

**Which countries and notices does TED cover?**
TED is the EU's official procurement journal. It publishes notices from all 27 EU member states plus the EEA (Norway, Iceland, Liechtenstein), Switzerland and others, covering contract notices, prior information notices, contract award notices and design contests above the EU thresholds.

**How many notices can I collect in one run?**
There is no fixed cap. TED publishes thousands of notices per day, and the scraper pages through every match for your filters up to the Max Items you set. Use a tight publication-date window to keep large runs fast.

**Can I filter by country, sector or tender type?**
Yes. You can filter by buyer country, by CPV code (the EU sector classification, for example 45000000 for construction or 72000000 for IT), by NUTS region code, by contract nature (works, supplies or services), by notice type and by procedure type. You can also set a minimum and maximum contract value, search by buyer name, add a free-text keyword search, and switch on Only Open Deadlines to return just the tenders you can still bid on. Advanced users can pass a raw TED expert query.

**Do I get the buyer contact details?**
Yes, when the notice discloses them. Each record includes the buyer email, phone, website, city and postcode alongside the buyer name and country, so you can turn tenders into a contactable sales pipeline. On award notices you also get the winning supplier name, city, country, email and company size, the award date and the number of offers received.

**Why is the value, deadline or contact empty on some notices?**
Not every notice discloses every field. Prior information notices and many award notices leave the estimated value, deadline or contact blank at the source, so the scraper returns them empty rather than guessing. Where a value exists it is reported as the estimated (budget) value before award and the awarded (total) value after award, in the original currency.

**What date format and codes does the scraper expect?**
Dates use YYYY-MM-DD. Countries use ISO three-letter codes shown in the dropdown, and CPV codes are the standard eight-digit EU procurement codes entered comma-separated.

### Example use cases

Ready-to-run example tasks, each preconfigured for a common scenario. Open one and press run, or use it as a template:

- [Spain Solar & Renewable Energy Tenders Scraper](https://apify.com/scrapers_lat/eu-ted-tenders-scraper/examples/spain-solar-renewable-energy-tenders): Spain Solar & Renewable Energy Tenders Scraper
- [Poland Road Construction Tenders Scraper](https://apify.com/scrapers_lat/eu-ted-tenders-scraper/examples/poland-road-construction-tenders): Poland Road Construction Tenders Scraper
- [Netherlands Medical Equipment Tenders Scraper](https://apify.com/scrapers_lat/eu-ted-tenders-scraper/examples/netherlands-medical-equipment-tenders): Netherlands Medical Equipment Tenders Scraper
- [Sweden Cloud & IT Services Tenders Scraper](https://apify.com/scrapers_lat/eu-ted-tenders-scraper/examples/sweden-cloud-it-services-tenders): Sweden Cloud & IT Services Tenders Scraper
- [Belgium Pharmaceutical Supply Tenders Scraper](https://apify.com/scrapers_lat/eu-ted-tenders-scraper/examples/belgium-pharmaceutical-supply-tenders): Belgium Pharmaceutical Supply Tenders Scraper
- [Portugal Water Treatment Tenders Scraper](https://apify.com/scrapers_lat/eu-ted-tenders-scraper/examples/portugal-water-treatment-tenders): Portugal Water Treatment Tenders Scraper
- [Ireland Catering Services Tenders Scraper](https://apify.com/scrapers_lat/eu-ted-tenders-scraper/examples/ireland-catering-services-tenders): Ireland Catering Services Tenders Scraper
- [Germany Railway Construction Tenders Scraper](https://apify.com/scrapers_lat/eu-ted-tenders-scraper/examples/eu-ted-tenders-scraper-germany-railway-tenders): Germany Railway Construction Tenders Scraper
- [Italy Waste Management Tenders Scraper](https://apify.com/scrapers_lat/eu-ted-tenders-scraper/examples/eu-ted-tenders-scraper-italy-waste-management-tenders): Italy Waste Management Tenders Scraper
- [Denmark Wind Energy Tenders Scraper](https://apify.com/scrapers_lat/eu-ted-tenders-scraper/examples/eu-ted-tenders-scraper-denmark-wind-energy-tenders): Denmark Wind Energy Tenders Scraper

### Export, API and AI agents (x402 + MCP)

Export the scraped data to **JSON, CSV or Excel**, pull it as a **dataset** through the Apify **API**, or wire it into your app with **no code**. This web scraper and data extractor also works for bulk data extraction and scheduled runs.

For AI agents: this Actor is available on **x402**, Apify's agentic payment standard built with Coinbase. An AI agent can discover, pay for and run it on its own with a funded wallet and a single HTTP request: no account, no subscription, no API key and no human in the loop. It also runs as an **MCP** tool inside Claude, Cursor and other AI clients out of the box. Learn more about [x402 agentic payments on Apify](https://docs.apify.com/platform/integrations/x402).

### Related scrapers

Need data from the same space? Here are other scrapers we build and maintain:

- [Colombia SECOP Scraper](https://apify.com/scrapers_lat/colombia-secop-scraper): Public procurement contracts from Colombia's official SECOP open-data portal.
- [Grants.gov Opportunity Scraper](https://apify.com/scrapers_lat/grants-gov-scraper): US federal grant and funding opportunities with deadlines and award amounts.
- [Federal Register Document Scraper](https://apify.com/scrapers_lat/federal-register-scraper): US government rules, notices and proposed regulations from the Federal Register.
- [DOF Mexico Official Gazette Scraper](https://apify.com/scrapers_lat/dof-scraper): Official notices and legal publications from Mexico's Diario Oficial de la Federacion.
- [DataJud Brazil Court Case Scraper](https://apify.com/scrapers_lat/datajud-scraper): Brazilian court case records from the CNJ DataJud public database.
- [BizQuest Businesses-for-Sale Scraper](https://apify.com/scrapers_lat/bizquest-scraper): Businesses and franchises listed for sale with asking price and financials.

### More scrapers at scrapers.lat

This actor is built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for Latin American and US public platforms: real estate, jobs, e-commerce, company registries and government data. Browse the full catalog, see live sample output for each one, or ask us for a custom scraper at [scrapers.lat](https://scrapers.lat).

***

> This actor is an independent tool and has no affiliation with TED or the European Union. It only accesses data that is publicly available through the official TED Search API. Use it in accordance with TED's terms of service.

# Actor input Schema

## `maxTenders` (type: `integer`):

Maximum number of procurement notices (tenders) to collect across all matching filters. Optional.

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

Only include notices published on or after this date, format YYYY-MM-DD, for example '2026-06-01'. If left empty, the scraper defaults to the last 7 days.

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

Only include notices published on or before this date, format YYYY-MM-DD, for example '2026-06-27'. If left empty, the scraper uses today.

## `buyerCountry` (type: `array`):

Filter by the country of the contracting authority (buyer). Select one or more EU, EEA or partner countries. Leave empty for all countries.

## `cpvCodes` (type: `string`):

Filter by Common Procurement Vocabulary (CPV) codes, comma-separated, for example '45000000, 72000000'. 45000000 is construction work, 72000000 is IT services, 33000000 is medical equipment, 79000000 is business services.

## `noticeType` (type: `array`):

Filter by the type of notice. Leave empty for all types.

## `procedureType` (type: `array`):

Filter by the procurement procedure type. Leave empty for all procedures.

## `contractNature` (type: `array`):

Filter by what the contract is for: works (construction), supplies (goods) or services. Leave empty for all.

## `nutsCodes` (type: `string`):

Filter by place-of-performance NUTS region code, comma-separated, for example 'DE21, FR101, PL911'. NUTS codes target a specific region rather than a whole country. Optional.

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

Only include notices whose estimated or awarded contract value is at least this amount (in the notice currency). Optional.

## `maxValue` (type: `integer`):

Only include notices whose estimated or awarded contract value is at most this amount (in the notice currency). Optional.

## `onlyOpenDeadlines` (type: `boolean`):

When on, only return notices whose tender submission deadline is today or in the future, so you see contracts you can still bid on.

## `buyerNameSearch` (type: `string`):

Only include notices whose contracting authority (buyer) name contains this text, for example 'University' or 'Ministry of Health'. Optional.

## `freeText` (type: `string`):

Full-text keyword search across the notice content (title, description, buyer, supplier), for example 'solar panels' or 'hospital catering'. Optional.

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

Advanced: provide a full TED expert search query and it overrides all the filters above, for example 'buyer-country IN (DEU) AND classification-cpv IN (45000000) AND publication-date>=20260101'. Leave empty to use the filters above.

## Actor input object example

```json
{
  "maxTenders": 10,
  "onlyOpenDeadlines": false
}
```

# 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 = {
    "maxTenders": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/eu-ted-tenders-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 = { "maxTenders": 10 }

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/eu-ted-tenders-scraper").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 '{
  "maxTenders": 10
}' |
apify call scrapers_lat/eu-ted-tenders-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/0etBIng4xLlYRu5jz/builds/jzMAtTQTUaKbpEGCt/openapi.json
