# EU Tenders Feed: TED Public Procurement Alerts (`offerastudio/eu-tender-feed`) Actor

EU public tenders from TED, the official EU procurement journal: filter by publication date, buyer country, CPV code or sector (IT, construction, medical, consulting, cleaning), keywords, notice type and value. One row per notice with buyer, CPV, value, deadline and documents.

- **URL**: https://apify.com/offerastudio/eu-tender-feed.md
- **Developed by:** [Offera Studio](https://apify.com/offerastudio) (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 $2.00 / 1,000 notice returneds

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/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 Tenders Feed do?

**EU Tenders Feed** reads **TED (Tenders Electronic Daily)**, the EU's official journal for public procurement, and returns **one clean row per notice**, filtered the way you need it: by **publication date, buyer country, CPV code or sector** (IT services, construction, medical, consulting, cleaning …), **keywords**, **notice type** and **minimum value**. Schedule it every morning and you have a daily feed of new tenders.

For every notice you get:

- 🔢 the **TED notice number**, **publication date** and **notice type** (contract notice, contract award notice, prior information notice)
- 🏛️ the **buyer's name and country**
- 📝 the **title**: English when the buyer published one, otherwise the original language with its **language code**
- 🏷️ the **CPV codes with English descriptions**
- 💶 the **estimated value and currency** (when the buyer states one) and, for award notices, the awarded value
- ⏰ the **deadline for tenders**
- 📍 the **place of performance (NUTS regions)** with names
- ⚙️ the **procedure type** (open, restricted, negotiated …) and the contract nature (services, supplies, works)
- 🔗 links to the **TED page**, the notice as **XML and PDF**, and the **tender documents** the buyer published

**No API key, no proxy and no login:** the Actor uses TED's official, free search API.

### Who is it for?

- **Bid and sales teams** that want a daily list of tenders in their sector and countries (IT, construction, medical, consulting, cleaning …).
- **Consultancies and agencies** that monitor calls for tender for their clients.
- **Competitor and market research**: who buys what, where, for how much, and who won (award notices).
- **Public sector analysts and journalists**: count tenders by country, sector or procedure.

### How to use it

1. Click **Start** with the default input: the **last working day**, all countries, the **IT services** preset, contract notices, **50 notices**.
2. Narrow by **Buyer countries** (`DE`, `FR`, `PL` …), **Sectors** or **CPV codes**, **Keywords**, **Notice types** and **Minimum estimated value**.
3. For a **daily feed**, save the input as a task, leave the dates empty and add a **schedule** (for example every morning at 08:00): each run then returns the notices of the last working day. Use `noticeNumber` to de-duplicate.
4. Connect the task to Slack, email, Google Sheets, Zapier, Make or n8n with an Apify **integration** to get new tenders where you work.

#### Sectors, CPV codes and keywords

- A **sector** is a preset of CPV codes: for example *IT services* = CPV division 72, *construction* = 45, *medical* = 33 and 85, *consulting* = 79, *cleaning* = 909.
- **CPV codes**: give 8-digit codes (`72000000` or `72000000-8`) or prefixes (`72`, `7226`). A code that ends in zeros stands for its whole group, as in the CPV hierarchy: `72000000` finds every IT services code.
- **Sectors, CPV codes** are combined with OR: a notice matches when any of its CPV codes starts with any of your prefixes.
- **Keywords** are searched in the title and description (any keyword matches; several words are a phrase). All filters are combined with AND.

### Input example

```json
{
    "publicationDateFrom": "2026-09-28",
    "publicationDateTo": "2026-09-30",
    "countries": ["DE", "NL", "BE"],
    "sectors": ["it-services"],
    "keywords": ["cloud", "cybersecurity"],
    "noticeTypes": ["contract-notice", "contract-award"],
    "minEstimatedValue": 100000,
    "maxResults": 200
}
```

### Output example

Real output of the default input on 1 October 2026 (the first rows of 50):

| publicationDate | noticeNumber | buyer | country | estimated value | deadline | title |
| --- | --- | --- | --- | --- | --- | --- |
| 2026-10-01 | 677828-2026 | Department of Agriculture Food and the Marine | IE | 210,000 EUR | 2026-10-24 | The provision of Sonatype Nexus LifeCycle licenses |
| 2026-10-01 | 677790-2026 | CAISSE DES DEPOTS ET CONSIGNATIONS | FR | 1,386,668 EUR | 2026-10-19 | Dispositif de criblage des tiers et filtrage des flux |
| 2026-10-01 | 677602-2026 | Gemeente Rotterdam | NL | 1,080,000 EUR | 2026-11-24 | Routeplanning en -begeleiding |
| 2026-10-01 | 677597-2026 | Freistaat Bayern | DE | 46,875,000 EUR | 2026-10-12 | Rahmenvereinbarungen Programmier- und Beratungsleistungen |
| 2026-10-01 | 677490-2026 | Region Skåne | SE | 4,000,000 SEK | 2026-10-15 | Upphandling av upphandlingsverktyg |

One row in full:

```json
{
    "noticeNumber": "677602-2026",
    "publicationDate": "2026-10-01",
    "noticeType": "cn-standard",
    "noticeTypeLabel": "Contract or concession notice – standard regime",
    "noticeCategory": "contract-notice",
    "buyerName": "Gemeente Rotterdam",
    "buyerNames": ["Gemeente Rotterdam"],
    "buyerCountry": "NL",
    "buyerCountryCode": "NLD",
    "buyerCountryName": "Netherlands",
    "title": "Routeplanning en -begeleiding",
    "titleLanguage": "nl",
    "tedTitle": "Netherlands – IT services: consulting, software development, Internet and support – Routeplanning en -begeleiding",
    "cpvCodes": [
        { "code": "72000000", "description": "IT services: consulting, software development, Internet and support" },
        { "code": "90500000", "description": "Refuse and waste related services" }
    ],
    "mainCpv": { "code": "72000000", "description": "IT services: consulting, software development, Internet and support" },
    "estimatedValue": 1080000,
    "estimatedValueSource": "procedure",
    "awardedValue": null,
    "currency": "EUR",
    "deadline": "2026-11-24T09:00:00Z",
    "deadlineDate": "2026-11-24",
    "placeOfPerformance": [{ "code": "NLD", "name": "Netherlands" }],
    "procedureType": "open",
    "procedureTypeLabel": "Open",
    "contractNature": "services",
    "tedUrl": "https://ted.europa.eu/en/notice/-/detail/677602-2026",
    "noticeXmlUrl": "https://ted.europa.eu/en/notice/677602-2026/xml",
    "noticePdfUrl": "https://ted.europa.eu/en/notice/677602-2026/pdf",
    "documentUrls": ["https://s2c.mercell.com/today/230063"],
    "error": null
}
```

**Fields worth knowing:**

- `estimatedValue` is empty when the buyer did not state one (in many notices). `estimatedValueSource` says whether it is the value of the whole procedure, the sum of the lots or a global estimate. **Values are not converted**: `currency` is what the notice says (EUR, SEK, PLN, CZK …).
- `deadline` is the earliest deadline for tenders; award and prior information notices usually have none.
- `title` is the buyer's own title (`titleLanguage` says which language). `tedTitle` is TED's English header with the country and the CPV label.
- `documentUrls` are the links the buyer published for the tender documents or the e-procurement page where bids are submitted. They may need a free registration on the buyer's platform.
- Rows with an `error` code are free info rows: `invalid-input`, `no-results`, `invalid-query`, `rate-limited`, `source-unavailable`.

### How much does it cost?

This Actor uses **pay per event**:

| Event | Price |
| --- | --- |
| Notice returned (one row per notice) | **$0.002** |
| Info rows, the "no results" row and rows about a source that could not be read | **free** |

- 50 notices cost **$0.10**; a daily feed of 30 notices costs about **$1.80 a month**.
- TED's search API is free.
- Apify also charges a tiny standard start fee per run.
- Set **Maximum cost per run** in the run options and the Actor stops when it is reached.

### Limitations

- **Working days only.** TED publishes notices on working days; there is nothing for Saturdays and Sundays. With empty dates the Actor therefore uses the **last working day before today** (on Monday: Friday), not "yesterday".
- **Above-threshold tenders only.** TED contains the notices that EU rules require to be published (contracts above the EU thresholds, plus some voluntary ones). Smaller national tenders are not in TED.
- **Values are not converted** between currencies; the minimum value is compared only with notices stated in the currency you choose (default EUR). Notices without a stated value are left out when a minimum is set.
- **`mainCpv` is the first code TED lists**; notices with several lots can carry the codes of all lots in `cpvCodes`.
- **Documents:** the Actor returns links; it does not download or read tender documents.
- **Up to 5,000 notices per run** (TED's search allows a window of 15,000 results). The Actor sends one request per 100 notices, one at a time, at least 0.7 s apart, and waits when TED asks it to slow down.
- Titles are in the buyer's language; the Actor does not translate them.

### Data and your responsibility

- The data is from the **official TED search API** of the Publications Office of the European Union. TED's legal notice says that the procurement notices can be freely reused for commercial or non-commercial purposes. Code lists (CPV, NUTS, countries, notice and procedure types) are from the eForms SDK (CC BY 4.0).
- Not legal or bidding advice: always read the official notice and the tender documents before bidding, and check the deadline in the notice. Notices can be corrected or cancelled later.
- The Actor returns **organisation data only** (buyers, places, documents). It does not request contact persons' names, e-mail addresses or phone numbers from the notices.
- Not affiliated with or endorsed by the European Union or the Publications Office.

### FAQ

#### Is this official data?

Yes. It comes from TED's own search API, the same data as on ted.europa.eu.

#### Why did my run return no results?

Either nothing matched the filters, or the date has no publications (weekends, public holidays). The free `no-results` row says which dates were searched. Try a longer date range or fewer filters.

#### Can I get the winner of a tender?

Yes: choose the notice type **Contract award notice**. Award rows have `awardedValue`; winner names are in the notice itself (follow the TED link). The Actor does not return them.

#### Can I find tenders for a specific company type, such as cleaning or catering?

Use a **sector** preset or CPV codes, and optionally keywords. For example *cleaning* + country `DE` + contract notices.

#### How do I get only new tenders every day?

Schedule the Actor every morning with empty dates: it returns the last working day. Use `noticeNumber` to skip notices you already have.

### More tools from the same developer

All pay-per-result, no proxy or login needed, built and maintained by the same developer:

**Website audits**

- [Website Accessibility Checker: WCAG 2.2 & EAA](https://apify.com/offerastudio/website-accessibility-audit): accessibility issues with fixes, SEO basics and security headers.
- [Cookie & Tracker Audit: GDPR Consent Checker](https://apify.com/offerastudio/cookie-tracker-audit): cookies and tracking tags that load before consent.
- [AI Crawler Access Checker: robots.txt & llms.txt](https://apify.com/offerastudio/ai-crawler-access-audit): which AI crawlers a site allows, plus llms.txt.
- [Structured Data Validator: Schema & Rich Results](https://apify.com/offerastudio/structured-data-validator): JSON-LD and Microdata checked against Google's rich result rules.
- [Website Change Monitor: Diffs, Prices & Alerts](https://apify.com/offerastudio/website-change-monitor): get a row only when a page changes, with a clean diff.
- [Policy Change Monitor: Privacy & Terms Tracker](https://apify.com/offerastudio/policy-change-monitor): privacy policy and terms changes, classified clause by clause.
- [SaaS Pricing Monitor: Track Competitor Plans](https://apify.com/offerastudio/saas-pricing-monitor): competitor pricing plans as structured data, with price-change diffs.
- [Sitemap Change Monitor: New & Removed URLs](https://apify.com/offerastudio/sitemap-change-monitor): new, removed and changed URLs from a site's sitemaps.
- [Site SEO Crawler: Broken Links & On-Page Audit](https://apify.com/offerastudio/site-seo-crawler-audit): site-wide crawl for broken links, redirects and on-page SEO issues.
- [Website Tech Stack Detector: Bulk Lead Filters](https://apify.com/offerastudio/website-tech-stack-detector): technologies used by websites, with filters for lead lists.
- [Domain Availability & Expiry Checker (RDAP)](https://apify.com/offerastudio/domain-whois-availability): domain availability, registrar and expiry dates from RDAP.
- [Status Page SLA Monitor: Uptime & Incidents](https://apify.com/offerastudio/status-page-sla-monitor): SaaS vendor uptime, incidents and a monthly SLA table from public status pages.

**Company data and compliance**

- [Company Contact Finder: Emails, Phones & Socials](https://apify.com/offerastudio/company-contact-finder): contact details published on company websites.
- [UK New Companies Feed: Companies House Daily](https://apify.com/offerastudio/uk-new-companies-feed): newly incorporated UK companies with sector filters.
- [EU VAT Number Validator: Bulk VIES Checker](https://apify.com/offerastudio/eu-vat-number-validator): bulk VAT checks with name, address and consultation number.
- [LEI Corporate Tree: GLEIF Parents & Subsidiaries](https://apify.com/offerastudio/gleif-lei-corporate-tree): LEI lookup with parents, subsidiaries and a KYC summary.
- [UK Company Distress Watch: Insolvency Alerts](https://apify.com/offerastudio/uk-company-distress-watch): administrations, liquidations and winding-up petitions from The Gazette.
- [IBAN Validator: Bulk Check & Bank Lookup](https://apify.com/offerastudio/iban-bank-validator): IBAN format and checksum, plus bank name and BIC where open data exists.
- [Sanctions Screening: OFAC, EU, UN & UK Lists](https://apify.com/offerastudio/sanctions-screening): names screened against official sanctions lists, with match scores.
- [OSHA & EPA Violation Monitor: Fines by Company](https://apify.com/offerastudio/osha-epa-violation-monitor): US OSHA and EPA enforcement cases and penalties by company.
- [Email List Precheck: Syntax, MX & Disposable Check](https://apify.com/offerastudio/email-list-precheck): cheap email list hygiene before a real verification.
- [UK Company Officer Changes: Director & PSC Alerts](https://apify.com/offerastudio/uk-company-officer-changes): director, owner, address and status changes for a watchlist of UK companies.
- [FDA Warning Letters Monitor: By Company & Subject](https://apify.com/offerastudio/fda-warning-letters-monitor): FDA warning letters by company and subject, with cited regulations.
- [Supplier Risk Report: Sanctions, VAT & Insolvency](https://apify.com/offerastudio/supplier-risk-report): one risk row per supplier from eight official registers, with changes since last run.
- [Brand Impersonation Domain Monitor: Look-alikes](https://apify.com/offerastudio/brand-impersonation-domain-monitor): look-alike domains and certificates that imitate your brand, with a risk score.

**Media and AI**

- [Audio & Video Transcriber: Podcasts, SRT, Speakers](https://apify.com/offerastudio/audio-video-transcriber): audio, video, podcasts and social links to text, SRT and VTT.
- [Podcast Mention Alerts: Brand Mentions by Second](https://apify.com/offerastudio/podcast-mention-alerts): where your brand is said in new podcast episodes, with the exact second.
- [News Brand Mentions Monitor: New Articles Only](https://apify.com/offerastudio/news-brand-mentions-monitor): new news articles about your brand, people or topics.
- [YouTube Channel Monitor: New Videos & Growth](https://apify.com/offerastudio/youtube-channel-monitor): new videos and view growth of the channels you watch.

**Market signals**

- [US WARN Layoff Notices: 12 States Daily Feed](https://apify.com/offerastudio/us-warn-layoff-notices): layoff and plant closure notices from official state sources.
- [US Product Recalls Monitor: FDA & CPSC Feed](https://apify.com/offerastudio/us-product-recalls-monitor): FDA and CPSC recalls in one feed, with severity.
- [Liquor License Openings: New Bars & Stores (US)](https://apify.com/offerastudio/liquor-license-openings): new US liquor licences from official state open data.
- [Clinical Trials Change Monitor: Status & Updates](https://apify.com/offerastudio/clinicaltrials-change-monitor): status, enrollment and results changes on ClinicalTrials.gov studies.
- [Career Site Jobs Monitor: ATS Jobs & New Roles](https://apify.com/offerastudio/career-site-jobs-monitor): open roles from company career sites, with new and closed roles since the last run.
- [App Reviews Monitor: App Store & Google Play](https://apify.com/offerastudio/app-store-reviews-monitor): app reviews from both stores, only new ones in monitor mode.
- [US Federal Contracts Feed: SAM.gov & USAspending](https://apify.com/offerastudio/us-federal-contracts-feed): SAM.gov contract opportunities with the buyer's award history.
- [Grants.gov Opportunities: US Federal Grants Feed](https://apify.com/offerastudio/grants-gov-opportunities): US federal grant opportunities by keyword, eligibility and agency.
- [Federal Register Monitor: US Rules & Notices Feed](https://apify.com/offerastudio/federal-register-monitor): new US rules, proposed rules and notices by agency or topic.
- [B2B Sales Trigger Feed: Hiring + Tech Leads](https://apify.com/offerastudio/b2b-sales-trigger-feed): companies hiring for a role and using (or not using) a technology, with contacts.
- [Local Business Leads: OpenStreetMap, No Website](https://apify.com/offerastudio/local-business-leads-osm): local businesses by city and category, including those with no website.
- [Solana Token Pair Monitor: New & Trending Pairs](https://apify.com/offerastudio/solana-token-pair-monitor): new and trending Solana pairs with liquidity, volume and safety flags.

### Feedback

Missing a filter or a field? Open an issue on the **Issues** tab.

# Changelog

This Actor's version history is a separate document: https://apify.com/offerastudio/eu-tender-feed/changelog.md

# Actor input Schema

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

First TED publication date, e.g. 2026-09-30, or a relative date like "1 day" (yesterday). Empty = the last working day before today (TED publishes nothing at weekends). At most 366 days per run.

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

Last publication date, inclusive. Empty = today (or the same day as the default "Published from"). For a daily feed, schedule the Actor every morning and leave both dates empty.

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

Countries of the buying organisation: two-letter codes (DE, FR, PL; EL for Greece, UK for the United Kingdom) or three-letter codes. Empty = all countries.

## `sectors` (type: `array`):

Pick sectors; each stands for CPV codes (for example IT services = division 72). Combined with the CPV codes below: a notice matches when it has any of them.

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

CPV codes (72000000 or 72000000-8) or prefixes (72, 7226). A code ending in zeros stands for its whole group: 72000000 = every IT services code. At most 50 with the sectors.

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

Words or phrases to find in the title or description (any of them; several words are searched as a phrase). Up to 10.

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

Contract notices are calls for tenders; contract award notices say who won; prior information notices announce planned tenders. Empty = contract notices.

## `minEstimatedValue` (type: `integer`):

Only notices with an estimated value (for award notices: the awarded value) of at least this amount, in the currency below. Notices without a stated value are left out when this is set. Values are not converted between currencies.

## `valueCurrency` (type: `string`):

Three-letter currency code the minimum value is in. Only notices stated in this currency are compared.

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

Stop after this many notices (1–5,000). You are charged per notice returned.

## Actor input object example

```json
{
  "sectors": [
    "it-services"
  ],
  "noticeTypes": [
    "contract-notice"
  ],
  "valueCurrency": "EUR",
  "maxResults": 50
}
```

# Actor output Schema

## `tenders` (type: `string`):

No description

## `details` (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 = {
    "sectors": [
        "it-services"
    ],
    "noticeTypes": [
        "contract-notice"
    ],
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("offerastudio/eu-tender-feed").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 = {
    "sectors": ["it-services"],
    "noticeTypes": ["contract-notice"],
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("offerastudio/eu-tender-feed").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 '{
  "sectors": [
    "it-services"
  ],
  "noticeTypes": [
    "contract-notice"
  ],
  "maxResults": 50
}' |
apify call offerastudio/eu-tender-feed --silent --output-dataset

```

## MCP server setup

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

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/qfNFdtNja5k9Vooh9/builds/w4J8dKo4qmj2VN6WT/openapi.json
