# EU TED Tenders: Public Procurement Notices (`pandadad0214/eu-ted-tenders`) Actor

Use this to search official EU TED (Tenders Electronic Daily) notices: title, publication date, buyer country, CPV, procedure/notice type, estimated value when present, and the TED HTML/PDF links. Filter by keyword, CPV, country and date. Excel export.

- **URL**: https://apify.com/pandadad0214/eu-ted-tenders.md
- **Developed by:** [Panda Federation](https://apify.com/pandadad0214) (community)
- **Categories:** Lead generation, Business, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 TED Tenders: Official Public Procurement Notices

**Use this to search official EU TED (Tenders Electronic Daily) notices from the public TED Search API v3.** Each row has the **title (English when published), publication date, buyer country, NUTS code, notice type, contract type, procedure, estimated or award value when present, buyer name, CPV codes, tender deadline, and TED HTML/PDF links**. Filter by **keyword, CPV, country and date**. **$0.002 per notice.**

**No scraping of ted.europa.eu: every row comes from the official TED API. No login and no API key.**

- 🇪🇺 **Official EU procurement notices** published in the Supplement to the Official Journal (OJ S)
- 🔎 **Keyword, CPV and country filters** (ISO-3 buyer country, e.g. DEU, FRA, ITA) plus a publication-date window
- 🏷️ **Notice type and contract type decoded** (contract notice vs award notice; works / supplies / services)
- 💶 **Estimated or award value when TED publishes one** (often missing — the cell stays empty)
- 📄 **Clickable TED HTML and PDF links** on every row
- 💸 **$0.002 per notice**; runs with no matches are free

### Who it's for

- **GovCon, capture and BD teams selling into Europe:** see what public buyers are tendering this week in your CPV
- **EU suppliers and SMEs:** watch contract notices in your country and sector without clicking through TED by hand
- **Consultants and researchers:** country and CPV snapshots, exported to Excel
- **AI agents:** ask “what IT services tenders were published in the EU this week?” and read `agentSummary`

> EU TED Tenders organizes public notices. It doesn't submit bids or replace the TED website: always confirm details on the notice page (link column) before you act.

Looking for **US federal contract awards and recompete leads** instead? Use [Federal Contract Finder](https://apify.com/pandadad0214/federal-contract-finder), the US counterpart.

### How to use it

1. Click **Try for free**.
2. Set **Published in the last N days** (or a date range). Empty input runs a demo: IT services (CPV `72000000`) from the last 7 days, 25 notices.
3. Optional: add **keywords**, **CPV codes** and **buyer countries** (ISO-3, e.g. `DEU`, or ISO-2 like `DE`).
4. Click **Start**. Download **TED_XLSX** or **TED_CSV** from **Storage → Key-value store**.

#### Input example

```json
{
  "daysBack": 7,
  "cpvCodes": ["72000000"],
  "maxResults": 25
}
```

### Task examples

- **IT services this week:** `{"daysBack": 7, "cpvCodes": ["72000000"]}`
- **Construction notices mentioning software:** `{"daysBack": 14, "cpvCodes": ["45000000"], "keywords": ["software"]}`
- **German buyer notices:** `{"daysBack": 7, "countries": ["DEU"]}`
- **Ireland and France, medical CPV:** `{"daysBack": 14, "cpvCodes": ["33000000"], "countries": ["IRL", "FRA"]}`

### Output example

A real row from the official TED API (IT services CPV `72000000`, published 2 November 2026). The title is the English (`TI.eng`) value.

```json
{
  "noticeId": "756398-2026",
  "title": "Latvia – Research and development services and related consultancy services – Publisko tīmekļvietņu un mobilo lietotņu piekļūstamības izvērtējums",
  "publicationDate": "2026-11-02",
  "countries": "LVA",
  "nuts": "LVA",
  "documentType": null,
  "noticeType": "can-standard",
  "noticeTypeLabel": "Contract award notice",
  "contractType": "services",
  "procedure": "open",
  "estimatedValue": "67000 EUR",
  "deadline": null,
  "buyerName": "Viedās administrācijas un reģionālās attīstības ministrija",
  "cpvCodes": "73000000; 72000000",
  "officialJournal": "212/2026",
  "noticeUrl": "https://ted.europa.eu/en/notice/-/detail/756398-2026",
  "pdfUrl": "https://ted.europa.eu/en/notice/756398-2026/pdf",
  "htmlUrl": "https://ted.europa.eu/en/notice/-/detail/756398-2026",
  "sourceUrl": "https://ted.europa.eu/en/notice/-/detail/756398-2026",
  "agentSummary": "Latvia – Research and development services and related consultancy services – Publisko tīmekļvietņu un mobilo lietotņu piekļūstamības izvērtējums (756398-2026): published 2026-11-02; LVA; Contract award notice, services; open procedure; 67000 EUR; buyer Viedās administrācijas un reģionālās attīstības ministrija; CPV 73000000; 72000000."
}
```

Names, dates and values above are real public records from TED. Project titles often stay in the original language even when the rest of the English title is translated.

#### Fields

| Field | What it is |
|---|---|
| `noticeId` | TED publication number (ND), e.g. `756398-2026` |
| `title` | Notice title, English (`TI.eng`) when TED publishes one |
| `publicationDate` | Date the notice appeared in TED (PD) |
| `countries` | Buyer country ISO-3 codes (CY) |
| `nuts` | Place-of-performance / NUTS codes (RC) when present |
| `noticeType` / `noticeTypeLabel` | eForms notice subtype (`cn-standard`, `can-standard`, …) and a plain-English label |
| `contractType` | Nature of the contract: works, supplies or services |
| `documentType` | Older TED document-type code (TD); often empty on eForms notices |
| `procedure` | Procedure type (`open`, `restricted`, …) |
| `estimatedValue` | Estimated or award value when TED publishes one (best-effort) |
| `deadline` | Deadline to receive tenders, when present |
| `buyerName` | Contracting authority, English when published |
| `cpvCodes` | Common Procurement Vocabulary codes |
| `noticeUrl`, `htmlUrl`, `pdfUrl` | Official TED notice page and language-specific HTML/PDF |
| `agentSummary` | One plain-English line per notice |

#### Files in the key-value store

| Key | What it is |
|---|---|
| `TED_XLSX` | Excel workbook: all notices with clickable TED links, a run log and a read-me sheet |
| `TED_CSV` | Same table as CSV (UTF-8, opens cleanly in Excel) |
| `SUMMARY` | JSON: your filters, counts, a one-line `takeaway` and `nextStep` |

### For AI agents

Use this Actor to answer “which official EU public procurement notices were published in the last N days for CPV X, keyword Y or country Z?”. Minimal input: `{"daysBack": 7, "cpvCodes": ["72000000"], "maxResults": 20}`.

- **MCP:** add this Actor to Claude, Cursor, Copilot or any MCP client through the [Apify MCP server](https://mcp.apify.com): `https://mcp.apify.com/?actors=pandadad0214/eu-ted-tenders`, then ask in plain English.
- **API:** `POST https://api.apify.com/v2/acts/pandadad0214~eu-ted-tenders/run-sync-get-dataset-items?token=YOUR_TOKEN` with the input JSON.
- Every row has an **`agentSummary`** line, and the **SUMMARY** record has a one-line **`takeaway`** plus `nextSteps`, so an agent can answer without parsing every field.
- Read `noticeUrl` to open the official TED page. Values are often missing — do not invent them.
- Schedule it (daily or weekly) in Apify and connect Zapier, Make, n8n, Slack, Google Sheets or a webhook to the dataset.

Suggested follow-on tools: [Federal Contract Finder](https://apify.com/pandadad0214/federal-contract-finder) for US awards, [Company Website Enricher](https://apify.com/pandadad0214/company-website-enricher) once you have a buyer or winner website, and [Company Team Finder](https://apify.com/pandadad0214/company-team-finder) for contacts.

### Pricing

**$0.002 per notice returned** (pay per event) plus Apify's tiny Actor-start fee of $0.00005. A filtered weekly list of 200 costs $0.40; 1,000 notices cost $2.00. Runs that return nothing cost nothing beyond the start fee, and failed source calls are never charged. Set **Maximum results** or Apify's *maximum charge per run* to cap any run; the Actor stops at your limit.

**Apify paid-plan discounts:** Bronze members pay 10% less ($0.0018), Silver 20% less ($0.0016) and Gold, Platinum and Diamond 30% less ($0.0014) per notice; the discount applies automatically. Apify's free plan includes monthly credit to try it.

### FAQ

**What is TED?** Tenders Electronic Daily is the official online version of the Supplement to the Official Journal of the EU. It publishes public procurement notices from EU institutions, member states and other participating countries.

**Do I need a TED login or API key?** No. The Actor queries the public TED Search API v3 (`https://api.ted.europa.eu/v3/notices/search`).

**Is this official data?** Yes. Every row comes from the TED API run by the Publications Office of the European Union. This Actor is not affiliated with or endorsed by the EU.

**Why is the title sometimes mixed-language?** TED stores titles in many languages (`TI` is a multilingual dictionary). The Actor prefers English (`TI.eng`) and otherwise uses the first language TED returns. The project name is often left in the original language.

**Why is the value empty?** Estimated values and award amounts are not published on every notice. When TED does not send TVL, tender-value or BT-161, `estimatedValue` stays empty.

**Which country filter does it use?** Buyer country (ISO-3) via the TED expert-search field `buyer-country`. Two-letter codes such as `DE` are converted to `DEU`. The returned `countries` column is TED's `CY` list.

**Does it scrape ted.europa.eu HTML?** No. HTML and PDF links are taken from the API `links` object.

### More Panda Federation tools

- [Federal Contract Finder](https://apify.com/pandadad0214/federal-contract-finder): US federal contract awards and recompete leads from USAspending.gov (the US counterpart to this Actor)
- [Company Website Enricher](https://apify.com/pandadad0214/company-website-enricher): emails, phones and tech from a company website
- [Company Team Finder](https://apify.com/pandadad0214/company-team-finder): decision-makers at a company
- [Grants Finder](https://apify.com/pandadad0214/grants-finder): US federal grant opportunities
- Full catalog and MCP server: [Panda Federation Tools on GitHub](https://github.com/pandadad0214/panda-federation-tools)

*Built by Panda Federation. Questions or a custom version? Open an issue on the Actor's Issues tab.*

### Changelog

- **2026-11-08:** First release (0.1.0): official TED Search API v3, daysBack / publication date range, keyword / CPV / buyer-country filters, English-preferring titles, notice and contract type, best-effort values, TED HTML/PDF links, Excel and CSV (`TED_XLSX` / `TED_CSV`), `agentSummary` and SUMMARY `takeaway`, pay-per-event pricing with Bronze/Silver/Gold discounts.

# Actor input Schema

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

Default 7. Searches publication-date >= today minus (N-1) days (UTC). Use 1 on a daily schedule. Ignored when Published from / Published to are set.

## `publishedFrom` (type: `string`):

Optional YYYY-MM-DD. Overrides days back for the start of the window.

## `publishedTo` (type: `string`):

Optional YYYY-MM-DD.

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

Full-text search. Each keyword becomes FT ~ "..." and they are joined with AND. Quotes are stripped. Example: software, cloud.

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

Common Procurement Vocabulary codes, e.g. 72000000 (IT services), 45000000 (construction), 33000000 (medical). Several codes are OR'd.

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

ISO-3 country codes, e.g. DEU, FRA, ITA, ESP, POL, NLD, BEL, IRL, SWE. Two-letter codes (DE, FR, IT) are converted. Filtered server-side with buyer-country.

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

You pay per notice returned, so this also caps the cost. Default 200; hard max 2000.

## Actor input object example

```json
{
  "daysBack": 7,
  "maxResults": 200
}
```

# Actor output Schema

## `table` (type: `string`):

No description

## `xlsx` (type: `string`):

No description

## `csv` (type: `string`):

No description

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

Agent-friendly keys: `takeaway` (one-line result), counts, `nextStep` and `nextSteps`.

# 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("pandadad0214/eu-ted-tenders").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("pandadad0214/eu-ted-tenders").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 '{}' |
apify call pandadad0214/eu-ted-tenders --silent --output-dataset

```

## MCP server setup

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

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/bfYMjFfb7TSIg9TI2/builds/QABJ6dpC0bbraA9LO/openapi.json
