# EU & UK Public Tenders: TED and Find a Tender (`openfeeds/eu-uk-public-tenders`) Actor

Search EU (TED) and UK (Find a Tender, Contracts Finder) public tenders in one schema: CPV, NUTS, value, deadline, lots and awards. New-only daily alerts. No contact names, emails or phones.

- **URL**: https://apify.com/openfeeds/eu-uk-public-tenders.md
- **Developed by:** [OpenFeeds](https://apify.com/openfeeds) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 tender notices

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

### What does EU & UK Public Tenders do?

**EU & UK Public Tenders** searches the three official public-procurement portals – **[TED](https://ted.europa.eu)** (Tenders Electronic Daily, EU/EEA), **[UK Find a Tender](https://www.find-tender.service.gov.uk)** and **[UK Contracts Finder](https://www.contractsfinder.service.gov.uk)** – and returns **one clean dataset of public tenders, planned procurements and contract awards** in a single schema. Think of it as a **TED API and Find a Tender API alternative with one schema**: buyer, CPV and NUTS codes, estimated value, deadline, procedure, lots and award winners, plus a link to the official notice.

**No personal data:** the Actor never outputs contact names, e-mail addresses or phone numbers. Structured contact fields are never requested, and contact details in free text are removed.

### Why use EU & UK Public Tenders?

- 🇬🇧 **Complete UK coverage.** Find a Tender has a server-side "tender" filter that misses about 9 out of 10 Procurement Act 2023 tenders (on 9 October 2026 it returned 8 tender notices; reading every notice of that day found 77). This Actor reads every notice and filters itself, so new UK4 tender notices are not lost.
- 🇪🇺 **EU and UK in one schema** – lots, CPV, NUTS, values, deadlines, procedure type, SME suitability, framework flag and award winners, with the same field names for all three portals.
- 🔔 **Daily "only new" alerts.** Schedule the Actor and get only notices you have not seen yet. Connect the results to e-mail, Slack, Google Sheets, webhooks, Make or Zapier with Apify integrations.
- 🛡️ **GDPR-friendly.** Organisation data only: no contact persons, e-mails or phone numbers.
- ✅ **Reliable.** Official, keyless APIs; each portal is handled separately, so if one is down you still get the others. Rate limits are respected (Retry-After, Contracts Finder lockout protection), and partial results are kept.
- 🤖 **Works for AI agents and MCP.** Flat camelCase fields, ISO dates, stable ids such as `ted:707427-2026`.

### Use cases

- **Bid and tender teams** – a daily list of new open tenders in your CPV codes, countries and keywords.
- **Bid-writing agencies and consultants** – monitor several clients' markets with one alert profile per client (`stateName`).
- **Market analysts** – pull contract award notices to see who wins what, at which value, in which country.
- **Sales intelligence** – spot upcoming demand early with planned procurements (prior information and pipeline notices).

### What data can you get?

| Field | Example | Description |
|---|---|---|
| `title` | `CPF Digital Project Evaluation` | Procedure title (preferred language when TED has it) |
| `buyerName` | `British Council` | Contracting authority (organisation only) |
| `buyerCountry` | `GB` | ISO country code of the buyer |
| `cpvCodes` | `["73200000"]` | All CPV codes (8 digits) |
| `nutsCodes` | `["FRD22"]` | NUTS codes of the place of performance |
| `estimatedValue` | `2039000` | Estimated value (net unless `valueIncludesVat`) |
| `currency` | `EUR` | Currency as published |
| `deadline` | `2026-11-30T16:00:00+01:00` | Earliest open submission deadline |
| `isOpen` | `true` | Deadline still in the future when fetched |
| `procedureType` | `open` | Open, restricted, negotiated, selective … |
| `lots` | `[{…}]` | Per-lot title, value, deadline, region, duration |
| `awards` | `[{…}]` | Contract award notices: winner, country, size, value |
| `noticeUrl` | `https://ted.europa.eu/en/notice/-/detail/707427-2026` | Official notice page |
| `documentsUrl` | `https://…` | Where to get the procurement documents |
| `licence` | `© European Union, https://ted.europa.eu – …` | Attribution to keep when you reuse the data |

**Never included:** contact names, e-mail addresses, phone numbers, street addresses of suppliers.

### How to search EU and UK public tenders

1. Open the Actor and choose the **Sources** (TED, Find a Tender, Contracts Finder).
2. Choose the **Notice types**: open tenders, planned procurements and/or contract awards.
3. Narrow the search with **CPV codes**, **keywords**, **buyer countries** or **NUTS regions** (all optional).
4. Set the date window with **Published within (days)** or fixed dates.
5. Click **Start**. Small runs such as the prefilled 30 notices usually take a few seconds; large runs that read many Find a Tender pages take a few minutes (see **Tips**).
6. Download the tender notices as JSON, CSV, Excel or HTML, or read them through the Apify API.

### How much does it cost to get EU and UK public tenders?

The Actor uses **pay-per-event** pricing. You pay for each tender notice delivered to the dataset, plus a tiny fee per run:

| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
| Tender notice (per notice delivered) | $0.0025 ($2.50 per 1,000) | $0.0022 | $0.0019 | $0.0015 |
| Actor start (per run) | $0.00005 | $0.00005 | $0.00005 | $0.00005 |

Examples (Free-plan prices):

- Test run with 30 tender notices: 30 × $0.0025 ≈ **$0.08**.
- Daily alert with about 30 new notices a day: about $0.075 a day, **about $2.25 a month**.
- One-off export of 10,000 notices: **about $25**.

You are **never charged** for notices that were filtered out, duplicates, notices already returned by an earlier "only new" run, notices that failed to convert, or for failed runs. Set a maximum cost per run in the run options and the Actor stops cleanly when it is reached. If that maximum is lower than the price of one notice, nothing is delivered and the status message tells you to raise it.

### Input

See the **Input** tab for every option. The most important ones:

- **Sources** – `ted`, `fts` (Find a Tender), `cf` (Contracts Finder).
- **Notice types** – `tender` (open tenders), `planning` (planned procurements), `award` (contract awards).
- **Keywords**, **CPV codes (prefixes)**, **Buyer countries**, **NUTS regions (prefixes)** – all optional filters.
- **Published within (days)** or **Published from / to** – the date window (at most 366 days). An end date in the future counts as today.
- **Only open tenders** – keep only tenders whose deadline has not passed (on by default).
- **Only new since last run** and **Alert name** – for daily alerts.
- **Max notices** – the upper limit across all sources (you pay per notice).

The prefilled input returns 30 open tenders from TED and Find a Tender published in the last 7 days:

```json
{
    "sources": ["ted", "fts"],
    "noticeTypes": ["tender"],
    "publishedWithinDays": 7,
    "openOnly": true,
    "maxItems": 30
}
```

#### Preset: IT tenders in Germany, Austria and Switzerland

```json
{
    "sources": ["ted"],
    "countries": ["DE", "AT", "CH"],
    "cpvCodes": ["72", "48"],
    "publishedWithinDays": 7,
    "maxItems": 500
}
```

#### Preset: all new UK tenders every day

```json
{
    "sources": ["fts", "cf"],
    "noticeTypes": ["tender"],
    "publishedWithinDays": 2,
    "onlyNew": true,
    "stateName": "uk-daily",
    "maxItems": 1000
}
```

#### Preset: contract awards for construction in the Nordics

```json
{
    "sources": ["ted"],
    "noticeTypes": ["award"],
    "cpvCodes": ["45"],
    "countries": ["SE", "NO", "DK", "FI"],
    "publishedWithinDays": 30,
    "maxItems": 1000
}
```

### Output

You can download the dataset in various formats such as JSON, HTML, CSV or Excel. The dataset has two views: **Overview** (one row per tender notice) and **Contract awards** (one row per winner of a contract award notice; see the notes below the example). These two items come from a local run with the prefilled input (descriptions and lots shortened):

```json
[
    {
        "id": "ted:707427-2026",
        "source": "ted",
        "sourceName": "TED (EU)",
        "noticeId": "707427-2026",
        "procedureId": "3f80fb8c-2c0e-490c-9df2-50dbf1ec06dd",
        "noticeType": "tender",
        "noticeTypeCode": "cn-standard",
        "isUpdate": false,
        "legalBasis": "32014L0024",
        "legalBasisLabel": "Directive 2014/24/EU",
        "title": "Travaux portant sur le traitement des pathologies structurelles affectant le gros oeuvre et les revêtements extérieurs (façades) des EPLE - Phase 1 (76 et 27) - AO",
        "headline": "France – Facade work – Travaux portant sur le traitement des pathologies structurelles affectant le gros oeuvre et les revêtements extérieurs (façades) des EPLE - Phase 1 (76 et 27) - AO",
        "language": "fr",
        "description": "Travaux portant sur le traitement des pathologies structurelles affectant le gros oeuvre et les revêtements extérieurs (façades) des EPLE - Phase 1 (76 et 27) -…",
        "buyerName": "REGION NORMANDIE - DIRECTION DES BATIMENTS REGIONAUX",
        "buyerId": "80553",
        "buyerCountry": "FR",
        "buyerCity": "Caen",
        "buyerType": "la",
        "buyerWebsite": "http://normandie.fr",
        "performanceCountry": "FR",
        "nutsCodes": ["FRD22"],
        "cpvCodes": ["45443000", "45223220"],
        "mainCpvCode": "45443000",
        "contractNature": "works",
        "procedureType": "open",
        "procedureDetails": null,
        "estimatedValue": 2039000,
        "currency": "EUR",
        "valueIncludesVat": false,
        "publishedDate": "2026-10-13",
        "publishedAt": null,
        "deadline": "2026-11-30T16:00:00+01:00",
        "deadlineType": "tender",
        "isOpen": true,
        "smeSuitable": null,
        "isFramework": false,
        "lotCount": 3,
        "lots": [
            {
                "lotId": "LOT-0001",
                "title": "Département de l'Eure",
                "description": "Département de l'Eure",
                "estimatedValue": null,
                "currency": null,
                "deadline": "2026-11-30T16:00:00+01:00",
                "nutsCodes": ["FRD22"],
                "smeSuitable": null,
                "durationMonths": 7
            }
        ],
        "awards": null,
        "awardedTotalValue": null,
        "awardedCurrency": null,
        "noticeUrl": "https://ted.europa.eu/en/notice/-/detail/707427-2026",
        "pdfUrl": "https://ted.europa.eu/en/notice/707427-2026/pdf",
        "documentsUrl": "https://www.marches-publics.info/mpiaws/index.cfm?fuseaction=dematEnt.login&type=DCE&IDM=1887175",
        "submissionUrl": "https://www.marches-publics.info/mpiaws/index.cfm?fuseaction=demat.termes&IDM=1887175",
        "licence": "© European Union, https://ted.europa.eu – free reuse (Decision 2011/833/EU)",
        "licenceUrl": "https://ted.europa.eu/en/legal-notice",
        "fetchedAt": "2026-10-13T00:58:44.206Z"
    },
    {
        "id": "fts:096303-2026",
        "source": "fts",
        "sourceName": "Find a Tender (UK)",
        "noticeId": "096303-2026",
        "procedureId": "ocds-h6vhtk-078611",
        "noticeType": "tender",
        "noticeTypeCode": "UK4",
        "isUpdate": false,
        "legalBasis": "2023/54",
        "legalBasisLabel": "Procurement Act 2023 (UK)",
        "title": "CPF Digital Project Evaluation",
        "headline": "CPF Digital Project Evaluation",
        "language": "en",
        "description": "Evaluating the Impact of the CPF digital project pilot",
        "buyerName": "British Council",
        "buyerId": "GB-PPON-PHTN-1551-GCQH",
        "buyerCountry": "GB",
        "buyerCity": "London",
        "buyerType": "publicAuthoritySubCentralGovernment",
        "buyerWebsite": "http://www.britishcouncil.org",
        "performanceCountry": "GB",
        "nutsCodes": ["UK"],
        "cpvCodes": ["73200000"],
        "mainCpvCode": "73200000",
        "contractNature": "services",
        "procedureType": "open",
        "procedureDetails": "Below threshold - open competition",
        "estimatedValue": 20833,
        "currency": "GBP",
        "valueIncludesVat": false,
        "publishedDate": "2026-10-12",
        "publishedAt": "2026-10-12T17:25:11+01:00",
        "deadline": "2026-10-30T10:00:00Z",
        "deadlineType": "tender",
        "isOpen": true,
        "smeSuitable": null,
        "isFramework": true,
        "lotCount": 1,
        "lots": [
            {
                "lotId": "1",
                "title": null,
                "description": null,
                "estimatedValue": 20833,
                "currency": "GBP",
                "deadline": "2026-10-30T10:00:00Z",
                "nutsCodes": ["UK"],
                "smeSuitable": null,
                "durationMonths": 4.2
            }
        ],
        "awards": null,
        "awardedTotalValue": null,
        "awardedCurrency": null,
        "noticeUrl": "https://www.find-tender.service.gov.uk/Notice/096303-2026",
        "pdfUrl": null,
        "documentsUrl": null,
        "submissionUrl": "https://tap.tcsapps.com/tap2/#/bc-supplier-registration",
        "licence": "Contains public sector information licensed under the Open Government Licence v3.0.",
        "licenceUrl": "https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/",
        "fetchedAt": "2026-10-13T00:58:45.393Z"
    }
]
```

A contract award notice additionally has `awards` (one entry per winner: `lotId`, `winnerName`, `winnerId`, `winnerCountry`, `winnerSize`, `value`, `currency`, `awardDate`), `awardedTotalValue` and `awardedCurrency`.

Notes on the **Contract awards** view:

- It lists one row per winner of each contract award notice. Notices of other types (open tenders, planned procurements) also appear, with empty winner columns. For a winners-only table, run with `"noticeTypes": ["award"]`.
- When several winners share one award, which is common for frameworks, each winner row shows the **same full award value**. Do not add up the **Value** column; use `awardedTotalValue` for the total of a notice.
- `value` and `currency` stay empty when the portal does not say which value belongs to which winner.

Each run also writes a `RUN_SUMMARY` record to the key-value store: per source the status (`ok`, `empty`, `skipped`, `stopped`, `rate-limited`, `error`) with a reason, pages, notices fetched, matched and delivered, and the date window. `stopped` means the source ended early without an error, for example because `maxItems` or the maximum cost was reached first, the run was aborted, or its timeout was near.

### Field reference

| Field | Description |
|---|---|
| `id` | Unique id `<source>:<noticeId>`, stable across runs |
| `source`, `sourceName` | `ted` / `fts` / `cf`; `TED (EU)`, `Find a Tender (UK)`, `Contracts Finder (UK)` |
| `noticeId` | TED publication number, Find a Tender notice id or Contracts Finder release id |
| `procedureId` | TED procedure identifier or OCDS ocid; links notices of the same procedure |
| `noticeType` | `tender`, `planning` or `award` |
| `noticeTypeCode` | TED notice type (`cn-standard`, `can-standard`, `pin-only` …), UK notice type (`UK4`, `UK6` …) or OCDS tag |
| `isUpdate` | True for changed or corrected versions |
| `legalBasis`, `legalBasisLabel` | CELEX id or UK act id, and a readable label (e.g. `Directive 2014/24/EU`, `Procurement Act 2023 (UK)`) |
| `title`, `headline`, `language` | Title, TED's translated headline (country – main CPV – title) and the language of the title |
| `description` | Procedure description, contact details removed, at most 10,000 characters |
| `buyerName`, `buyerId`, `buyerCountry`, `buyerCity`, `buyerType`, `buyerWebsite` | The contracting authority (organisation data only) |
| `performanceCountry`, `nutsCodes` | Place of performance (country and NUTS codes; Contracts Finder has no NUTS codes) |
| `cpvCodes`, `mainCpvCode` | CPV codes (8 digits, no check digit) |
| `contractNature` | `works`, `supplies` or `services` |
| `procedureType`, `procedureDetails` | Procedure type; UK procurement method details |
| `estimatedValue`, `currency`, `valueIncludesVat` | Estimated value as published (no currency conversion) |
| `publishedDate`, `publishedAt` | Publication date; exact time for UK notices |
| `deadline`, `deadlineType`, `isOpen` | Submission deadline (tenders or requests to participate; a deadline published without a time is set to 23:59:59 of that day) and whether it is still open |
| `smeSuitable`, `isFramework` | SME suitability and framework agreement flags |
| `lotCount`, `lots` | Number of lots and per-lot details (`lotId`, `title`, `description`, `estimatedValue`, `currency`, `deadline`, `nutsCodes`, `smeSuitable`, `durationMonths`) |
| `awards`, `awardedTotalValue`, `awardedCurrency` | Contract award notices only |
| `noticeUrl`, `pdfUrl`, `documentsUrl`, `submissionUrl` | Official notice page, TED PDF, procurement documents, submission page |
| `licence`, `licenceUrl` | Attribution to keep when reusing the data |
| `fetchedAt` | When the record was fetched |

#### What is a CPV code?

The Common Procurement Vocabulary is the EU's 8-digit classification of what is being bought, for example `72000000` (IT services) or `45000000` (construction work). Enter a prefix such as `72` or `7226` to get everything below it; trailing zeros are ignored, so `72000000-5` means the same as `72`.

#### What is a NUTS code?

NUTS codes identify EU regions, for example `DE1` (Baden-Württemberg) or `FR10` (Île-de-France). Find a Tender uses UK codes such as `UKI` (London). Contracts Finder publishes region names instead of NUTS codes, so it is skipped when you filter by NUTS.

#### Notice types

- `tender` – calls for competition you can bid on (TED contract notices, UK4 tender notices on Find a Tender, Contracts Finder opportunities).
- `planning` – prior information, pipeline and preliminary market engagement notices (e.g. UK2/UK3).
- `award` – contract award notices (TED result notices, UK5/UK6/UK7 on Find a Tender, Contracts Finder awards).

### Tips

- **Daily alerts:** turn on **Only new since last run**, keep **Published within (days)** small (1–3) and create an Apify schedule. Each alert profile can have its own **Alert name** so the "already seen" memories do not mix.
- **Power filters:** use **TED expert query** for anything the form does not offer, e.g. `procedure-type=open AND buyer-legal-type=la`.
- **Language:** **Preferred language** picks the TED title and headline language and the language of the TED links.
- **Order:** results come newest first per source, but sources run in parallel, so sort by `publishedDate` if you need one order.
- **Speed:** TED and Contracts Finder are fast. Find a Tender pauses a caller for 2 minutes after roughly 20 quick requests (each request reads 100 notices of all types). In runs of more than 100 notices the Actor waits and continues automatically, so large UK windows take longer: a run with the default settings (1,000 notices from all three portals) usually takes 3 to 5 minutes. Runs of up to 100 notices that include TED and have no keyword, CPV, NUTS or expert-query filter (such as the prefilled input) do not wait for Find a Tender: if it asks for a pause longer than 30 seconds or answers too slowly (15-second timeout, one retry), TED fills the remaining notices. Filtered runs wait, so their UK results stay complete. Use filters, `maxItems` or a smaller window to keep runs short; daily alerts are rarely affected.

### FAQ

#### Is it legal to use public tender data?

Yes. TED notices may be freely reused, also commercially, under the EU reuse policy (Commission Decision 2011/833/EU). Find a Tender and Contracts Finder data are published under the Open Government Licence v3.0. Keep the attribution in the `licence` field when you republish the data.

Our Actors are ethical and do not extract private contact data such as e-mail addresses or phone numbers. However, results may contain the names of sole traders that won a contract (award notices are published by law) or a name mentioned in free text. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You are responsible for using the results lawfully; if you are unsure, consult your lawyers.

#### Why are there no contact e-mails or phone numbers?

To protect personal data (GDPR). Open `noticeUrl` to see the official contact details on the portal.

#### How fresh is the data?

TED publishes new notices Monday to Friday; the UK portals publish continuously. The Actor reads the live APIs on every run, so schedule it as often as you like.

#### Why does a TED keyword search find more than a UK keyword search?

TED's own full-text search covers the whole notice in all languages (with stemming). For Find a Tender and Contracts Finder the Actor matches your keywords in the title, description and lot titles.

#### Contracts Finder was skipped or rate-limited – why?

Contracts Finder is skipped when you filter by NUTS codes (it has none) or by non-UK countries. If it answers with its rate-limit error, it locks the caller out for 5 minutes; the Actor then stops Contracts Finder for that run and keeps the results from the other sources. The run summary shows the status of every source.

#### Which countries are covered?

All EU member states, the EEA countries (Iceland, Liechtenstein, Norway), Switzerland and other countries that publish on TED, plus the United Kingdom.

#### Are values converted to one currency?

No, values are returned as published, with their ISO currency code.

#### Are there limits?

The date window can be up to 366 days per run and a run can return up to 100,000 notices. Very large exports can take longer than the run's timeout (1 hour by default) because of Find a Tender's pauses. About 90 seconds before the timeout the Actor stops loading new pages, delivers what it already has and finishes as SUCCEEDED; the source shows `stopped` in `RUN_SUMMARY`. Raise the timeout in the run options, or split the window, for complete exports.

### Data sources and attribution

- TED: © European Union, https://ted.europa.eu
- Find a Tender and Contracts Finder: Contains public sector information licensed under the Open Government Licence v3.0.

### Support

Found a problem or missing a field? Open an issue in the **Issues** tab. To call the Actor from your own code, see the **API** tab.

### Changelog

- **1.0 (2026-10-13)** – First release: TED, Find a Tender and Contracts Finder in one schema; open tenders, planned procurements and contract awards; lots and award winners; only-new daily alerts; contact data removed.

# Actor input Schema

## `sources` (type: `array`):

Which official portals to search. <b>TED</b> = EU and EEA (Tenders Electronic Daily). <b>Find a Tender</b> = UK above-threshold notices and all Procurement Act 2023 notices. <b>Contracts Finder</b> = England's lower-value opportunities.

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

<i>Open tenders</i> = calls for competition you can bid on. <i>Planned procurements</i> = prior-information, pipeline and market-engagement notices. <i>Contract awards</i> = who won, for how much.

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

Return notices that mention <b>any</b> of these words or phrases. TED searches the full notice text in all languages; Find a Tender and Contracts Finder search title, description and lot titles. Leave empty for all.

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

Common Procurement Vocabulary codes or prefixes, e.g. <code>72</code> (IT services), <code>48</code> (software), <code>45</code> (construction work), <code>7226</code>. Full codes like <code>72000000</code> or <code>72000000-5</code> also work; trailing zeros mean "everything below".

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

Country of the contracting authority. Leave empty for all. Choosing only non-UK countries skips the UK sources (Find a Tender, Contracts Finder).

## `nutsCodes` (type: `array`):

Place of performance, e.g. <code>DE1</code> (Baden-Württemberg), <code>FR10</code> (Île-de-France), <code>UKI</code> (London). Contracts Finder has no NUTS codes and is skipped when this is set.

## `publishedWithinDays` (type: `integer`):

Only notices published in the last N days (today counts as day 0). Ignored when "Published from" is set.

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

Fixed start date (YYYY-MM-DD). Overrides "Published within". The window can be at most 366 days.

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

Fixed end date (YYYY-MM-DD, inclusive). Defaults to today; a future date counts as today.

## `openOnly` (type: `boolean`):

Keep only tenders whose submission deadline (for tenders or requests to participate) has not passed yet. Ignored for planned procurements and contract awards.

## `includeUpdates` (type: `boolean`):

Also return changed versions of notices, such as deadline extensions (TED notice version > 1, UK tender updates and amendments).

## `onlyNew` (type: `boolean`):

Return only notices that an earlier run with the same filters has not returned yet. Perfect for a daily schedule. Seen notice IDs are kept in a key-value store named eu-uk-public-tenders-state in your account.

## `stateName` (type: `string`):

Keeps a separate "already seen" memory per alert profile, e.g. <code>it-dach</code>. Leave empty to derive it from the filters. Letters, digits and hyphens only.

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

For TED notices published in several languages, and for TED's translated headline. Also sets the language of the TED notice and PDF links.

## `includeLots` (type: `boolean`):

Add a <code>lots</code> array (title, value, deadline, region and duration per lot).

## `maxItems` (type: `integer`):

Upper limit across all sources. You pay per tender notice returned.

## `tedExpertQuery` (type: `string`):

Extra TED search condition, appended with AND. Example: <code>procedure-type=open AND buyer-legal-type=la</code>. See the expert search help on ted.europa.eu. Do not add SORT BY; results are always newest first.

## `strictSources` (type: `boolean`):

Internal monitoring switch: fail the run if any selected source returns an error or 0 notices.

## Actor input object example

```json
{
  "sources": [
    "ted",
    "fts"
  ],
  "noticeTypes": [
    "tender"
  ],
  "keywords": [],
  "cpvCodes": [],
  "countries": [],
  "nutsCodes": [],
  "publishedWithinDays": 7,
  "publishedFrom": "",
  "publishedTo": "",
  "openOnly": true,
  "includeUpdates": false,
  "onlyNew": false,
  "stateName": "",
  "language": "en",
  "includeLots": true,
  "maxItems": 30,
  "tedExpertQuery": "",
  "strictSources": false
}
```

# Actor output Schema

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

Dataset with one normalised record per tender notice

## `runSummary` (type: `string`):

Per-source status and counts of this run

# 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 = {
    "sources": [
        "ted",
        "fts"
    ],
    "noticeTypes": [
        "tender"
    ],
    "publishedWithinDays": 7,
    "openOnly": true,
    "maxItems": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("openfeeds/eu-uk-public-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 = {
    "sources": [
        "ted",
        "fts",
    ],
    "noticeTypes": ["tender"],
    "publishedWithinDays": 7,
    "openOnly": True,
    "maxItems": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("openfeeds/eu-uk-public-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 '{
  "sources": [
    "ted",
    "fts"
  ],
  "noticeTypes": [
    "tender"
  ],
  "publishedWithinDays": 7,
  "openOnly": true,
  "maxItems": 30
}' |
apify call openfeeds/eu-uk-public-tenders --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,openfeeds/eu-uk-public-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/DKr7NRQaB3dVOqQWi/builds/R7qfKrfkqTaTrd1h1/openapi.json
