EU Tender Monitor - TED Alerts

Alerts the moment a new EU public tender matching your business is published on TED. Filter by CPV codes, keywords in any EU language, countries and NUTS regions; alerts only on never-seen tenders via the official TED API. Clean output, no buyer contact persons. No personal data in the output.

$2.00 / 1,000 · 100.0% success over 29 public runs in the last 30 days.

Run it on Apify → Free to try - runs bill per result on your own account.

What you give it

Every field is optional unless marked; sensible defaults do the rest.

FieldTypeWhat it doesDefault
keywords array Alert on tenders whose title contains ANY of these words - in any EU language. TED translates every title into all 24 official languages and the search covers all of them, so "software", "logiciel" or "Straßenbau" all work. Example: ["software", "cloud"]. Combine with CPV codes for precision; at least one of keywords, cpvCodes, countries or nutsCodes is required. []
cpvCodes array EU procurement classification codes (CPV), the most reliable filter - language-free. Hierarchical: "72000000" (IT services) matches every sub-code like 72266000, and a short prefix such as "72" works too. Example: ["72000000", "48000000"]. Find codes at simap.ted.europa.eu (CPV). ["72000000"]
countries array Only alert on tenders from buyers in these countries. Two- or three-letter ISO codes, e.g. ["BE", "NL"] or ["BEL", "NLD"]. Empty = all of TED (EU/EEA and beyond). []
nutsCodes array Only alert on tenders performed in these EU NUTS regions, hierarchical prefix match: "BE2" covers all of Flanders, "FR10" the Paris region. Tenders whose place of performance is a whole country match via that country's code in countries. Example: ["BE2", "NL3"]. []
noticeTypes array Which notice stages to monitor. Default: contract notices (open competitions you can still bid on). Add prior-information notices to see demand earlier, or award notices to track who wins. ["contract-notice"]
alsoMatchDescriptions boolean Additionally match your keywords against tender descriptions. Honest limitation: unlike titles, descriptions exist only in the notice's source language, so a Polish tender's description only matches Polish keywords. Titles are always matched in all 24 languages. False
minValueEur integer Only alert on tenders with an estimated or total value of at least this many euros. Tenders that publish no value (most of them) always pass this filter - TED makes values optional, and silently dropping them would hide real opportunities. -
lookbackDays integer How many days of past notices the FIRST run of a profile loads as its baseline. Later runs automatically query from the previous run with one day of overlap - re-alerting a seen notice is impossible. TED publishes on working days only, so weekend runs find nothing new. 7
alertOn string "new" alerts once per tender. "new-and-updated" also alerts when a tender you have already seen is changed by a later corrigendum or change notice (marked isUpdate: true). new
emitBaseline boolean On the very first run of a profile, push the currently matching tenders (flagged isBaseline: true, charged at the lower baseline price) so you start with today's full picture. Turn off to seed silently and only ever receive new alerts. True
resetState boolean Discard this profile's memory of already-seen tenders and start over with a fresh baseline run. One-shot switch: turn it back off afterwards. False
maxItems integer Upper bound on items pushed per run (baseline or alerts). Matches beyond the cap are not lost: they alert on the next run. 500
stateStoreName string Named key-value store holding the monitor's seen-tender memory. Only change this to run fully isolated monitor instances. ted-monitor-state

What you get back

One JSON object per result, with exactly these fields - no seller identities, no contact data, ever.

FieldTypeMeaning
publicationNumber string The notice's TED publication number - its stable public identifier.
title string Notice title in English (TED translates every title into all 24 EU languages; the buyer's free-text tail stays in its source language).
buyerName string The buying organization's name, in the notice's source language. Organization-level data only.
buyerCountry string The buyer's country, three-letter ISO code.
cpvCodes array All CPV classification codes on the notice (procedure and lots), deduplicated. Reusable as the cpvCodes input.
nutsCodes array NUTS codes of the places of performance, deduplicated.
performanceCountries array Countries of performance (three-letter ISO), for lots performed country-wide rather than in a NUTS region.
noticeCategory string Canonical notice stage, from the notice's TED form type. Reusable as the noticeTypes input (modification/other arrive only via change tracking).
sourceNoticeType string TED's own notice subtype code, unnormalized.
description string Tender description(s) in the notice's source language - TED does not translate descriptions. Multiple lots are separated by blank lines.
sourceLanguage string The notice's source language (ISO 639-2 code) - the language of buyerName and description.
publicationDate string Date the notice was published in the OJ S, normalized to YYYY-MM-DD.
deadline string Earliest tender-receipt deadline across the notice's lots, normalized to YYYY-MM-DD. Present on competition notices.
estimatedValueEur number Highest estimated lot value in euros, when the buyer published one. Most notices publish no value - absence does not mean small.
totalValueEur number Total procurement value in euros, mostly on award notices.
winnerNames array Winning tenderers' organization names, on award notices. Organization-level data only.
winnerCountries array Winning tenderers' countries (three-letter ISO), on award notices.
changeNoticeVersion string TED change-notice version identifier. When it references an earlier publication number, this notice amends that notice.
url string Link to the notice on ted.europa.eu (English page).
isBaseline boolean True on items from a profile's first run (the current baseline). False on real new-tender alerts.
isUpdate boolean True when the alert is a change to an already-seen tender (alertOn: new-and-updated).

Health

100.0% success over 29 public runs in the last 30 days. Live record, failures included: status page.

Full documentation, examples and the AI-assistant prompt live on the store page.