EU Public Tenders (TED) Notices avatar

EU Public Tenders (TED) Notices

Pricing

Pay per event

Go to Apify Store
EU Public Tenders (TED) Notices

EU Public Tenders (TED) Notices

New EU public procurement notices from TED by country, CPV and date: buyer, title, value, deadline, links. Pay per notice, no subscription.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Fodor Codrut

Fodor Codrut

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Returns new EU public procurement notices from TED (Tenders Electronic Daily) as clean JSON: one record per notice with buyer, title, sector codes, estimated value, deadline and links, filtered by country, CPV sector and publication date.

What you get

Every notice TED published in your window, flattened from the official TED Search API: publication number, English title (plus the original-language title), buyer organisation and country, notice type (contract notice, award, modification), procedure type, contract nature, CPV codes, estimated value and currency, earliest tender deadline, NUTS codes of the place of performance, and direct links to the notice page, PDF and XML. No contact persons, emails or phone numbers are collected.

Who it is for

Bid managers, tender-alert services, procurement consultancies and public-sector sales teams who need a daily feed of EU tenders for one or more countries or sectors without reading TED by hand or learning its expert query syntax. Works for Romania and the whole EU/EEA.

Use cases

  1. Daily tender alerts for Romania. Run with the defaults every morning and push new cn-standard notices (open tenders) to Slack, email or a CRM. Example filter: countries: ["ROU"], noticeTypes: ["cn-standard"], sinceDays: 1.
  2. Sector watch across CEE. Track IT services tenders in Poland, Czechia and Hungary: countries: ["POL","CZE","HUN"], cpvCodes: ["72000000"], then rank by estimatedValue and deadline.
  3. Award intelligence. Pull can-standard notices for a sector to see which buyers award what and at which value, feeding a pipeline or a market report.

Input

Runs with zero configuration (Romania, all notice types, last 7 days, 100 notices). Optional fields:

{
"countries": ["ROU", "POL"],
"cpvCodes": ["72000000"],
"noticeTypes": ["cn-standard"],
"sinceDays": 7,
"maxItems": 500
}
FieldDefaultMeaning
countries["ROU"]ISO 3166-1 alpha-3 codes of the place of performance. Empty = all countries.
cpvCodes[]8-digit CPV codes, e.g. 45000000 construction, 72000000 IT services. Empty = all sectors.
noticeTypes[]eForms types: cn-standard (open tender), can-standard (award), can-modif, pin-only. Empty = all.
sinceDays7Only notices published in the last N days (1 to 365).
query""Advanced: a raw TED expert query that replaces the filters above.
maxItems100Stop after this many validated notices. This is your cost cap.

Output

One dataset item per notice. Example (real notice, fetched 2026-10-19):

{
"id": "700436-2026",
"title": "Romania – Timber harvesting services – Servicii de exploatare forestiera - III - DS Timis",
"titleNative": "România – Servicii de exploatare forestieră – Servicii de exploatare forestiera - III - DS Timis",
"buyerOrganisation": "REGIA NATIONALA A PADURILOR - ROMSILVA RA",
"buyerCountry": "ROU",
"publicationDate": "2026-10-12",
"deadline": "2026-11-12",
"noticeType": "cn-standard",
"procedureType": "open",
"contractNature": ["services"],
"cpvCodes": ["77211100"],
"mainCpv": "77211100",
"estimatedValue": 2828588.82,
"currency": "RON",
"placeOfPerformance": ["RO424", "ROU"],
"url": "https://ted.europa.eu/en/notice/-/detail/700436-2026",
"pdfUrl": "https://ted.europa.eu/en/notice/700436-2026/pdf",
"xmlUrl": "https://ted.europa.eu/en/notice/700436-2026/xml",
"sourceUrl": "https://api.ted.europa.eu/v3/notices/search",
"fetchedAt": "2026-10-19T18:00:00.000Z"
}

estimatedValue is the sum of the lot values when all lots share one currency, otherwise the first lot's value; it is null when the buyer did not publish a value. deadline is the earliest lot deadline and is null for award and modification notices. Every item is validated against a strict schema before it is saved; invalid or duplicate notices are dropped and never charged.

Pricing

Pay per event, no subscription. You pay only for what the run produces:

EventPriceWhen
Actor start$0.0045once per run
Result item$0.0045per validated notice saved to the dataset

Use maxItems as your cost cap. Example: 500 notices cost about $2.25 plus the start fee. Invalid or duplicate records are never charged.

Limits and refresh

  • Source: TED, the official EU procurement journal (https://api.ted.europa.eu/v3/notices/search). Public data only; notices are freely reusable under the EU's reuse policy. No personal data is collected.
  • Crawling is polite: one request at a time, 100 notices per request, a randomized pause between requests, and the run stops on any block signal. A run of 100 notices takes about 10 seconds; 1,000 notices about 1 minute.
  • Data freshness: TED publishes new notices every working day; run daily with sinceDays: 1 for a complete feed, or weekly with the default 7.
  • Limits: at most 5,000 notices per run (100 pages). For historical pulls, narrow by country or CPV and raise sinceDays.
  • If TED changes its API fields, the Actor is repaired automatically and a new version is published.

Use it from Claude, Cursor or any MCP client

This Actor is available as a tool through the Apify MCP server. Add the server to your client:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=opendatafeeds/eu-ted-tender-notices",
"headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
}
}
}

Then ask: "Use EU Public Tenders (TED) Notices to get this week's open IT tenders in Poland." The tool name is opendatafeeds--eu-ted-tender-notices.

You can also call it from code:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('opendatafeeds/eu-ted-tender-notices').call({ countries: ['ROU'], noticeTypes: ['cn-standard'], sinceDays: 1, maxItems: 200 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Support

Open an issue on the Actor's Issues tab. Bug reports with the run ID are fixed first.