EU TED Tenders Scraper & Alerts: Public Procurement avatar

EU TED Tenders Scraper & Alerts: Public Procurement

Pricing

from $0.70 / 1,000 notices

Go to Apify Store
EU TED Tenders Scraper & Alerts: Public Procurement

EU TED Tenders Scraper & Alerts: Public Procurement

Search and monitor EU public tenders from TED by keyword, CPV code, country, deadline and value. Only-new mode for daily tender alerts. Official TED API, $1 per 1,000 notices.

Pricing

from $0.70 / 1,000 notices

Rating

0.0

(0)

Developer

Rod Services

Rod Services

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 days ago

Last modified

Share

EU TED tenders scraper and daily tender alerts: search and monitor EU public procurement notices by keyword, CPV code, country, deadline and value. Official TED API, no login, no browser. Turn on Only new notices, schedule a daily run, and get only the tenders you have not seen yet in Slack, e-mail or your CRM. About $1 per 1,000 notices.

What you get

  • Contract notices, award notices and prior information notices from TED (Tenders Electronic Daily), the official journal of EU public procurement. All 27 EU member states plus EEA and candidate countries, from 1993 to today.
  • Filters: keywords, CPV codes, buyer country, notice type, publication date, tender deadline, contract value, buyer name, language, or a raw TED expert query.
  • Tender alerts: onlyNew remembers what earlier runs already saved and returns only new notices. Built for a daily schedule.
  • Flat, clean records: English title, buyer, CPV codes, estimated and awarded value, winners, deadline, procedure type, lots and direct links to the notice page, PDF and XML.
  • Fast and cheap: up to 250 notices per API call. A 50-notice run takes a few seconds on 256 MB.

Typical users: bid teams and B2B sellers looking for public buyers, tender consultants, market researchers who study award prices and winners, and AI agents that need structured procurement data.

Quick start

  1. Click Try for free. The prefilled input searches IT services tenders (CPV 72000000) in Germany, France, Italy, Spain, the Netherlands and Poland from the last 7 days and saves 50 notices.
  2. Change CPV codes, keywords and buyer countries to your market.
  3. Click Start. Download the results as JSON, CSV, Excel or HTML, or read them via the Apify API.

Daily tender alerts (only new notices)

  1. Set your filters, for example CPV 72000000 and countries DE, AT.
  2. Turn on Only new notices since the last run. Keep publishedWithinDays at 7 or so: it limits the first run.
  3. Save the input as a Task and add a Schedule, for example every weekday at 07:00.
  4. Add an integration to the task: Slack, e-mail, Google Sheets, Make, Zapier, n8n or a webhook on "Run succeeded".

How it works:

  • The first run saves all current matches and remembers them.
  • Every later run with the same filters saves only notices that earlier runs did not save. You pay only for new notices.
  • When nothing is new, the run ends SUCCEEDED with an empty dataset and the status "No new TED notices since the last run". Integrations that react to dataset items stay quiet.
  • The memory lives in the named key-value store ted-tenders-only-new in your own Apify account. The record name is a hash of the filters, so changing a filter starts a fresh alert. Set Alert state name (stateKey) to keep one alert across filter changes, or to run two separate alerts.
  • If a run stops at Max notices or at your cost limit, the next run still picks up the notices that were left over.

Combine it with Tender deadline at least N days away (minDaysToDeadline) to get only tenders you can still bid on.

Input example

All filters are optional and combined with AND. At least one filter is needed. publishedWithinDays alone does not count, so an empty input returns one free help row.

The prefill, IT tenders in six large EU countries:

{
"cpvCodes": ["72000000"],
"countries": ["DE", "FR", "IT", "ES", "NL", "PL"],
"noticeTypes": ["contract-notice", "contract-award"],
"publishedWithinDays": 7,
"maxItems": 50
}

Daily alert for open construction tenders in the Nordics, still open for at least 10 days:

{
"cpvCodes": ["45000000"],
"countries": ["SE", "DK", "FI", "NO"],
"noticeTypes": ["contract-notice"],
"minDaysToDeadline": 10,
"publishedWithinDays": 7,
"onlyNew": true,
"maxItems": 500
}

Keyword search with a value range. Add local-language terms, because notices are indexed in their original language:

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

Expert query, place of performance instead of buyer country:

{
"expertQuery": "place-of-performance IN (LTU) AND FT ~ \"duomenų centr*\" SORT BY publication-date DESC",
"publishedWithinDays": 90,
"maxItems": 200
}
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 (DE) or alpha-3 (DEU).
noticeTypescontract-notice, contract-award, prior-information, direct-award, contract-modification, corrigendum.
publishedWithinDaysRelative date window. Default 30. Use 0 for 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, fr.
minDaysToDeadlineTender deadline at least N days after the run date. 0 = still open. Drops notices without a tender deadline.
maxItemsMaximum notices to save. You pay per saved notice.
onlyNewSave only notices that earlier runs with the same filters did not save. For alerts.
stateKeyOptional name of the alert memory. Default: a hash of the filters.
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.

The query the Actor sent is saved in the SUMMARY record of the run's key-value store, together with the only-new statistics.

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.

Pricing

Pay per event. No rental, compute included.

EventFree planBronzeSilverGold
Notice saved$0.001$0.0009$0.0008$0.0007
Per 1,000 notices$1.00$0.90$0.80$0.70
Run start$0.001$0.001$0.001$0.001
  • 50 notices, the prefilled run: about $0.05.
  • Daily alert with about 30 new notices a day: about $1 a month.
  • Help rows for invalid input and "nothing new" runs are free. You pay only the start fee.

Set Maximum cost per run in the run options to cap spend. The Actor saves only as many notices as that budget covers.

Tips

  • Use CPV codes instead of broad keywords. They are precise and language independent.
  • Avoid short acronyms such as SOC or ERP as keywords. Full-text search also matches codes inside notices.
  • A country filter matches when any buyer is in that country. Check buyerCountries for joint procurements.
  • Set scope = ACTIVE to skip closed and historic notices.
  • Values are in the notice currency. Filter by currency if you mix EUR and non-EUR countries.

FAQ

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.

Can I use it from an AI agent (MCP)?

Yes. The Actor works as a tool through the Apify MCP server. All inputs are optional, arrays of codes work well, and invalid input returns a readable help row instead of a failed run.

Support

Found a bug or need a field? Open an issue in the Issues tab. This Actor is not affiliated with or endorsed by the Publications Office of the European Union.

More tools from the same developer, built with the same pricing and output style.

ActorWhat it does
Website Content Crawler to Markdown for RAG & LLMsCrawl whole websites into clean Markdown, RAG chunks and llms.txt
PDF to Markdown & Text Extractor with OCRPDF, Word, Excel and PowerPoint files to Markdown and text, with OCR
SEO Audit Tool: Site Crawler, Broken Links & ScoreCrawl a site and find broken links and on-page SEO issues
PageSpeed Insights & Lighthouse Bulk CheckerLighthouse scores and Core Web Vitals for many URLs at once
Tech Stack Detector: Wappalyzer & BuiltWith AlternativeDetect the CMS, frameworks, analytics and hosting of any website
Bulk Domain Lookup: DNS, WHOIS, SPF, DMARC & SSLDNS, email security and SSL checks for a list of domains
Speech to Text: Audio, Video & Podcast TranscriberWhisper transcripts, SRT and VTT subtitles from audio, video and podcast feeds
Email Validator & Verifier: Bulk MX & Disposable CheckCheck email lists for syntax, MX records and disposable domains
Website Contact Scraper: Emails, Phones & Social LinksFind emails, phone numbers and social profiles on company websites
VIES VAT Checker & EU Company Registry LookupValidate EU VAT numbers and look up company registry data
Companies House Scraper: UK Company Search & OfficersSearch UK companies and get profiles and officers
Greenhouse, Lever & Ashby Job Scraper: 7 ATS in One FeedJob postings from 7 applicant tracking systems in one schema
GitHub Scraper: Repo Stats, Stars, Trending & SearchRepository stats, stars, trending repos and search results