# EU TED Tenders — Public Procurement Notice Scraper (`foxlabs/ted-tenders`) Actor

Fetches structured public procurement notices from the official EU TED (Tenders Electronic Daily) API. Filter by country, CPV code, date, value, and notice type. Free, unauthenticated API; clean JSON output ready for CRM/dashboard ingestion.

- **URL**: https://apify.com/foxlabs/ted-tenders.md
- **Developed by:** [Berkan Kaplan](https://apify.com/foxlabs) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 7 total users, 5 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $4.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.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

<p align="center"><a href="https://apify.com/foxlabs/ted-tenders"><img src="https://data.foxlabs.com.tr/img/ted-tenders-banner.svg" alt="EU TED Tenders Scraper — Public Procurement, Government Contracts" width="100%" /></a></p>

<p align="center"><img alt="EU" src="https://img.shields.io/badge/EU-Public%20Procurement-2563EB?style=for-the-badge" />&nbsp;<img alt="Data" src="https://img.shields.io/badge/RFPs%20%7C%20Buyers%20%7C%20Values-3B82F6?style=for-the-badge" />&nbsp;<img alt="Contracts" src="https://img.shields.io/badge/Government-Contracts-FBBF24?style=for-the-badge" />&nbsp;<img alt="Pricing" src="https://img.shields.io/badge/Pay--as--you--go-6366F1?style=for-the-badge" /></p>

## EU TED Tenders Scraper — Public Procurement Notices, Government Contracts, RFP & Bid Data

> **Also known as**: EU tender alerts feed · government contract scraper · public procurement API · B2G lead generation · contract award notice (CAN) monitor · RFP intelligence · EU bid data export.

### What does EU TED Tenders do?

**EU TED Tenders Scraper** fetches structured public procurement notices — tenders, contract notices, contract award notices (CAN), prior information notices (PIN) — from the official **TED (Tenders Electronic Daily)** API run by the European Union Publications Office. It outputs clean JSON rows for every notice matching your filters — country, CPV code, date range, notice type, value — ready to be loaded into a CRM, dashboard, Slack alert, lead-generation pipeline, or LLM context.

TED is the single source of truth for public contracts published by EU member states above the EU thresholds. Every business that sells to government in the EU (B2G — business-to-government) — IT services, construction, consulting, healthcare suppliers, defense contractors — needs this data. This Actor turns the official but gnarly XML/JSON API into a flat dataset you can ingest in seconds. Use it as your **EU tender alert feed**, your **government contract scraper**, or your **public-sector RFP intelligence layer**. Try it from the [Apify Console](https://console.apify.com), schedule daily runs, hit the API, or pipe into Make/Zapier/n8n/Power Automate.

### Quick start — 3 copy-paste recipes

Open the Actor's **Input** tab in Apify Console, switch to **JSON / Editor**, paste one of these, and click **Start**.

**1) This week's IT tenders in Germany** (~$0.10-0.40)
```json
{
  "datePreset": "last_7_days",
  "countries": ["DEU"],
  "cpvCodes": ["72000000"],
  "maxResults": 100,
  "language": "ENG"
}
````

**2) Last month's healthcare tenders across the EU** (~$2-4)

```json
{
  "datePreset": "last_30_days",
  "cpvCodes": ["33000000"],
  "maxResults": 1000,
  "language": "ENG"
}
```

**3) This week's contract awards (CAN) — who won what** (~$1-2)

```json
{
  "datePreset": "last_7_days",
  "noticeTypes": ["can-standard"],
  "maxResults": 500,
  "language": "ENG"
}
```

Or just click **Start** with no input — defaults are: **last 7 days, all EU, all sectors, 500 results** (~$2). Good for first-time exploration.

### Why use EU TED Tenders?

- **Sales pipelines & B2G lead generation** — bid teams chasing public contracts get every relevant tender published in the last 24 hours, filtered to their CPV codes. Replaces manual TED browsing with an API-driven feed.
- **Market intelligence on government contracts** — track competitor wins via contract award notices (CAN), aggregate by buyer or sector, monitor RFP trends across the EU.
- **Compliance & monitoring** — watch buyer behaviour across member states; build alerts on procurement irregularities, single-source awards, or threshold avoidance.
- **Research & LLM context** — feed TED data into LLMs (RAG), BI dashboards (Looker, Metabase, Tableau), or no-code tools (Make, Zapier, n8n) without writing your own EU-procurement parser.
- **Procurement consulting & advisory** — supply your clients with daily curated tender opportunities at under $10/month per niche.
- **Academic & policy research** — historical and live procurement data for studies on public spending, supplier diversity, or cross-border competition.

### How to use EU TED Tenders

1. Open the Actor's **Input** tab in the Apify Console.
2. Pick a **Date range** preset (default: last 7 days), pick **Buyer countries** from the dropdown (or leave empty for all EU), pick **Sectors** (CPV main divisions), pick **Notice types**.
3. Pick output language (default English).
4. Click **Start**. Dataset populates in real time.
5. Download as JSON, CSV, Excel, HTML, RSS, or XML from the **Dataset** tab.

Need a specific query the dropdowns can't express? Use the **Advanced — TED expert query** field (overrides all structured filters). Examples: `publication-date>=20260101 AND total-value>=5000000`, `buyer-country=DEU AND classification-cpv=72000000`.

### Input

All filters optional. Defaults: last 7 days, all EU, all sectors, all notice types, 500 max results, English.

```json
{
  "datePreset": "last_30_days",
  "countries": ["DEU", "FRA"],
  "cpvCodes": ["72000000"],
  "noticeTypes": ["cn"],
  "language": "ENG",
  "maxResults": 500
}
```

### Output

Each dataset row represents one published notice:

```json
{
  "publicationNumber": "265768-2026",
  "publicationDate": "2026-04-20",
  "title": "Supply of cloud infrastructure services",
  "noticeType": "cn",
  "procedureType": "open",
  "buyerName": "Bundesministerium für Digitales",
  "buyerCountry": "DEU",
  "buyerCity": "Berlin",
  "buyerEmail": "vergabe@bmdv.bund.de",
  "buyerUrl": "https://www.bmdv.bund.de",
  "totalValue": 2400000,
  "totalValueCurrency": "EUR",
  "cpvCodes": ["72000000", "72200000"],
  "deadlineDate": "2026-05-20",
  "description": "Multi-year framework for IaaS provision...",
  "placeOfPerformanceCountry": "DEU",
  "placeOfPerformanceCity": "Berlin",
  "detailUrl": "https://ted.europa.eu/en/notice/-/detail/265768-2026",
  "xmlUrl": "https://ted.europa.eu/en/notice/265768-2026/xml",
  "scrapedAt": "2026-04-24T08:00:00.000Z"
}
```

You can download the dataset in JSON, CSV, Excel, HTML, RSS, or XML formats.

### Data table

| Field | Description |
|---|---|
| `publicationNumber` | TED canonical notice ID (e.g. `265768-2026`) |
| `publicationDate` | Date the notice was published in TED |
| `title` | Notice title in the requested language |
| `noticeType` / `noticeSubtype` | TED notice classification (cn, can-standard, pin-only, ...) |
| `procedureType` | open, restricted, negotiated, ... |
| `buyerName` / `buyerCountry` / `buyerCity` | Contracting authority |
| `buyerEmail` / `buyerUrl` | Contact channels |
| `totalValue` / `totalValueCurrency` | Estimated or awarded value |
| `cpvCodes` | Common Procurement Vocabulary classifications |
| `deadlineDate` | Deadline for tender submission (when present) |
| `description` | Free-text description from the lot or procedure |
| `placeOfPerformance*` | Where the contract is to be executed |
| `detailUrl` / `xmlUrl` | Links to the official TED notice page and XML |

### Pricing / Cost estimation

This Actor uses **pay-per-result pricing: $4 per 1,000 notices** (≈ $0.004 per notice). TED's underlying API is free, so there are no third-party fees on top. No monthly minimum, no seat fee.

Apify's free tier includes $5/month of platform credits, which covers roughly **1,250 notices/month** free of charge before you pay anything.

#### Typical runs

- **Daily incremental ingest** (one day of EU-wide notices ≈ 1,500-3,000 rows): $6-12/month at daily cadence.
- **Targeted niche** (one CPV code in one country, daily): often under $1/month.
- **Initial backfill** (a month of EU-wide notices ≈ 50,000-80,000 rows): one-off $200-320, then daily increments are cheap.

### Tips

- **Schedule daily runs** with a `publication-date` filter equal to today's date for incremental ingestion.
- **Use `maxResults`** when exploring — TED can return tens of thousands of notices for broad queries.
- **Native query syntax** is the most flexible; the structured filters are convenience wrappers.
- **Multilingual fields** — `title`, `description`, `buyerName` come in many EU languages; the Actor picks your `language` and falls back to English.

### FAQ

**Is TED data free to use?** Yes — TED notices are official EU publications under [Decision (EU) 2017/1873](https://eur-lex.europa.eu/eli/dec/2017/1873/oj). Standard attribution and ToS apply for commercial reuse.

**Why are some fields missing?** TED notices vary by type — a planning notice (PIN) won't have an awarded value; a contract award (CAN) won't have a tender deadline. Empty fields are returned as `null`.

**Can I get notice details beyond the search API?** v0.1 returns search-API fields and links to the full XML/HTML. A future version may parse the XML for full lot-level detail.

**How is this different from browsing ted.europa.eu manually?** The TED website is built for human one-off searches. This Actor turns the underlying API into a programmatic, scheduled, multi-filter dataset — feed it into Make/Zapier/Slack/CRM/LLM. Hours of manual browsing become a 30-second scheduled run.

**Does this cover non-EU procurement (US SAM.gov, UK Contracts Finder, etc.)?** No — TED is the EU portal only. Separate Actors are planned for other jurisdictions under the `foxlabs` account.

**Can I filter by buyer name or specific organization?** Yes via the expert query syntax (`organisation-name~"Bundesministerium"`). Structured filters cover country, CPV, date, value, and notice type for the common cases.

For feedback and feature requests, open an issue in the Actor's Issues tab.

***

### Keywords / search terms

EU TED, TED scraper, TED API, public procurement, government contracts, government tenders, EU tenders, EU bids, contract award notices, CAN scraper, RFP feed, RFP data, RFP scraper, B2G leads, B2G prospecting, tender alerts, tender monitoring, procurement intelligence, public sector sales, EU government data, member state procurement, CPV code search, procurement compliance, contract notice scraper, bid tracking, tender tracking, eTendering data, public spending data.

# Actor input Schema

## `datePreset` (type: `string`):

Quick date filter. Pick 'Custom' to use the From/To fields below.

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

YYYYMMDD format (e.g. 20260501). Only used when Date range = Custom.

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

YYYYMMDD format. Only used when Date range = Custom. Leave empty for 'today'.

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

Filter by country of the contracting authority. Leave empty for all EU.

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

Filter by sector using CPV (Common Procurement Vocabulary) main divisions. Multi-select OK. Leave empty for all sectors. Note: exact CPV match — selecting '72000000 — IT services' returns notices tagged with that exact code (sub-codes like 72100000 not included unless you also select them via Advanced query).

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

Filter by notice type. Leave empty for all types.

## `language` (type: `string`):

Language for localized fields (title, description, buyer name). Falls back to English if a notice has no translation.

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

Hard cap on dataset rows. Helps control cost. Set to 0 for unlimited.

## `query` (type: `string`):

POWER USERS ONLY. Native TED DSL. Examples: 'publication-date>=20260101 AND buyer-country=DEU', 'total-value>=1000000 AND classification-cpv=72000000'. If filled, OVERRIDES all filters above. Leave empty for normal use.

## `pageSize` (type: `integer`):

Notices fetched per API call. TED max is 250. Default 100 is usually fine.

## Actor input object example

```json
{
  "datePreset": "last_7_days",
  "countries": [],
  "cpvCodes": [],
  "noticeTypes": [],
  "language": "ENG",
  "maxResults": 500,
  "query": "",
  "pageSize": 100
}
```

# Actor output Schema

## `dataset` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("foxlabs/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("foxlabs/ted-tenders").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 foxlabs/ted-tenders --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "EU TED Tenders — Public Procurement Notice Scraper",
        "description": "Fetches structured public procurement notices from the official EU TED (Tenders Electronic Daily) API. Filter by country, CPV code, date, value, and notice type. Free, unauthenticated API; clean JSON output ready for CRM/dashboard ingestion.",
        "version": "0.5",
        "x-build-id": "Mdkuj8aCcVjK1SqRj"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/foxlabs~ted-tenders/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-foxlabs-ted-tenders",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/foxlabs~ted-tenders/runs": {
            "post": {
                "operationId": "runs-sync-foxlabs-ted-tenders",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/foxlabs~ted-tenders/run-sync": {
            "post": {
                "operationId": "run-sync-foxlabs-ted-tenders",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "datePreset": {
                        "title": "Date range",
                        "enum": [
                            "last_24_hours",
                            "last_7_days",
                            "last_30_days",
                            "last_90_days",
                            "ytd",
                            "custom"
                        ],
                        "type": "string",
                        "description": "Quick date filter. Pick 'Custom' to use the From/To fields below.",
                        "default": "last_7_days"
                    },
                    "publicationDateFrom": {
                        "title": "Custom from date",
                        "pattern": "^[0-9]{8}$",
                        "type": "string",
                        "description": "YYYYMMDD format (e.g. 20260501). Only used when Date range = Custom."
                    },
                    "publicationDateTo": {
                        "title": "Custom to date",
                        "pattern": "^[0-9]{8}$",
                        "type": "string",
                        "description": "YYYYMMDD format. Only used when Date range = Custom. Leave empty for 'today'."
                    },
                    "countries": {
                        "title": "Buyer countries",
                        "type": "array",
                        "description": "Filter by country of the contracting authority. Leave empty for all EU.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "DEU",
                                "FRA",
                                "ITA",
                                "ESP",
                                "POL",
                                "ROU",
                                "NLD",
                                "BEL",
                                "CZE",
                                "GRC",
                                "PRT",
                                "SWE",
                                "HUN",
                                "AUT",
                                "BGR",
                                "DNK",
                                "FIN",
                                "SVK",
                                "IRL",
                                "HRV",
                                "LTU",
                                "SVN",
                                "LVA",
                                "EST",
                                "CYP",
                                "LUX",
                                "MLT",
                                "NOR",
                                "ISL",
                                "LIE",
                                "CHE"
                            ],
                            "enumTitles": [
                                "Germany",
                                "France",
                                "Italy",
                                "Spain",
                                "Poland",
                                "Romania",
                                "Netherlands",
                                "Belgium",
                                "Czechia",
                                "Greece",
                                "Portugal",
                                "Sweden",
                                "Hungary",
                                "Austria",
                                "Bulgaria",
                                "Denmark",
                                "Finland",
                                "Slovakia",
                                "Ireland",
                                "Croatia",
                                "Lithuania",
                                "Slovenia",
                                "Latvia",
                                "Estonia",
                                "Cyprus",
                                "Luxembourg",
                                "Malta",
                                "Norway (EEA)",
                                "Iceland (EEA)",
                                "Liechtenstein (EEA)",
                                "Switzerland (EFTA)"
                            ]
                        },
                        "default": []
                    },
                    "cpvCodes": {
                        "title": "Sector (CPV main division)",
                        "type": "array",
                        "description": "Filter by sector using CPV (Common Procurement Vocabulary) main divisions. Multi-select OK. Leave empty for all sectors. Note: exact CPV match — selecting '72000000 — IT services' returns notices tagged with that exact code (sub-codes like 72100000 not included unless you also select them via Advanced query).",
                        "items": {
                            "type": "string",
                            "enum": [
                                "72000000",
                                "45000000",
                                "33000000",
                                "71000000",
                                "79000000",
                                "80000000",
                                "85000000",
                                "30000000",
                                "34000000",
                                "50000000",
                                "55000000",
                                "60000000",
                                "64000000",
                                "66000000",
                                "73000000",
                                "75000000",
                                "90000000",
                                "48000000",
                                "31000000",
                                "32000000",
                                "44000000",
                                "15000000",
                                "22000000",
                                "24000000",
                                "39000000",
                                "42000000",
                                "70000000",
                                "92000000",
                                "63000000",
                                "65000000"
                            ],
                            "enumTitles": [
                                "72 — IT services & software",
                                "45 — Construction work",
                                "33 — Healthcare & medical",
                                "71 — Architecture, engineering, planning",
                                "79 — Business services (legal, consulting, marketing)",
                                "80 — Education & training",
                                "85 — Health & social work",
                                "30 — Office & computing machinery",
                                "34 — Transport equipment",
                                "50 — Repair & maintenance services",
                                "55 — Hotel, restaurant, retail",
                                "60 — Transport services",
                                "64 — Postal & telecom",
                                "66 — Financial & insurance",
                                "73 — Research & development",
                                "75 — Public administration services",
                                "90 — Environmental, sewage, waste",
                                "48 — Software packages & info systems",
                                "31 — Electrical machinery",
                                "32 — Radio, TV, communications",
                                "44 — Construction structures & materials",
                                "15 — Food & beverages",
                                "22 — Printed matter",
                                "24 — Chemical products",
                                "39 — Furniture & cleaning supplies",
                                "42 — Industrial machinery",
                                "70 — Real estate services",
                                "92 — Recreation, culture, sports",
                                "63 — Transport support services",
                                "65 — Public utilities (water, energy)"
                            ]
                        },
                        "default": []
                    },
                    "noticeTypes": {
                        "title": "Notice type",
                        "type": "array",
                        "description": "Filter by notice type. Leave empty for all types.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "cn",
                                "can-standard",
                                "can-modif",
                                "pin-only",
                                "pin-cfc-standard",
                                "corr",
                                "subco",
                                "bri"
                            ],
                            "enumTitles": [
                                "Contract notice (new tender open for bids)",
                                "Contract award (winner announced)",
                                "Contract award — modification",
                                "Prior information notice (planning, pre-tender)",
                                "PIN as call for competition",
                                "Corrigendum (correction)",
                                "Subcontract",
                                "Concession notice"
                            ]
                        },
                        "default": []
                    },
                    "language": {
                        "title": "Output language",
                        "enum": [
                            "ENG",
                            "DEU",
                            "FRA",
                            "ITA",
                            "ESP",
                            "POL",
                            "NLD",
                            "POR",
                            "SWE",
                            "DAN",
                            "FIN",
                            "CES",
                            "ELL",
                            "HUN",
                            "RON",
                            "SLK",
                            "SLV",
                            "BUL",
                            "HRV",
                            "EST",
                            "LAV",
                            "LIT",
                            "GLE",
                            "MLT"
                        ],
                        "type": "string",
                        "description": "Language for localized fields (title, description, buyer name). Falls back to English if a notice has no translation.",
                        "default": "ENG"
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard cap on dataset rows. Helps control cost. Set to 0 for unlimited.",
                        "default": 500
                    },
                    "query": {
                        "title": "Advanced — TED expert query",
                        "type": "string",
                        "description": "POWER USERS ONLY. Native TED DSL. Examples: 'publication-date>=20260101 AND buyer-country=DEU', 'total-value>=1000000 AND classification-cpv=72000000'. If filled, OVERRIDES all filters above. Leave empty for normal use.",
                        "default": ""
                    },
                    "pageSize": {
                        "title": "Advanced — API page size",
                        "minimum": 1,
                        "maximum": 250,
                        "type": "integer",
                        "description": "Notices fetched per API call. TED max is 250. Default 100 is usually fine.",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
