# Tenders Electronic Daily API

> Tenders Electronic Daily returns EU tender and contract award data as a workflow and API.

Tenders Electronic Daily (TED) finds EU procurement notices by purchase description, with optional country, date, value, and open-status filters. Search contract awards finds published awards by contract topic or winning company, with optional country and earliest publication date.

- Page: https://fous.com/tools/tenders-electronic-daily
- Handle: `@tenders-electronic-daily`
- Category: [Government](https://fous.com/tools/category/government)
- Source website: https://ted.europa.eu
- Last verified: Sep 29, 2026

## Methods

### Search contract awards

Operation `search_contract_awards`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Find published EU contract award notices by topic or winning company, newest publication first. Values and tender counts are included when published; counts across lots are summed. Title and winner information can be in the notice language when no English version is published.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `query` | string | yes | `"road maintenance"` | Words describing a contract or the name of a winning company, such as Siemens or road maintenance. |
| `country` | string | no | `"Germany"` | Buyer country name or two-letter code, such as Germany or DE. |
| `search_in` | string | no | `"contract"` | Search contract topics, winning companies, or both; for example winner. |
| `max_results` | integer | no | `10` | Maximum notices returned, such as 25 (up to 100). |
| `awarded_since` | string | no | `"2025-09-29"` | Earliest notice publication date, such as 2025-09-29; defaults to one year before the search. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "Words describing a contract or the name of a winning company, such as Siemens or road maintenance.",
      "examples": [
        "road maintenance",
        "Siemens",
        "zzzxqvnotanaward988991"
      ]
    },
    "country": {
      "type": "string",
      "description": "Buyer country name or two-letter code, such as Germany or DE.",
      "examples": [
        "Germany",
        "DE"
      ]
    },
    "search_in": {
      "enum": [
        "either",
        "contract",
        "winner"
      ],
      "type": "string",
      "default": "either",
      "description": "Search contract topics, winning companies, or both; for example winner.",
      "examples": [
        "contract",
        "winner",
        "either"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 25,
      "maximum": 100,
      "minimum": 1,
      "description": "Maximum notices returned, such as 25 (up to 100).",
      "x-fous-developer": true,
      "examples": [
        10,
        5,
        2
      ]
    },
    "awarded_since": {
      "type": "string",
      "format": "date",
      "description": "Earliest notice publication date, such as 2025-09-29; defaults to one year before the search.",
      "examples": [
        "2025-09-29"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "query": "road maintenance",
      "search_in": "contract",
      "max_results": 10,
      "awarded_since": "2025-09-29"
    },
    {
      "query": "Siemens",
      "country": "Germany",
      "search_in": "winner"
    },
    {
      "query": "Siemens",
      "country": "DE",
      "search_in": "either",
      "max_results": 5
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `awards` | array |  | Newest award notices first. |
| `awards[].winners` | array |  | Names of winning companies followed by their country when published. |
| `awards[].currency` | string or null | `"EUR"` |  |
| `awards[].cpv_codes` | array |  |  |
| `awards[].buyer_name` | string or null | `"Dublin City Council"` |  |
| `awards[].notice_url` | string or null | `"https://ted.europa.eu/en/notice/-/detail/244221-2026"` |  |
| `awards[].awarded_value` | number or null | `2033000` |  |
| `awards[].buyer_country` | string or null | `"Ireland"` |  |
| `awards[].contract_title` | string or null | `"Dublin City Council is establishing a single-operator framework agreement for the supply and delivery of sub compact an` |  |
| `awards[].publication_date` | string or null | `"2026-04-10"` |  |
| `awards[].publication_number` | string or null | `"244221-2026"` |  |
| `awards[].number_of_tenders_received` | integer or null | `5` |  |

**Example input**

```json
{
  "query": "road maintenance",
  "search_in": "contract",
  "max_results": 10,
  "awarded_since": "2025-09-29"
}
```

**Example output**

```json
{
  "awards": [
    {
      "winners": [
        "Total Materials Handling Ltd — Ireland",
        "Westpark Motor Company Ltd — Ireland"
      ],
      "currency": "EUR",
      "cpv_codes": [
        "34921100",
        "34920000"
      ],
      "buyer_name": "Dublin City Council",
      "notice_url": "https://ted.europa.eu/en/notice/-/detail/244221-2026",
      "awarded_value": 2033000,
      "buyer_country": "Ireland",
      "contract_title": "Dublin City Council is establishing a single-operator framework agreement for the supply and delivery of sub compact and compact sweepers, as well as winter maintenance vehicles (3 Lots)",
      "publication_date": "2026-04-10",
      "publication_number": "244221-2026",
      "number_of_tenders_received": null
    },
    {
      "winners": [
        "Mesta AS — Norway",
        "Kveen AS — Norway"
      ],
      "currency": "NOK",
      "cpv_codes": [
        "45000000",
        "45233000"
      ],
      "buyer_name": "Vestland fylkeskommune",
      "notice_url": "https://ted.europa.eu/en/notice/-/detail/242858-2026",
      "awarded_value": 120000000,
      "buyer_country": "Norway",
      "contract_title": "Framework agreement road maintenance 2026 - 2028 - Stryn, Gloppen, Stad, Bremanger and Kinn nord-Mesta AS",
      "publication_date": "2026-04-09",
      "publication_number": "242858-2026",
      "number_of_tenders_received": 5
    }
  ]
}
```

### Search tenders

Operation `search_tenders`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Find recently published EU public procurement notices matching what is being bought, with buyer, value, deadline, and TED notice link. Open-only results must have a future submission deadline; values and deadlines may be missing from published notices.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `what` | string | yes | `"school buses"` | What is being bought, such as cloud hosting or school buses. |
| `country` | string | no | `"Finland"` | Buyer country by name or two-letter code, such as Germany or DE. |
| `open_only` | boolean | no | `true` | Only notices whose submission deadline is still ahead; defaults to true. |
| `max_results` | integer | no | `5` | Maximum number of results, from 1 to 100; defaults to 25. |
| `published_since` | string | no | `"2026-09-01"` | Earliest publication date, YYYY-MM-DD; defaults to 30 days ago. |
| `minimum_value_eur` | number | no | `100000` | Minimum estimated value in euros, with published non-euro values converted at current reference rates. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "what"
  ],
  "properties": {
    "what": {
      "type": "string",
      "example": "cloud hosting",
      "minLength": 2,
      "description": "What is being bought, such as cloud hosting or school buses.",
      "examples": [
        "school buses",
        "cloud hosting"
      ]
    },
    "country": {
      "type": "string",
      "example": "Germany",
      "description": "Buyer country by name or two-letter code, such as Germany or DE.",
      "examples": [
        "Finland"
      ]
    },
    "open_only": {
      "type": "boolean",
      "default": true,
      "example": true,
      "description": "Only notices whose submission deadline is still ahead; defaults to true.",
      "examples": [
        true
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 25,
      "example": 25,
      "maximum": 100,
      "minimum": 1,
      "description": "Maximum number of results, from 1 to 100; defaults to 25.",
      "x-fous-developer": true,
      "examples": [
        5
      ]
    },
    "published_since": {
      "type": "string",
      "format": "date",
      "example": "2026-09-01",
      "description": "Earliest publication date, YYYY-MM-DD; defaults to 30 days ago.",
      "examples": [
        "2026-09-01"
      ]
    },
    "minimum_value_eur": {
      "type": "number",
      "example": 100000,
      "minimum": 0,
      "description": "Minimum estimated value in euros, with published non-euro values converted at current reference rates.",
      "examples": [
        100000
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "what": "school buses",
      "country": "Finland",
      "max_results": 5,
      "published_since": "2026-09-01"
    },
    {
      "what": "cloud hosting"
    },
    {
      "what": "school buses",
      "open_only": true,
      "max_results": 5,
      "minimum_value_eur": 100000
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `tenders` | array |  |  |
| `tenders[].title` | string or null | `"Energy Management Information System"` |  |
| `tenders[].currency` | string or null | `"EUR"` |  |
| `tenders[].cpv_codes` | array |  |  |
| `tenders[].buyer_name` | string or null | `"Iarnród Eireann-Irish Rail"` |  |
| `tenders[].notice_link` | string or null | `"https://ted.europa.eu/en/notice/-/detail/669698-2026"` |  |
| `tenders[].buyer_country` | string or null | `"Ireland"` |  |
| `tenders[].procedure_type` | string or null | `"Negotiated procedure with prior call for competition"` |  |
| `tenders[].estimated_value` | number or null | `770000` |  |
| `tenders[].publication_date` | string or null | `"2026-09-29"` |  |
| `tenders[].submission_deadline` | string or null | `"2026-10-21T12:00:00+01:00"` | ISO 8601 date-time with time zone offset. |
| `tenders[].category_description` | string or null | `"Energy-management services"` |  |
| `tenders[].notice_publication_number` | string or null | `"669698-2026"` |  |

**Example input**

```json
{
  "what": "school buses",
  "country": "Finland",
  "max_results": 5,
  "published_since": "2026-09-01"
}
```

**Example output**

```json
{
  "tenders": []
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@tenders-electronic-daily",
  "visibility": "public",
  "operation": "search_contract_awards",
  "version": 1,
  "input": {
    "query": "road maintenance",
    "search_in": "contract",
    "max_results": 10,
    "awarded_since": "2025-09-29"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@tenders-electronic-daily\",\n  \"visibility\": \"public\",\n  \"operation\": \"search_contract_awards\",\n  \"version\": 1,\n  \"input\": {\n    \"query\": \"road maintenance\",\n    \"search_in\": \"contract\",\n    \"max_results\": 10,\n    \"awarded_since\": \"2025-09-29\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@tenders-electronic-daily",
  "visibility": "public",
  "operation": "search_contract_awards",
  "version": 1,
  "input": {
    "query": "road maintenance",
    "search_in": "contract",
    "max_results": 10,
    "awarded_since": "2025-09-29"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/tenders-electronic-daily`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `search_contract_awards`: Search contract awards. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `search_tenders`: Search tenders. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-tenders-electronic-daily https://api.fous.com/mcp/tools/tenders-electronic-daily --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## Use cases

- Find open procurement opportunities by product, service, or country
- Track submission deadlines and estimated tender values
- Review recent contract awards by topic or winning company
- Identify winning companies and their countries
- Compare award notices by buyer and publication date

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this Tenders Electronic Daily tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a Tenders Electronic Daily account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from ted.europa.eu when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Sep 29, 2026.

### Which EU tenders are open for a specific product?

Search tenders returns matching notices; open-only results require a future submission deadline.

### Who won contracts related to a topic?

Search contract awards finds published award notices by topic or winning company, with winner names when published.

### What is the estimated value of a tender?

Search tenders returns the estimated value and currency when published.

## Related

- [All Government tools](https://fous.com/tools/category/government)
