EU Tenders Feed — TED Procurement Search & Alerts avatar

EU Tenders Feed — TED Procurement Search & Alerts

Pricing

from $1.00 / 1,000 tender records

Go to Apify Store
EU Tenders Feed — TED Procurement Search & Alerts

EU Tenders Feed — TED Procurement Search & Alerts

Search and monitor EU public procurement tenders from the official TED API. Filter by CPV codes, countries, keywords, and value. Alert mode dedupes — schedule it and get only NEW tenders. €700B+/year market. $1 per 1,000 records, normalized JSON output.

Pricing

from $1.00 / 1,000 tender records

Rating

0.0

(0)

Developer

Bikram

Bikram

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Share

EU Tenders Feed — TED Procurement Search & Alerts (CPV, Country, Keywords)

Search and monitor EU public procurement data without parsing XML or building your own TED integration. This Actor wraps the official TED API (Tenders Electronic Daily — the EU's public procurement journal at ted.europa.eu, where European public tenders above EU thresholds are published) and turns it into a clean, normalized EU tenders API: filter by CPV code, buyer country, keywords, publication window and contract value, and get back flat JSON records ready for spreadsheets, CRMs, dashboards or AI agents.

Turn on alert mode and run it on an Apify Schedule to get a daily feed of only the tenders you haven't seen yet — tender alerts without a SaaS subscription.

Features

  • Official source — queries the public TED Search API (POST https://api.ted.europa.eu/v3/notices/search), the same data behind ted.europa.eu. No scraping, no stale mirrors.
  • Simple filters, expert query underneath — CPV codes, buyer countries (2- or 3-letter ISO codes), full-text keywords, publication window (7d, 30d, or an absolute date) and minimum EUR value are compiled into a TED expert query for you.
  • Normalized output — TED returns multilingual nested structures; this Actor flattens each notice into one tidy record with stable field names (noticeId, title, buyerName, valueEur, deadlineDate, …). Fields TED doesn't provide are null — never guessed.
  • Tender alerts (dedupe built in) — alert mode remembers which notice IDs it already output for your exact filter combination and emits only new ones. Schedule it daily and pipe new tenders to email, Slack or your pipeline.
  • Fair pay-per-event pricing — $1 per 1,000 tender records. You pay only for records actually written to the dataset: runs that deliver nothing are never charged, and skipped duplicates are free.
  • MCP-ready — callable as a tool from Claude, Cursor, or any MCP client via Apify's MCP server.

Input example

{
"keywords": "software development",
"cpvCodes": ["72000000"],
"countries": ["DE", "FR"],
"publishedSince": "7d",
"maxRecords": 100,
"alertMode": false,
"minValue": 100000
}
FieldTypeDefaultDescription
keywordsstringnoneFull-text phrase matched against the whole notice (TED FT field)
cpvCodesarraynoneCPV codes, e.g. 72000000 (IT services), 45000000 (construction works)
countriesarraynoneBuyer country ISO codes — DE or DEU both accepted
publishedSincestring7dLookback window (7d, 30d) or absolute date (2026-06-01)
maxRecordsinteger100Max records to output per run (1–5000)
alertModebooleanfalseOutput only notices not seen in previous runs with the same filters
minValueintegernoneMinimum contract value in EUR (matches EUR-denominated values only — see FAQ)

At least one of keywords, cpvCodes or countries is required.

Output example

Each notice becomes one dataset item. This is a real record returned by the TED API during development (June 2026):

{
"noticeId": "402921-2026",
"title": "Germany – Programming services of application software – Beschaffung einer KI-Plattform",
"buyerName": "Hamburgische Investitions- und Förderbank (IFB)",
"buyerCountry": "DEU",
"cpvCodes": ["72212000"],
"valueEur": null,
"publicationDate": "2026-06-12",
"deadlineDate": null,
"procedureType": "neg-w-call",
"tedUrl": "https://ted.europa.eu/en/notice/-/detail/402921-2026",
"description": "Die IFB Hamburg möchte mit der Einführung einer KI-Plattform auf Basis von Large Language Models (LLM) die Potenziale dieser innovativen Technologie nutzen…"
}

Field notes:

  • noticeId is TED's publication number — open the notice at https://ted.europa.eu/en/notice/-/detail/<noticeId>.
  • title, buyerName and description prefer the English variant when TED provides one, otherwise the first available language.
  • valueEur is the notice's awarded total value, or its estimated value when no award value exists — only when stated in EUR. Values published in other currencies are not converted (no made-up exchange rates) and yield null.
  • deadlineDate is the earliest tender-receipt deadline across the notice's lots; null for notice types without one (e.g. award notices).
  • description is truncated to 500 characters; the full text is on the TED notice page.

Tender alerts: alert mode + Apify Schedules

  1. Set your filters (e.g. cpvCodes: ["72000000"], countries: ["DE"]) and alertMode: true.
  2. Create an Apify Schedule that runs the Actor daily.
  3. Each run outputs only notices that previous runs with the same filters haven't output yet — the dataset of every run is purely "what's new since last time".
  4. Add an integration (email, Slack, webhook, Make/Zapier) on the Actor run to deliver the new tenders wherever you work.

How it works: seen notice IDs are stored in a named key-value store (eu-tenders-seen-<hash>), one per filter combination — the hash covers keywords, cpvCodes, countries and minValue, so changing publishedSince or maxRecords won't reset your alert history, while changing the actual filters starts a fresh history. IDs are remembered for 400 days. A run that outputs zero new tenders succeeds (that's a normal alert outcome) and charges nothing.

Pricing — $1 per 1,000 tender records

This Actor uses Apify's pay-per-event model with one simple event:

EventPriceWhen it's charged
tender-record$0.001Once per tender record written to the dataset

That's $1 per 1,000 tender records. You are never charged for a record that wasn't written to the dataset: a run that delivers nothing charges nothing, and in alert mode already-seen notices are skipped for free — you pay only for records you actually receive. You can also set a maximum cost per run in Apify Console; the Actor stops gracefully when the limit is reached and does not mark unpushed notices as seen, so they arrive in the next run.

Use from Claude, Cursor & other AI agents (MCP)

This Actor works as a tool over the Model Context Protocol. Add Apify's MCP server to your client and your agent can search EU tenders on demand:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/sse?actors=YOUR_USERNAME/eu-tenders-feed",
"headers": {
"Authorization": "Bearer YOUR_APIFY_TOKEN"
}
}
}
}

Then ask your agent things like: "Find IT-services tenders published in Germany this week with a value above €500k and summarize the top five" — the agent calls this Actor, gets normalized tender records back, and works with them directly.

You can also call it from code via the Apify API:

curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~eu-tenders-feed/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"cpvCodes": ["72000000"], "countries": ["DE"], "publishedSince": "7d", "maxRecords": 50}'

Data source & honesty notes

All data comes from the official, public TED Search API operated by the Publications Office of the European Union. The Search API is openly accessible for published notices (no API key required). This Actor adds filtering convenience, normalization and alert-mode dedupe on top — it does not modify, enrich or guess any values. Missing fields are null. This Actor is not affiliated with or endorsed by the European Union or the Publications Office; TED data is reusable under the EU's open-data policy (check TED's legal notice for reuse conditions).

FAQ

How do I get EU tender data via API without registering for an API key? TED's Search API is open for published notices, and this Actor handles the request format, expert-query syntax, pagination and field normalization for you. Set your filters, run, and export the dataset as JSON, CSV or Excel — or call the Actor through the Apify API or MCP.

What are CPV codes and which one should I use? CPV (Common Procurement Vocabulary) is the EU's classification for procurement: e.g. 72000000 = IT services, 45000000 = construction works, 33600000 = pharmaceuticals. Searching a parent code also matches its subcategories on TED. The full list is on SIMAP/EU Vocabularies.

Why is valueEur null on some notices, and how does minValue work? Many notices simply don't state a value, and TED does not normalize currencies. valueEur is filled only when the notice states a value in EUR (awarded total preferred, otherwise the estimate). Consequently minValue only matches notices with an EUR-denominated value at or above your threshold — notices priced in SEK, PLN, etc. are excluded when the filter is set, because converting them would mean inventing exchange rates.

How fresh is the data and how often should I schedule alerts? Notices are published on TED on working days (typically by 09:00 CET). A daily schedule with publishedSince: "7d" and alertMode: true is the sweet spot: the 7-day window safely covers weekends and late indexing, while dedupe guarantees you still only get each notice once.

Can I monitor several different searches at once? Yes — create one Schedule (or Task) per filter combination. Each combination gets its own independent seen-history, so alerts never bleed into each other. Records across all of them are charged at the same flat $1 per 1,000.

TED API · EU tenders API · public procurement data EU · tender alerts · TED Tenders Electronic Daily search · CPV code tender search · EU government contracts feed · procurement notices API Europe


Built on the official TED Search API (Publications Office of the EU). Not affiliated with the European Union.