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.
Every field is optional unless marked; sensible defaults do the rest.
| Field | Type | What it does | Default |
|---|---|---|---|
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 |
One JSON object per result, with exactly these fields - no seller identities, no contact data, ever.
| Field | Type | Meaning |
|---|---|---|
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). |
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.