EU Public Tenders Scraper (TED API) avatar

EU Public Tenders Scraper (TED API)

Pricing

Pay per event

Go to Apify Store
EU Public Tenders Scraper (TED API)

EU Public Tenders Scraper (TED API)

Search and export EU public procurement notices from TED (Tenders Electronic Daily) by keyword, CPV code, country, notice type, date, value and buyer. Official TED API, no browser, fast and cheap.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Rod Services

Rod Services

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

What does EU Public Tenders Scraper (TED API) do?

EU Public Tenders Scraper searches TED (Tenders Electronic Daily), the official journal of EU public procurement, and exports clean, flat tender data. Filter by keywords, CPV codes, buyer country, notice type, publication date, contract value, buyer name and language. Get contract notices, award notices with winners and awarded values, and prior information notices from all EU and EEA countries.

It uses the official TED Search API v3 from the Publications Office of the European Union. No browser, no scraping of HTML, no login. A typical run returns hundreds of notices in a few seconds on 256 MB of memory.

Run it on the Apify platform and you get API access, scheduling, webhooks, integrations (Google Sheets, Slack, Make, Zapier, n8n) and monitoring out of the box. Try it now: the prefilled input returns IT tenders from Lithuania, Latvia and Estonia published in the last 30 days.

Why use this TED tenders scraper?

  • Tender monitoring and bid alerts. Schedule a daily run for your CPV codes and countries. Send new tenders to Slack, e-mail or your CRM.
  • B2B sales and lead generation. Find public buyers that are procuring what you sell, with budgets and deadlines.
  • Bid and tender consultants. Track open procedures for clients across all 27 EU member states from one dataset.
  • Competitor and market research. Award notices show who won, for how much, and under which procedure. Build win-rate and pricing benchmarks.
  • AI agents and LLM pipelines. Structured JSON with English titles, CPV codes and direct links is ready for RAG, classification and summarisation. Works as a tool via the Apify MCP server.
  • Cheaper than alternatives. About $1 per 1,000 notices, with no monthly rental. That is a quarter of the $4 per 1,000 charged by the category leader.

How to scrape EU public tenders from TED

  1. Open the Actor and go to the Input tab.
  2. Pick CPV codes (for example 72000000 for IT services) and/or keywords.
  3. Select buyer countries and notice types (contract notice, contract award, prior information).
  4. Set a date window, for example Published in the last N days = 7.
  5. Set Max notices and click Start.
  6. Download results as JSON, CSV, Excel or HTML, or read them via the Apify API.

To monitor tenders, save the input as a Task and add a Schedule (for example every weekday at 07:00) with publishedWithinDays = 1.

Input

All filters are optional and are combined with AND. Leave a filter empty to skip it. At least one filter is required. The default 30-day window alone does not count, so an empty input returns one free help row instead of notices. To get all notices of a period, set publicationDateFrom.

FieldDescription
keywordsFull-text search. Any keyword can match. Phrases like cloud services match exactly.
cpvCodesCPV codes. Parent codes include children, so 72000000 covers all IT services.
countriesBuyer country, ISO alpha-2 (LT) or alpha-3 (LTU).
noticeTypescontract-notice, contract-award, prior-information, direct-award, contract-modification, corrigendum.
publishedWithinDaysRelative date window. Default 30. Also applies to expertQuery. Use 0 to search all dates.
publicationDateFrom / publicationDateToAbsolute dates, YYYY-MM-DD. From overrides the relative window.
minValue / maxValueTotal value (estimated or awarded) in the notice currency.
buyerNamePhrase inside the contracting authority name.
languagesOriginal notice language, e.g. en, de, lt.
scopeALL, ACTIVE (only active notices) or LATEST (latest OJ S edition).
onlyLatestVersionsSkip superseded versions of changed notices.
expertQueryRaw TED expert query, combined with the other filters via AND.
maxItemsMaximum notices to save. You pay per saved notice.

Example input:

{
"cpvCodes": ["72000000"],
"countries": ["LT", "LV", "EE"],
"noticeTypes": ["contract-notice", "contract-award"],
"publishedWithinDays": 30,
"maxItems": 50
}

Keyword search with value range. English and German terms, because German notices are indexed in German:

{
"keywords": ["cybersecurity", "Cybersicherheit", "Informationssicherheit", "security operations center"],
"countries": ["DE", "AT", "NL"],
"noticeTypes": ["contract-notice"],
"minValue": 250000,
"publishedWithinDays": 14,
"maxItems": 500
}

Advanced expert query (place of performance instead of buyer country, wildcard on a Lithuanian term):

{
"expertQuery": "place-of-performance IN (LTU) AND FT ~ \"duomenų centr*\" SORT BY publication-date DESC",
"publishedWithinDays": 90,
"maxItems": 200
}

Build and test expert queries in the TED Expert Search page. The query the Actor actually sent is saved in the SUMMARY record of the key-value store.

Output

Each notice is one flat record. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

{
"noticeId": "c3c90c26-75a8-4d5f-afdf-dc834f409e82",
"publicationNumber": "662851-2026",
"publicationDate": "2026-09-25",
"noticeType": "Contract award notice",
"noticeTypeCode": "can-standard",
"title": "Lithuania – Software support services – Finansų sistemos vystymo paslauga (atviras konkursas)",
"titleOriginal": "Finansų sistemos vystymo paslauga (atviras konkursas)",
"buyerName": "Lietuvos sveikatos mokslų universiteto ligoninė Kauno klinikos (PV)",
"buyerCountry": "LT",
"buyerCountries": ["LT"],
"buyerCity": "Kaunas",
"cpvCodes": ["72261000"],
"mainCpv": "72261000",
"contractNature": "services",
"estimatedValue": null,
"currency": "EUR",
"awardedValue": 78750,
"awardedCurrency": "EUR",
"winnerName": "DEVEHO LT UAB",
"winners": ["DEVEHO LT UAB"],
"winnerCountries": ["LT"],
"deadline": null,
"procedureType": "Open",
"lots": 1,
"language": "lt",
"noticeUrl": "https://ted.europa.eu/en/notice/-/detail/662851-2026",
"pdfUrl": "https://ted.europa.eu/en/notice/662851-2026/pdf",
"xmlUrl": "https://ted.europa.eu/en/notice/662851-2026/xml"
}

Data fields

FieldMeaning
noticeIdeForms notice UUID. Publication number for pre-2023 notices.
publicationNumberTED number, e.g. 662851-2026. Stable key for deduplication.
publicationDateDate published in the OJ S.
noticeType / noticeTypeCodeReadable type and raw TED code (cn-standard, can-standard, pin-only and others).
titleEnglish title when the notice has one, otherwise the TED English headline (country, CPV, original title).
titleOriginalTitle in the original language.
buyerName, buyerCountry, buyerCityFirst contracting authority. Country as ISO alpha-2.
buyerCountriesAll buyer countries. Joint procurements (e.g. EU institutions) list several.
cpvCodes, mainCpvAll CPV codes and the main one.
estimatedValue, currencyEstimated value of the procedure. Lot values are summed when no total is given.
awardedValue, awardedCurrencyTotal awarded value on award notices.
winnerName, winners, winnerCountriesWinning organisations. Names only, no contact persons.
deadlineEarliest tender (or request to participate) deadline.
procedureTypeOpen, restricted, negotiated and others.
lotsNumber of lots.
languageOriginal language, ISO 639-1.
noticeUrl, pdfUrl, xmlUrlTED notice page, PDF and eForms XML.

How much does it cost to scrape TED tenders?

The Actor uses pay per event pricing: $1.00 per 1,000 notices ($0.001 per notice), plus a $0.001 start fee per run. There is no rental fee. Compute cost is included.

  • 50 notices (prefilled run): about $0.05
  • 1,000 notices: about $1.00
  • Daily monitoring, 30 new notices per day: about $1 per month

With the Apify free plan ($5 monthly credit) you can export about 5,000 notices a month for free.

Set Maximum cost per run in the run options to cap spend. The Actor saves only as many notices as that budget covers, then stops. The SUMMARY record shows the reason in stopReason.

Tips for faster and cheaper runs

  • Use CPV codes instead of broad keywords. CPV filters are precise and language independent.
  • Keywords search the original notice text. Add local-language terms, e.g. programinė įranga for Lithuania.
  • Avoid short acronyms such as SOC or ERP as keywords. Full-text search also matches codes inside notices, so they return unrelated tenders. Use full phrases or CPV codes instead.
  • A country filter matches a notice when any buyer is in that country. Joint procurements led from another country can appear. Check buyerCountries.
  • Use publishedWithinDays = 1 in a daily schedule and deduplicate on publicationNumber.
  • Set scope = ACTIVE to skip closed and historic notices.
  • Values are in the notice currency. Filter by currency after export if you mix EUR and non-EUR countries.
  • Up to 250 notices are fetched per API call. 10,000 notices take about 40 calls and under two minutes.

FAQ, disclaimers and support

Yes. This Actor uses the official, public TED Search API, which is provided for data reuse. The TED legal notice states that procurement notices published in the Supplement to the Official Journal of the EU can be freely reused for commercial or non-commercial purposes, under the Commission reuse policy (Commission Decision 2011/833/EU). The editorial content of the TED websites is licensed under CC BY 4.0.

Attribution: Source: TED (Tenders Electronic Daily), © European Union, https://ted.europa.eu. Data normalised by this Actor. Keep this credit when you republish the data, and indicate your own changes.

Does it collect personal data?

The Actor exports organisation names, not contact persons, e-mails or phone numbers. Some winners can be sole traders whose business name is a personal name. Handle such records under GDPR if you process them further.

Which notices are covered?

All notices on TED since 1993, including eForms notices (from late 2023) and older TED-schema notices. Older notices have fewer structured fields, so values such as lots or winnerName can be empty.

Why is a value empty?

Buyers do not always publish estimated values, and many award notices hide values for confidentiality. Some buyers enter 0 as a placeholder; the Actor exports that as empty. The Actor never guesses values.

What happens if my input is invalid?

The run still ends SUCCEEDED and you pay only the small start fee. No notice is charged. The dataset gets one help row instead of notices:

{
"error": true,
"errorCode": "EMPTY_INPUT",
"message": "No search filter given.",
"howToFix": "Add at least one filter: ..."
}

The same text is shown as the run status message. Codes: EMPTY_INPUT (no filter; publishedWithinDays alone does not count), INVALID_INPUT (a wrong CPV, country, language, notice type, date or value), QUERY_REJECTED (TED rejected the expert query) and NO_RESULTS (the search ran but matched nothing). Fix the input as howToFix says and run again. Network or TED server outages still fail the run, so you can tell them apart.

Rate limits

TED does not publish an exact quota and returns HTTP 429 when called too fast. The Actor makes one call at a time, at most 30 per minute, and retries with exponential backoff.

Support

Found a bug or need a field? Open an issue in the Issues tab. Custom solutions, such as daily tender feeds into your CRM or national procurement portals, are available on request.

This Actor is not affiliated with or endorsed by the Publications Office of the European Union.