TED Tender Monitor – New EU Public Tenders & Award Alerts avatar

TED Tender Monitor – New EU Public Tenders & Award Alerts

Pricing

Pay per usage

Go to Apify Store
TED Tender Monitor – New EU Public Tenders & Award Alerts

TED Tender Monitor – New EU Public Tenders & Award Alerts

Monitors EU public tenders on TED (Tenders Electronic Daily) with simple filters (keywords, CPV codes, countries, value) and outputs only what is new since the last run: new tenders, corrigenda, deadline changes, awards with winner and value, and deadline reminders.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Andres Garcia

Andres Garcia

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Watch EU public tenders on TED (Tenders Electronic Daily), the official EU procurement journal, and get only what is new since your last run: new tenders that match your keywords, CPV codes, countries and minimum value, plus the life of the tenders you follow — corrigenda, deadline changes, awards (with winner and value) and a reminder before the deadline.

Schedule it every morning and receive the news by email, Slack or Google Sheets. When nothing happened, the run outputs nothing and costs almost nothing.

Launch: free for the first weeks. While the Actor is new you only pay the small Apify platform usage of each run. See Pricing.

This Actor is an independent tool, not affiliated with or endorsed by the European Union or the Publications Office. It uses the official, public TED Search API (no login, no scraping of web pages). Source of the data: TED – Tenders Electronic Daily, © European Union. Procurement notices may be reused for commercial and non-commercial purposes (Commission Decision 2011/833/EU).

What problem does it solve?

Thousands of notices are published on TED every working day. If you bid for public contracts, or advise companies that do, you need to know:

  • which new tenders of your sector were published in your countries;
  • when a tender you are preparing gets a corrigendum or its deadline moves;
  • who won a tender and for how much;
  • that a deadline is a few days away.

Searching TED by hand every day is slow, and most tools return the same full list of notices on every run, so you still have to work out what is new.

How is it different from a TED scraper?

Typical TED scraperTED Tender Monitor
Output on every runEvery notice of the search, againOnly notices and changes since the previous run
Run with nothing newSame rows againEmpty dataset (and no event charges)
Links between noticesNoneFollows each tender: contract notice → corrigendum → award
Deadline changesYou compare by handDEADLINE_CHANGED with old and new deadline
AwardsSeparate searchAWARDED with winner and awarded value, for the tenders you follow (or for every matching award with includeAllAwards)
RemindersNoDEADLINE_SOON N days before the deadline
QueryTED expert query syntaxSimple fields: keywords, CPV codes, countries, minimum value

Each monitor keeps its state (notices already seen and tenders followed) in a named key-value store in your Apify account, so every run is compared with the previous run of the same monitor.

Who uses it

  • SMEs and companies that bid: new tenders of their sector and countries, every morning.
  • Tender consultancies: one monitor per client.
  • B2B sales teams: who wins the tenders of their market (awards with winner and value).
  • Analysts and journalists: follow a sector or a buyer.

Events

eventTypeWhenExtra fields
NEW_TENDERA contract notice or prior information notice that matches your filters and was not seen before. The tender is then followed.deadline, estimatedValue, currency
CORRIGENDUMA change notice was published for a followed tender (without deadline change).newValue: change description published by the buyer, or the TED change reason code (e.g. update-add)
DEADLINE_CHANGEDA change notice moved the submission deadline of a followed tender. One row per notice (it replaces CORRIGENDUM).oldValue, newValue: previous and new deadline
AWARDEDAn award notice was published for a followed tender (or, with includeAllAwards, for any tender matching your filters).awardedTo, awardedValue, awardedCurrency
DEADLINE_SOONA followed tender, not yet awarded, has deadlineAlertDays days or fewer left. Sent once per tender.newValue: whole days left

Corrigenda and awards are reported for the tenders this monitor found as NEW_TENDER, even when the new notice no longer matches your keywords or value (the Actor asks TED for every notice of the procedures it follows).

Input

FieldTypeDefaultDescription
monitorNamestringrequiredName of this monitor, e.g. cleaning-spain. Runs with the same name are compared with each other.
keywordsarray of strings–Words or phrases searched in the title and description, in any language (limpieza, cleaning services).
cpvCodesarray of strings–CPV codes or prefixes: 90910000 or 909 (everything under 909).
buyerCountriesarray of stringsallISO alpha-3 codes of the buyer's country: ESP, PRT, FRA, DEU… (ES, PT… are accepted too).
noticeTypesarrayall fourcontract-notice, corrigendum, award, prior-information. Must include contract-notice or prior-information, or award with includeAllAwards.
minEstimatedValuenumber–Minimum estimated value in euros for new tenders. Other currencies are converted with approximate rates. Tenders that do not publish a value are still reported.
deadlineAlertDaysinteger7Days before the deadline for DEADLINE_SOON. 0 disables it.
lookbackDaysinteger7First run only: how many days back to report as new.
maxNoticesPerRuninteger500Safety limit of new notices read per run; the next run continues where this one stopped.
includeAllAwardsbooleanfalseAlso report every award notice matching your filters, even for tenders this monitor did not follow: who wins contracts in your sector, and for how much.

At least one of keywords, cpvCodes or buyerCountries is required. A notice matches when it contains any keyword or any CPV code, and its buyer is in one of the countries.

{
"monitorName": "limpieza-espana",
"keywords": ["limpieza", "cleaning services"],
"cpvCodes": ["909"],
"buyerCountries": ["ESP"],
"minEstimatedValue": 50000,
"deadlineAlertDays": 7,
"lookbackDays": 7
}

The first run reports the notices of the last lookbackDays days as NEW_TENDER (tenders whose deadline already passed are skipped). Later runs continue from the last processed publication date (with a one-day overlap, de-duplicated), so you never get the same notice twice.

Output

Each dataset item is one event (examples with fictitious buyers and companies):

{
"eventType": "NEW_TENDER",
"noticeId": "701234-2026",
"procedureId": "3f2a9c10-1111-4c2e-9d55-0a1b2c3d4e5f",
"noticeType": "cn-standard",
"title": "Servicio de limpieza de edificios municipales",
"titleEn": "Spain – Cleaning services – Servicio de limpieza de edificios municipales",
"description": "Limpieza de los edificios municipales y colegios públicos del Ayuntamiento…",
"descriptionEn": null,
"language": "spa",
"buyerName": "Ayuntamiento de Ejemplo",
"buyerCountry": "ESP",
"cpvCodes": ["90910000", "90919200"],
"estimatedValue": 480000,
"currency": "EUR",
"deadline": "2026-11-09T14:00:00+01:00",
"awardedTo": null,
"awardedValue": null,
"awardedCurrency": null,
"oldValue": null,
"newValue": null,
"noticeUrl": "https://ted.europa.eu/en/notice/-/detail/701234-2026",
"publicationDate": "2026-10-12",
"detectedAt": "2026-10-12T06:00:00.000Z",
"monitorName": "limpieza-espana"
}

A deadline change of a followed tender (other fields as above):

{
"eventType": "DEADLINE_CHANGED",
"noticeId": "712345-2026",
"procedureId": "3f2a9c10-1111-4c2e-9d55-0a1b2c3d4e5f",
"deadline": "2026-11-16T14:00:00+01:00",
"oldValue": "2026-11-09T14:00:00+01:00",
"newValue": "2026-11-16T14:00:00+01:00",
"noticeUrl": "https://ted.europa.eu/en/notice/-/detail/712345-2026"
}

An award:

{
"eventType": "AWARDED",
"noticeId": "790001-2027",
"procedureId": "3f2a9c10-1111-4c2e-9d55-0a1b2c3d4e5f",
"awardedTo": "Limpiezas Ejemplo, S.L.",
"awardedValue": 455000,
"awardedCurrency": "EUR"
}

title/description are in the original language of the notice; titleEn is the English title published by TED and descriptionEn the English description when the buyer provided one. Descriptions are cut at 1,000 characters (open noticeUrl for the full notice). deadline is the earliest deadline among the lots.

Export the dataset as JSON, CSV, Excel or HTML, or read it with the Apify API. The Tender events view in the Output tab shows the main columns as a table. At the end of each run the log shows a summary: notices checked, events by type and errors.

How to run it every day

  1. Open the Actor in Apify Console, fill in the input and click Save as a new task (e.g. "Cleaning tenders Spain").
  2. Go to Schedules → Create new schedule, choose every day at 07:00 (cron 0 7 * * *, your time zone) or only working days (0 7 * * 1-5), add the task and save.
  3. Keep the same monitorName in the task: that name links each run to the previous one. Use one task (and one monitor name) per client or topic.

TED publishes a new edition of its journal every working day (Monday to Friday), so one run per morning is enough.

Slack, email and Google Sheets

Use Apify integrations on the task:

  • Email: task → Integrations → Gmail: send an email after each successful run with the dataset attached (CSV or Excel).
  • Slack: task → Integrations → Slack: post a message to a channel after each run, with a link to the dataset.
  • Google Sheets: use Zapier, Make or n8n (their Apify app can start on a finished run and read its dataset items) to append every event to a sheet, or the Google Drive integration to save each run's dataset as a file.
  • Failure alerts: in the task's monitoring settings, add an alert for failed runs.

Because the dataset only contains news, you can send it as it is: an empty dataset means nothing happened.

Pricing

Launch period: free for the first weeks. After it, the Actor switches to the pay-per-event prices below. Apify notifies every user at least 14 days before a pricing change.

EventWhenPrice
Actor startOnce per run (charged by Apify)Minimal
tender-eventEach row in the dataset (any event type)$0.006 ($6 per 1,000)

You pay only for what we tell you. A run without news charges only the start. The platform usage is small: no browser, 256 MB of memory, a few seconds per run.

Example: a typical filter with about 10 events per day → 300 events per month → about $1.80 per month. If you set a maximum cost per run, the Actor stops cleanly when it is reached and reports the remaining events in the next run, so nothing is lost.

FAQ

Why do I get a corrigendum or award for a tender that no longer matches my keywords? Once a tender was reported as NEW_TENDER, the monitor follows the whole procedure, whatever the later notices say. That is the point of following it.

Do I get awards of tenders I never followed? Only if you turn on includeAllAwards. By default AWARDED is sent for the tenders this monitor reported before. With includeAllAwards: true, every award notice that matches your keywords, CPV codes and countries is reported as AWARDED (once). To watch only awards, e.g. to see which competitors win in your market, set "noticeTypes": ["award"] and "includeAllAwards": true. minEstimatedValue applies to the estimated value, or to the awarded value when the notice has no estimate.

What happens with notices without an estimated value? They are reported even if you set minEstimatedValue (many buyers do not publish it, and dropping them would hide real tenders). Values in other currencies (PLN, CZK, SEK…) are converted to euros with approximate rates, only for the filter.

Which notices are covered? Every notice published on TED since eForms became mandatory (October 2023) can be followed through its procedure identifier. Older notices have no procedure identifier: they can be reported as new but not followed. Prior information notices are reported as NEW_TENDER but TED does not link them to a procedure.

What happens if TED is down or changes its API? The run fails with a clear message and the saved state is not touched, so you will not lose notices or receive false alerts. This includes API errors, a search returning 0 notices for large countries on working days, and notices with empty titles or buyers in more than 20% of cases.

How do I start over? Use a new monitorName, or delete the key-value store ted-monitor-<your monitor name> in Storage.

Does it download tender documents (PDFs)? No. It works with the notice data. Open noticeUrl for the full notice and the links to the procurement documents.

I found a problem or need a field. Open an issue in the Issues tab.


En español: licitaciones públicas de España y la UE

Cómo encontrar códigos CPV

El CPV (Vocabulario Común de Contratos Públicos) clasifica qué se compra. Es jerárquico: 90000000 incluye todo lo que empieza por 90.

  1. Busca en TED una licitación parecida a las que te interesan y mira su código CPV (aparece en el anuncio).
  2. O consulta la lista oficial: CPV en TED (descargable en Excel) o el navegador por sector de TED (Browse by business sector).
  3. Pon el prefijo más corto que represente tu sector: 909 en vez de 90910000 si te interesan todos los servicios de limpieza. No hace falta el dígito de control (90910000-9 vale igual que 90910000).

Ejemplos por sector

SectorcpvCodeskeywords (opcional)
Limpieza de edificios909limpieza, cleaning services
Software y servicios TI72, 48software, desarrollo
Obras de construcción45–
Mantenimiento de jardines7731jardinería, zonas verdes
Seguridad y vigilancia7971vigilancia
Comedores y catering555comedor, catering
Material sanitario33–
Consultoría de empresa79consultoría

Ejemplo para una empresa de limpieza que trabaja en España y Portugal, solo contratos de más de 50.000 €:

{
"monitorName": "limpieza-iberia",
"keywords": ["limpieza", "limpeza", "cleaning services"],
"cpvCodes": ["909"],
"buyerCountries": ["ESP", "PRT"],
"minEstimatedValue": 50000
}

Avisos por email cada mañana

  1. Guarda tu input como tarea (Save as a new task).
  2. En Schedules, crea una programación diaria a las 7:00 (0 7 * * 1-5 para días laborables, zona horaria Europe/Madrid) con esa tarea.
  3. En la tarea, Integrations → Gmail: elige "Run succeeded" y adjunta el dataset en CSV o Excel.

Cada mañana recibirás solo las licitaciones nuevas, las correcciones, los cambios de plazo, las adjudicaciones y los avisos de plazo de las licitaciones que sigues. Si no hay novedades, el dataset llega vacío.

Coste mensual de ejemplo

El lanzamiento es gratis las primeras semanas. Después, 0,006 $ por fila (evento) y nada por las ejecuciones sin novedades (salvo el arranque mínimo de Apify):

UsoEventos al mesCoste aproximado
Una pyme, un sector y un país (≈10 eventos/día)3001,80 $/mes
Filtro amplio (≈30 eventos/día)9005,40 $/mes
Consultora con 5 clientes (5 monitores de ≈10 eventos/día)1.5009 $/mes

Preguntas frecuentes

¿La primera ejecución devuelve resultados? Sí: devuelve como NEW_TENDER las licitaciones de los últimos lookbackDays días (7 por defecto) cuyo plazo no ha vencido. Las siguientes ejecuciones solo traen novedades.

¿Busca en todos los idiomas? Las palabras clave se buscan en el título y la descripción de los anuncios en cualquier idioma, pero tal cual las escribes: pon las variantes que necesites (limpieza, limpeza, nettoyage). El título en inglés que publica TED incluye la descripción del CPV, así que una palabra clave en inglés (cleaning services) también encuentra anuncios de otros idiomas de ese sector.

¿Incluye la Plataforma de Contratación del Sector Público? No: solo TED, donde se publican las licitaciones que superan los umbrales europeos (y muchas que no). Las licitaciones pequeñas que solo están en plataformas nacionales no aparecen.

¿Qué pasa si una licitación cambia de plazo varias veces? Recibes un DEADLINE_CHANGED por cada anuncio de corrección que lo mueva, con el plazo anterior y el nuevo. El aviso DEADLINE_SOON se envía una sola vez por licitación.

¿Cuánto tiempo sigue una licitación? Hasta 365 días después de su plazo de presentación (hay adjudicaciones que se publican 9 meses después del plazo). Las adjudicaciones posteriores no se notifican, salvo que actives includeAllAwards.

¿Puedo ver a quién se adjudican los contratos de mi sector? Sí: activa includeAllAwards y pon "noticeTypes": ["award"]. Recibirás cada adjudicación que cumpla tus filtros con el adjudicatario (awardedTo) y el importe (awardedValue). En una prueba real, limpieza (CPV 909) en España dio 27 adjudicaciones en 7 días.