EU TED Tenders Scraper - Public Procurement Contracts API avatar

EU TED Tenders Scraper - Public Procurement Contracts API

Pricing

from $2.00 / 1,000 results

Go to Apify Store
EU TED Tenders Scraper - Public Procurement Contracts API

EU TED Tenders Scraper - Public Procurement Contracts API

Scrape EU public procurement notices from TED (Tenders Electronic Daily) with no API key. Filter tenders by country, CPV code, notice type, procedure, value and deadline. Get buyer and winner contacts, contract values, CPV and NUTS codes, award data and document links. Export JSON, CSV, Excel.

Pricing

from $2.00 / 1,000 results

Rating

5.0

(1)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

5 days ago

Last modified

Share

EU TED Tenders & Public Procurement Scraper

EU TED Tenders Scraper: Public Procurement Contracts API

Turn TED (Tenders Electronic Daily), the EU's official public procurement journal, into clean, structured data. This scraper pulls EU tenders and contract awards from every country that publishes to TED, with no API key, no XML parsing and no headless browser. Filter by country, CPV sector, notice type, procedure, value and deadline, and get one normalized row per notice, ready for a CRM, dashboard, Slack alert, lead pipeline or LLM context.

This is the most complete EU public procurement scraper on Apify: it returns every field a TED notice exposes, including buyer and winning-supplier contact details, estimated and awarded values, CPV and NUTS codes, deadlines, legal basis, framework flag, and the OJ S publication number, plus an optional full per-lot detail add-on and AI enrichment.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

What you can do with it

  • Build a tender lead pipeline: find open contract notices by sector (CPV) and country, capture the buyer email, phone and website, and push them to your CRM.
  • Track contract awards: see who won, the awarded value, number of tenders received, and the winning supplier's country, size and contact.
  • Run market and competitor intelligence on European public spending by buyer, CPV, region (NUTS) or value band.
  • Feed European government contracts into dashboards, alerts or an LLM as structured JSON.
  • Monitor still-biddable tenders with a single onlyOpenDeadlines flag and a publication-date window.

Table of contents

What it does

The actor queries TED (Tenders Electronic Daily), the EU's official public procurement journal at ted.europa.eu, applies the filters you pass as input, paginates through every matching notice, and writes one normalized record per notice to the run's dataset. Each record carries the notice title and description, the buyer name, national id and contact details, notice, procedure and contract type, legal basis and framework flag, estimated and awarded values, CPV and NUTS codes, publication, dispatch and deadline dates, document links, and, for award notices, the winning supplier with their value and contact details. Missing source values are returned as null and never invented.

Coverage spans all EU member states plus EEA and partner countries that publish to TED (around 700,000 notices per year). It reads only public data and needs no TED account or API key.

Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 10 open-procedure IT-services contract notices from Germany published in the last week that are still biddable.

{
"maxTenders": 10,
"buyerCountry": ["DEU"],
"cpvCodes": "72000000",
"noticeType": ["cn-standard"],
"onlyOpenDeadlines": true
}

Every input field is optional. With an empty input the actor returns notices from the last 7 days (default maxTenders is 10, and free plans are capped at 10 per run).

Input reference

FieldTypeRequiredDefaultDescription
maxTendersintegerno10Max notices to collect. Aliases: maxItems, maxResults, limit, max, maxPages (1 page = 100). Free plans capped at 10 per run.
publicationDateFromstringno(last 7 days)Include notices published on or after this date (YYYY-MM-DD). Alias: publishedAfter.
publicationDateTostringno(today)Include notices published on or before this date (YYYY-MM-DD). Alias: publishedBefore.
buyerCountrystring[]no(all)ISO3 buyer country codes, for example DEU, FRA, ITA, ESP. Aliases: countries, country.
cpvCodesstringno(all)Comma-separated CPV codes, for example 45000000, 72000000. 45000000 construction, 72000000 IT, 33000000 medical, 79000000 business services. Alias: cpvCode.
noticeTypestring[]no(all)Notice types, for example cn-standard (contract notice), can-standard (award notice), pin-only (prior information). Alias: noticeTypes.
procedureTypestring[]no(all)Procedure types, for example open, restricted, comp-dial, neg-w-call. Alias: procedureTypes.
contractNaturestring[]no(all)works (construction), supplies (goods) or services. Alias: contractNatures.
nutsCodesstringno(all)Comma-separated place-of-performance NUTS region codes, for example DE21, FR101, PL911.
minValueintegerno(none)Only notices whose estimated or awarded value is at least this amount (notice currency).
maxValueintegerno(none)Only notices whose estimated or awarded value is at most this amount (notice currency).
onlyOpenDeadlinesbooleannofalseWhen on, only return notices whose submission deadline is today or later (still biddable).
buyerNameSearchstringno(empty)Only notices whose buyer name contains this text, for example University, Ministry of Health. Alias: buyerName.
freeTextstringno(empty)Full-text keyword search across the notice, for example solar panels, hospital catering. Alias: keywords.
preferredLanguagesstring[]no["eng", ...]ISO 639-3 language codes that set the priority for multilingual fields, for example ["fra", "deu"].
expertQuerystringno(empty)Advanced: a full TED expert search query that overrides all filters above. Aliases: query, rawQuery.
withDetailsbooleannofalsePaid add-on. Adds the full per-lot detail, review body and winner enrichment. Billed as details. Requires a paid plan.
withAiSummarybooleannofalsePaid AI add-on. Adds aiSummary. Billed only when produced. Requires a paid plan.
withAiExtractbooleannofalsePaid AI add-on. Adds aiExtract (buyer, value, deadline, CPV, eligibility). Billed only on success. Requires a paid plan.
withAiTranslatebooleannofalsePaid AI add-on. Adds English title/description translation for non-English notices. Billed only when produced. Requires a paid plan.

Filters combine with logical AND. Leave every filter empty to return recent notices across all countries.

Output reference

One dataset item per procurement notice. Types: string, number, integer, boolean, string[], object, or null when the source value is absent.

FieldTypeDescription
titlestringNotice title (source language, prefixed with country and category).
publicationNumberstringTED publication number (also the notice id).
ojsNumberstringOfficial Journal (OJ S) issue number of the notice.
tedUrlstringLink to the notice on ted.europa.eu.
buyerNamestringName of the contracting authority (buyer).
buyerCountrystringISO3 country code of the buyer.
buyerNationalIdstringBuyer national registration identifier, else null.
supplierNamestringWinning supplier name (award notices), else null.
noticeTypestringNotice type code, for example cn-standard, can-standard.
noticeSubtypestringTED notice subtype code.
formTypestringForm type, for example planning, competition, result.
procedureTypestringProcurement procedure type, for example open, restricted.
legalBasisstringLegal basis reference, for example an EU directive number.
frameworkAgreementbooleantrue if the contract uses a framework agreement, else false/null.
valuenumberAwarded or contract value, else null.
currencystringCurrency of value.
cpvCodesstring[]Main CPV classification codes.
placestring[]Place-of-performance codes (NUTS and country).
publicationDatestringPublication date on TED (YYYY-MM-DD).
deadlineDatestringTender submission deadline, or null.
descriptionstringNotice description (source language).
languagestringISO language code of the notice text.
buyerEmailstringBuyer contact email.
buyerPhonestringBuyer contact phone.
buyerWebsitestringBuyer website.
buyerCitystringBuyer city.
buyerPostcodestringBuyer postal code.
buyerActivitystringBuyer activity classification, for example gen-pub.
contractNaturestringworks, supplies or services.
additionalCpvCodesstring[]Supplementary CPV codes.
estimatedValuenumberEstimated contract value, else null.
estimatedValueCurrencystringCurrency of estimatedValue.
winnerCountrystringWinning supplier country (award notices), else null.
winnerCitystringWinning supplier city.
winnerEmailstringWinning supplier email.
winnerSizestringWinning supplier size, for example sme, small, medium, large.
awardDatestringAward decision date, or null.
contractConclusionDatestringContract conclusion date, or null.
tendersReceivedintegerNumber of tenders received, else null.
nutsCodesstring[]Place-of-performance NUTS codes.
daysUntilDeadlineintegerWhole days from run time to the submission deadline, else null.
dispatchDatestringDate the notice was dispatched for publication (YYYY-MM-DD).
fundingstringEU funding reference when present, else null.
pdfUrlstringLink to the notice PDF.
xmlUrlstringLink to the notice XML.
documentsobject[]Every notice rendition link as { type, language, url } (PDF, XML, HTML per language).
detailsobjectFull per-lot / review-body / winner enrichment. Present only with the withDetails add-on.
aiSummarystringPlain-English summary. Present only with withAiSummary.
aiExtractobjectExtracted buyer, value, deadline, CPV and eligibility. Present only with withAiExtract.
aiSourceLanguagestringDetected source language. Present only with an AI add-on.
aiTitleEnstringEnglish translation of the title. Present only with withAiTranslate.
aiDescriptionEnstringEnglish translation of the description. Present only with withAiTranslate.
aiTranslationstringCombined English translation. Present only with withAiTranslate.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Full notice details add-on

Set withDetails to true (paid plan) to enrich each notice with a details object that carries the deeper, per-lot data TED exposes:

  • Per-lot breakdown: lotIdentifiers, lotTitles, lotCpvCodes, lotDurations, lotStartDates, lotEndDates, lotPlaceCities, lotPlaceCountries.
  • Deadlines: submissionDeadlineDates, submissionDeadlineTimes, requestDeadlineDates.
  • Procurement flags: gpaCovered, dpsUsed, recurring, strategicProcurement, subcontractingAllowed, awardCriteriaTypes, submissionLanguages, options.
  • Appeals: reviewBodyName, reviewBodyEmail.
  • Winner enrichment: winnerIdentifiers, winnerWebsites, winnerPostcodes, tenderValueHighest, tenderValueLowest, frameworkMaxValue.

Rows are billed as details only when extra data is actually present; otherwise they are billed as a standard result. The add-on is opt-in and skipped for free plans.

Example output record

Real record from a live run (input {"buyerCountry":["DEU"],"noticeType":["can-standard"]}), no add-ons. The long German description is trimmed for brevity; all values are unmodified.

{
"title": "Germany - Heating, ventilation and air-conditioning installation work - HWK DO VE420",
"publicationNumber": "575419-2026",
"ojsNumber": "160/2026",
"tedUrl": "https://ted.europa.eu/en/notice/-/detail/575419-2026",
"buyerName": "Handwerkskammer Dortmund",
"buyerCountry": "DEU",
"buyerNationalId": "DE254718695",
"supplierName": "Leniger Sanitaer- Heizungstechnik GmbH; Hans Eckhoff GmbH",
"noticeType": "can-standard",
"noticeSubtype": "29",
"formType": "result",
"procedureType": "open",
"legalBasis": "32014L0024",
"frameworkAgreement": false,
"value": 2273096.76,
"currency": "EUR",
"cpvCodes": ["45331000", "45315000"],
"place": ["DEA52", "DEU"],
"publicationDate": "2026-08-20",
"buyerEmail": "info@hwk-do.de",
"buyerPhone": "0341 2188-0",
"buyerCity": "Dortmund",
"buyerPostcode": "44139",
"buyerActivity": "econ-aff",
"contractNature": "works",
"additionalCpvCodes": ["45315000", "45331000"],
"winnerCountry": "DEU",
"winnerCity": "Paderborn; Gevelsberg",
"winnerEmail": "info@leniger-gmbh.de; l.steffen@eckhoffgmbh.de",
"winnerSize": "medium; small",
"awardDate": "2026-07-09",
"contractConclusionDate": "2026-07-20",
"tendersReceived": 12,
"nutsCodes": ["DEA52"],
"dispatchDate": "2026-08-19",
"pdfUrl": "https://ted.europa.eu/en/notice/575419-2026/pdf",
"xmlUrl": "https://ted.europa.eu/en/notice/575419-2026/xml",
"observedAt": "2026-09-06T06:41:43.207Z",
"error": null
}

How it compares

CapabilityThis actorTypical TED actors
No API key, no XML parsing, no browserYesVaries
Filters: country, CPV, notice type, procedure, contract natureYesPartial
Filters: value band, NUTS region, buyer name, free text, expert queryYesRare
Buyer contact (email, phone, website, national id)YesRare
Winner name, value, size, country and contact (awards)YesPartial
Legal basis, framework flag, OJ S number, dispatch dateYesRare
Per-lot breakdown, review body, GPA/DPS flags (details add-on)YesNo
Document links (PDF, XML, HTML per language)YesPartial
Optional AI summary, structured extract and English translationYesRare
Input aliases for drop-in migration (countries, cpvCode, query, maxPages...)YesNo

The actor accepts the input names used by other TED scrapers on Apify, so you can point an existing configuration at it and get a strict superset of their output.

Run via API and CLI

Start a run and read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~eu-ted-tenders-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"buyerCountry":["DEU"],"cpvCodes":"72000000","onlyOpenDeadlines":true,"maxTenders":25}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~eu-ted-tenders-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"freeText":"solar panels","maxTenders":100}'

Apify CLI:

apify call scrapers_lat/eu-ted-tenders-scraper \
--input '{"buyerCountry":["FRA"],"contractNature":["works"],"maxTenders":50}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object.

Billing and limits

  • Pay per result. You are charged per notice returned (result event). See the pricing tab for the current per-result price.
  • Details add-on. With withDetails, enriched rows are billed as the details event instead of result, and only when extra data is present. Paid plans only.
  • AI add-ons billed separately. withAiSummary, withAiExtract and withAiTranslate each charge their own event and only when the output is produced. Paid plans only.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 notices per run. Upgrade for higher maxTenders.

FAQ and troubleshooting

Do I need a TED API key or account? No. The actor reads public TED data and needs no key, no login and no XML parsing.

A run returned 0 records. Why? The filter combination matched nothing in the chosen date window. Widen publicationDateFrom/publicationDateTo, remove a country or CPV filter, or clear freeText. Zero-result runs are not charged.

How do I see only tenders I can still bid on? Set onlyOpenDeadlines to true. Only notices with a submission deadline of today or later are returned.

How do I target a specific industry? Use cpvCodes with the Common Procurement Vocabulary codes for that sector, optionally combined with contractNature.

What is the difference between the filters and expertQuery? The individual filters are combined into a TED expert query for you. If you already know the TED expert query language, expertQuery lets you pass a full query that overrides every other filter.

Why is value or awardDate null? Those fields exist mainly on award notices. Contract notices that are still open do not carry an awarded value or award date, so they are returned as null.

Is this an official EU tool? No. This actor is independent and has no affiliation with the European Union or the Publications Office. It reads only data that is publicly available on TED. Use it in accordance with the TED terms of use.


Scraper de Licitaciones TED de la UE: API de Contratacion Publica

Convierte TED (Tenders Electronic Daily), el diario oficial de contratacion publica de la UE, en datos limpios y estructurados. Este scraper extrae licitaciones y adjudicaciones de la UE de todos los paises que publican en TED, sin clave de API, sin analizar XML y sin navegador. Filtra por pais, sector CPV, tipo de anuncio, procedimiento, valor y fecha limite, y obten una fila normalizada por anuncio, lista para un CRM, un panel, una alerta de Slack, un flujo de generacion de leads o el contexto de un LLM.

Es el scraper de contratacion publica de la UE mas completo de Apify: devuelve todos los campos que expone un anuncio de TED, incluidos los datos de contacto del comprador y del proveedor adjudicatario, los valores estimados y adjudicados, los codigos CPV y NUTS, las fechas limite, la base juridica, el indicador de acuerdo marco y el numero de publicacion OJ S, mas un complemento opcional de detalle completo por lote y enriquecimiento con IA.

📥 Entrada · 📤 Salida · 💰 Precios · ▶️ Ejemplos

Para que sirve

  • Crear un flujo de leads de licitaciones: encuentra anuncios de contrato abiertos por sector (CPV) y pais, captura el correo, telefono y sitio web del comprador y envialos a tu CRM.
  • Seguir adjudicaciones de contratos: ve quien gano, el valor adjudicado, el numero de ofertas recibidas y el pais, tamano y contacto del proveedor ganador.
  • Hacer inteligencia de mercado y de competencia sobre el gasto publico europeo por comprador, CPV, region (NUTS) o rango de valor.
  • Alimentar contratos gubernamentales europeos en paneles, alertas o un LLM como JSON estructurado.
  • Vigilar licitaciones aun abiertas con un solo indicador onlyOpenDeadlines y una ventana de fecha de publicacion.

Que hace

El actor consulta TED (Tenders Electronic Daily), el diario oficial de contratacion publica de la UE en ted.europa.eu, aplica los filtros que pasas como entrada, pagina por cada anuncio coincidente y escribe un registro normalizado por anuncio en el dataset de la ejecucion. Cada registro lleva el titulo y la descripcion del anuncio, el nombre, identificador nacional y datos de contacto del comprador, el tipo de anuncio, procedimiento y contrato, la base juridica y el indicador de acuerdo marco, los valores estimados y adjudicados, los codigos CPV y NUTS, las fechas de publicacion, envio y limite, los enlaces a documentos y, en los anuncios de adjudicacion, el proveedor ganador con su valor y sus datos de contacto. Los valores ausentes en la fuente se devuelven como null y nunca se inventan.

La cobertura abarca todos los estados miembros de la UE mas los paises del EEE y socios que publican en TED (unos 700.000 anuncios al ano). Solo lee datos publicos y no necesita cuenta de TED ni clave de API.

Inicio rapido

Abre el actor, pega esto en la entrada y pulsa Run. Devuelve hasta 10 anuncios de contrato de servicios de TI de Alemania por procedimiento abierto, publicados en la ultima semana y que aun admiten ofertas.

{
"maxTenders": 10,
"buyerCountry": ["DEU"],
"cpvCodes": "72000000",
"noticeType": ["cn-standard"],
"onlyOpenDeadlines": true
}

Todos los campos de entrada son opcionales. Con una entrada vacia, el actor devuelve anuncios de los ultimos 7 dias (el valor por defecto de maxTenders es 10, y los planes gratuitos estan limitados a 10 por ejecucion).

Referencia de entrada

CampoTipoObligatorioPor defectoDescripcion
maxTendersintegerno10Maximo de anuncios a recopilar. Alias: maxItems, maxResults, limit, max, maxPages (1 pagina = 100). Planes gratuitos limitados a 10 por ejecucion.
publicationDateFromstringno(ultimos 7 dias)Incluir anuncios publicados en o despues de esta fecha (YYYY-MM-DD). Alias: publishedAfter.
publicationDateTostringno(hoy)Incluir anuncios publicados en o antes de esta fecha (YYYY-MM-DD). Alias: publishedBefore.
buyerCountrystring[]no(todos)Codigos ISO3 de pais del comprador, por ejemplo DEU, FRA, ITA, ESP. Alias: countries, country.
cpvCodesstringno(todos)Codigos CPV separados por comas, por ejemplo 45000000, 72000000. 45000000 construccion, 72000000 TI, 33000000 material medico, 79000000 servicios a empresas. Alias: cpvCode.
noticeTypestring[]no(todos)Tipos de anuncio, por ejemplo cn-standard (anuncio de contrato), can-standard (anuncio de adjudicacion), pin-only (informacion previa). Alias: noticeTypes.
procedureTypestring[]no(todos)Tipos de procedimiento, por ejemplo open, restricted, comp-dial, neg-w-call. Alias: procedureTypes.
contractNaturestring[]no(todos)works (obras), supplies (suministros) o services (servicios). Alias: contractNatures.
nutsCodesstringno(todos)Codigos de region NUTS del lugar de ejecucion, separados por comas, por ejemplo DE21, FR101, PL911.
minValueintegerno(ninguno)Solo anuncios cuyo valor estimado o adjudicado sea al menos esta cantidad (moneda del anuncio).
maxValueintegerno(ninguno)Solo anuncios cuyo valor estimado o adjudicado sea como maximo esta cantidad (moneda del anuncio).
onlyOpenDeadlinesbooleannofalseSi esta activo, solo devuelve anuncios cuya fecha limite de presentacion sea hoy o posterior (aun se puede ofertar).
buyerNameSearchstringno(vacio)Solo anuncios cuyo nombre de comprador contenga este texto, por ejemplo University, Ministry of Health. Alias: buyerName.
freeTextstringno(vacio)Busqueda de texto completo en el anuncio, por ejemplo solar panels, hospital catering. Alias: keywords.
preferredLanguagesstring[]no["eng", ...]Codigos de idioma ISO 639-3 que fijan la prioridad de los campos multilingues, por ejemplo ["spa", "fra"].
expertQuerystringno(vacio)Avanzado: una consulta experta completa de TED que anula todos los filtros anteriores. Alias: query, rawQuery.
withDetailsbooleannofalseComplemento de pago. Anade el detalle completo por lote, el organo de recurso y el enriquecimiento del ganador. Se factura como details. Requiere plan de pago.
withAiSummarybooleannofalseComplemento de IA de pago. Anade aiSummary. Se factura solo cuando se produce. Requiere plan de pago.
withAiExtractbooleannofalseComplemento de IA de pago. Anade aiExtract (comprador, valor, fecha limite, CPV, elegibilidad). Se factura solo si tiene exito. Requiere plan de pago.
withAiTranslatebooleannofalseComplemento de IA de pago. Anade la traduccion al ingles del titulo y la descripcion de anuncios no ingleses. Se factura solo cuando se produce. Requiere plan de pago.

Los filtros se combinan con AND logico. Deja todos los filtros vacios para devolver anuncios recientes de todos los paises.

Referencia de salida

Un elemento del dataset por anuncio de contratacion. Tipos: string, number, integer, boolean, string[], object, o null cuando el valor de origen esta ausente.

CampoTipoDescripcion
titlestringTitulo del anuncio (idioma de origen, con prefijo de pais y categoria).
publicationNumberstringNumero de publicacion de TED (tambien el id del anuncio).
ojsNumberstringNumero del Diario Oficial (OJ S) del anuncio.
tedUrlstringEnlace al anuncio en ted.europa.eu.
buyerNamestringNombre del organo de contratacion (comprador).
buyerCountrystringCodigo ISO3 del pais del comprador.
buyerNationalIdstringIdentificador nacional de registro del comprador, o null.
supplierNamestringNombre del proveedor ganador (anuncios de adjudicacion), o null.
noticeTypestringCodigo del tipo de anuncio, por ejemplo cn-standard, can-standard.
noticeSubtypestringCodigo de subtipo de anuncio de TED.
formTypestringTipo de formulario, por ejemplo planning, competition, result.
procedureTypestringTipo de procedimiento de contratacion, por ejemplo open, restricted.
legalBasisstringReferencia de la base juridica, por ejemplo un numero de directiva de la UE.
frameworkAgreementbooleantrue si el contrato usa un acuerdo marco, o false/null.
valuenumberValor adjudicado o del contrato, o null.
currencystringMoneda de value.
cpvCodesstring[]Codigos CPV de clasificacion principal.
placestring[]Codigos del lugar de ejecucion (NUTS y pais).
publicationDatestringFecha de publicacion en TED (YYYY-MM-DD).
deadlineDatestringFecha limite de presentacion de ofertas, o null.
descriptionstringDescripcion del anuncio (idioma de origen).
languagestringCodigo ISO del idioma del texto del anuncio.
buyerEmailstringCorreo de contacto del comprador.
buyerPhonestringTelefono de contacto del comprador.
buyerWebsitestringSitio web del comprador.
buyerCitystringCiudad del comprador.
buyerPostcodestringCodigo postal del comprador.
buyerActivitystringClasificacion de la actividad del comprador, por ejemplo gen-pub.
contractNaturestringworks, supplies o services.
additionalCpvCodesstring[]Codigos CPV complementarios.
estimatedValuenumberValor estimado del contrato, o null.
estimatedValueCurrencystringMoneda de estimatedValue.
winnerCountrystringPais del proveedor ganador (anuncios de adjudicacion), o null.
winnerCitystringCiudad del proveedor ganador.
winnerEmailstringCorreo del proveedor ganador.
winnerSizestringTamano del proveedor ganador, por ejemplo sme, small, medium, large.
awardDatestringFecha de la decision de adjudicacion, o null.
contractConclusionDatestringFecha de conclusion del contrato, o null.
tendersReceivedintegerNumero de ofertas recibidas, o null.
nutsCodesstring[]Codigos NUTS del lugar de ejecucion.
daysUntilDeadlineintegerDias enteros desde la ejecucion hasta la fecha limite, o null.
dispatchDatestringFecha de envio del anuncio para publicacion (YYYY-MM-DD).
fundingstringReferencia de financiacion de la UE cuando existe, o null.
pdfUrlstringEnlace al PDF del anuncio.
xmlUrlstringEnlace al XML del anuncio.
documentsobject[]Cada enlace de version del anuncio como { type, language, url } (PDF, XML, HTML por idioma).
detailsobjectEnriquecimiento completo por lote / organo de recurso / ganador. Presente solo con el complemento withDetails.
aiSummarystringResumen en ingles sencillo. Presente solo con withAiSummary.
aiExtractobjectComprador, valor, fecha limite, CPV y elegibilidad extraidos. Presente solo con withAiExtract.
aiSourceLanguagestringIdioma de origen detectado. Presente solo con un complemento de IA.
aiTitleEnstringTraduccion al ingles del titulo. Presente solo con withAiTranslate.
aiDescriptionEnstringTraduccion al ingles de la descripcion. Presente solo con withAiTranslate.
aiTranslationstringTraduccion combinada al ingles. Presente solo con withAiTranslate.
observedAtstringMarca de tiempo ISO 8601 de cuando se recopilo el registro.
errorstringnull si tiene exito. En una ejecucion fallida se escribe un unico elemento con el campo error relleno.

Complemento de detalle completo del anuncio

Pon withDetails en true (plan de pago) para enriquecer cada anuncio con un objeto details que lleva los datos por lote mas profundos que expone TED:

  • Desglose por lote: lotIdentifiers, lotTitles, lotCpvCodes, lotDurations, lotStartDates, lotEndDates, lotPlaceCities, lotPlaceCountries.
  • Fechas limite: submissionDeadlineDates, submissionDeadlineTimes, requestDeadlineDates.
  • Indicadores de contratacion: gpaCovered, dpsUsed, recurring, strategicProcurement, subcontractingAllowed, awardCriteriaTypes, submissionLanguages, options.
  • Recursos: reviewBodyName, reviewBodyEmail.
  • Enriquecimiento del ganador: winnerIdentifiers, winnerWebsites, winnerPostcodes, tenderValueHighest, tenderValueLowest, frameworkMaxValue.

Las filas se facturan como details solo cuando hay datos adicionales presentes; en caso contrario se facturan como un result estandar. El complemento es opcional y se omite en los planes gratuitos.

Ejemplo de registro de salida

Registro real de una ejecucion (entrada {"buyerCountry":["DEU"],"noticeType":["can-standard"]}), sin complementos. La descripcion larga en aleman se recorta por brevedad; todos los valores estan sin modificar.

{
"title": "Germany - Heating, ventilation and air-conditioning installation work - HWK DO VE420",
"publicationNumber": "575419-2026",
"ojsNumber": "160/2026",
"buyerName": "Handwerkskammer Dortmund",
"buyerCountry": "DEU",
"buyerNationalId": "DE254718695",
"supplierName": "Leniger Sanitaer- Heizungstechnik GmbH; Hans Eckhoff GmbH",
"noticeType": "can-standard",
"legalBasis": "32014L0024",
"value": 2273096.76,
"currency": "EUR",
"cpvCodes": ["45331000", "45315000"],
"buyerEmail": "info@hwk-do.de",
"contractNature": "works",
"winnerCountry": "DEU",
"winnerSize": "medium; small",
"awardDate": "2026-07-09",
"tendersReceived": 12,
"nutsCodes": ["DEA52"],
"error": null
}

Como se compara

CapacidadEste actorActores TED tipicos
Sin clave de API, sin analizar XML, sin navegadorSiVariable
Filtros: pais, CPV, tipo de anuncio, procedimiento, naturalezaSiParcial
Filtros: rango de valor, region NUTS, nombre de comprador, texto libre, consulta expertaSiRaro
Contacto del comprador (correo, telefono, web, id nacional)SiRaro
Nombre, valor, tamano, pais y contacto del ganador (adjudicaciones)SiParcial
Base juridica, indicador de acuerdo marco, numero OJ S, fecha de envioSiRaro
Desglose por lote, organo de recurso, indicadores GPA/DPS (complemento details)SiNo
Enlaces a documentos (PDF, XML, HTML por idioma)SiParcial
Resumen, extraccion estructurada y traduccion al ingles con IA opcionalesSiRaro
Alias de entrada para migracion directa (countries, cpvCode, query, maxPages...)SiNo

El actor acepta los nombres de entrada que usan otros scrapers de TED en Apify, asi que puedes apuntar una configuracion existente a este y obtener un superconjunto estricto de su salida.

Ejecutar via API y CLI

Inicia una ejecucion y lee el dataset. Sustituye <TOKEN> por tu token de API de Apify.

Ejecucion sincrona que devuelve los elementos del dataset en una llamada:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~eu-ted-tenders-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"buyerCountry":["DEU"],"cpvCodes":"72000000","onlyOpenDeadlines":true,"maxTenders":25}'

Iniciar una ejecucion de forma asincrona:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~eu-ted-tenders-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"freeText":"solar panels","maxTenders":100}'

CLI de Apify:

apify call scrapers_lat/eu-ted-tenders-scraper \
--input '{"buyerCountry":["FRA"],"contractNature":["works"],"maxTenders":50}'

Obtener resultados

Cada ejecucion escribe en un dataset. Obten los elementos como JSON, CSV o Excel cambiando format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginar datasets grandes
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> se devuelve como defaultDatasetId en el objeto de la ejecucion.

Facturacion y limites

  • Pago por resultado. Se cobra por anuncio devuelto (evento result). Consulta la pestana de precios para el precio por resultado actual.
  • Complemento de detalle. Con withDetails, las filas enriquecidas se facturan como el evento details en lugar de result, y solo cuando hay datos adicionales. Solo planes de pago.
  • Complementos de IA facturados aparte. withAiSummary, withAiExtract y withAiTranslate cobran su propio evento y solo cuando se produce la salida. Solo planes de pago.
  • Sin cargo si falla. Si una ejecucion falla, el actor escribe un unico elemento con el campo error relleno y no lo cobra. Las ejecuciones vacias no cuestan nada.
  • Se respeta el limite de gasto. Ajusta maxTotalChargeUsd en la ejecucion; al alcanzarlo, el actor deja de emitir y de cobrar mas resultados facturables.
  • Los planes gratuitos de Apify estan limitados a 10 anuncios por ejecucion. Mejora tu plan para un maxTenders mayor.

Preguntas frecuentes

Necesito una clave de API o cuenta de TED? No. El actor lee datos publicos de TED y no necesita clave, inicio de sesion ni analisis de XML.

Una ejecucion devolvio 0 registros. Por que? La combinacion de filtros no coincidio con nada en la ventana de fechas elegida. Amplia publicationDateFrom/publicationDateTo, quita un filtro de pais o CPV, o borra freeText. Las ejecuciones sin resultados no se cobran.

Como veo solo licitaciones en las que aun puedo ofertar? Pon onlyOpenDeadlines en true. Solo se devuelven anuncios con fecha limite de presentacion de hoy o posterior.

Como oriento hacia un sector concreto? Usa cpvCodes con los codigos del Vocabulario Comun de Contratacion Publica de ese sector, opcionalmente combinado con contractNature.

Cual es la diferencia entre los filtros y expertQuery? Los filtros individuales se combinan en una consulta experta de TED por ti. Si ya conoces el lenguaje de consulta experta de TED, expertQuery te permite pasar una consulta completa que anula los demas filtros.

Por que value o awardDate son null? Esos campos existen principalmente en los anuncios de adjudicacion. Los anuncios de contrato aun abiertos no llevan valor adjudicado ni fecha de adjudicacion, asi que se devuelven como null.

Es una herramienta oficial de la UE? No. Este actor es independiente y no tiene afiliacion con la Union Europea ni con la Oficina de Publicaciones. Solo lee datos disponibles publicamente en TED. Usalo conforme a las condiciones de uso de TED.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US, European and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with the European Union or the Publications Office. Accesses only publicly available TED procurement data. Use in accordance with the TED terms of use.