EU TED Tenders Scraper & Alerts: Public Procurement
Pricing
from $0.70 / 1,000 notices
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 days ago
Last modified
Categories
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:
onlyNewremembers 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
- 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.
- Change CPV codes, keywords and buyer countries to your market.
- Click Start. Download the results as JSON, CSV, Excel or HTML, or read them via the Apify API.
Daily tender alerts (only new notices)
- Set your filters, for example CPV
72000000and countriesDE,AT. - Turn on Only new notices since the last run. Keep
publishedWithinDaysat 7 or so: it limits the first run. - Save the input as a Task and add a Schedule, for example every weekday at 07:00.
- 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-newin 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}
| Field | Description |
|---|---|
keywords | Full-text search. Any keyword can match. Phrases like cloud services match exactly. |
cpvCodes | CPV codes. Parent codes include children, so 72000000 covers all IT services. |
countries | Buyer country, ISO alpha-2 (DE) or alpha-3 (DEU). |
noticeTypes | contract-notice, contract-award, prior-information, direct-award, contract-modification, corrigendum. |
publishedWithinDays | Relative date window. Default 30. Use 0 for all dates. |
publicationDateFrom / publicationDateTo | Absolute dates, YYYY-MM-DD. From overrides the relative window. |
minValue / maxValue | Total value (estimated or awarded) in the notice currency. |
buyerName | Phrase inside the contracting authority name. |
languages | Original notice language, e.g. en, de, fr. |
minDaysToDeadline | Tender deadline at least N days after the run date. 0 = still open. Drops notices without a tender deadline. |
maxItems | Maximum notices to save. You pay per saved notice. |
onlyNew | Save only notices that earlier runs with the same filters did not save. For alerts. |
stateKey | Optional name of the alert memory. Default: a hash of the filters. |
scope | ALL, ACTIVE (only active notices) or LATEST (latest OJ S edition). |
onlyLatestVersions | Skip superseded versions of changed notices. |
expertQuery | Raw 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
| Field | Meaning |
|---|---|
noticeId | eForms notice UUID. Publication number for pre-2023 notices. |
publicationNumber | TED number, e.g. 662851-2026. Stable key for deduplication. |
publicationDate | Date published in the OJ S. |
noticeType / noticeTypeCode | Readable type and raw TED code (cn-standard, can-standard, pin-only and others). |
title | English title when the notice has one, otherwise the TED English headline (country, CPV, original title). |
titleOriginal | Title in the original language. |
buyerName, buyerCountry, buyerCity | First contracting authority. Country as ISO alpha-2. |
buyerCountries | All buyer countries. Joint procurements (e.g. EU institutions) list several. |
cpvCodes, mainCpv | All CPV codes and the main one. |
estimatedValue, currency | Estimated value of the procedure. Lot values are summed when no total is given. |
awardedValue, awardedCurrency | Total awarded value on award notices. |
winnerName, winners, winnerCountries | Winning organisations. Names only, no contact persons. |
deadline | Earliest tender (or request to participate) deadline. |
procedureType | Open, restricted, negotiated and others. |
lots | Number of lots. |
language | Original language, ISO 639-1. |
noticeUrl, pdfUrl, xmlUrl | TED notice page, PDF and eForms XML. |
Pricing
Pay per event. No rental, compute included.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
| 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
SOCorERPas keywords. Full-text search also matches codes inside notices. - A country filter matches when any buyer is in that country. Check
buyerCountriesfor joint procurements. - Set
scope = ACTIVEto skip closed and historic notices. - Values are in the notice currency. Filter by
currencyif you mix EUR and non-EUR countries.
FAQ
Is it legal to scrape TED?
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.
Related Actors
More tools from the same developer, built with the same pricing and output style.
| Actor | What it does |
|---|---|
| Website Content Crawler to Markdown for RAG & LLMs | Crawl whole websites into clean Markdown, RAG chunks and llms.txt |
| PDF to Markdown & Text Extractor with OCR | PDF, Word, Excel and PowerPoint files to Markdown and text, with OCR |
| SEO Audit Tool: Site Crawler, Broken Links & Score | Crawl a site and find broken links and on-page SEO issues |
| PageSpeed Insights & Lighthouse Bulk Checker | Lighthouse scores and Core Web Vitals for many URLs at once |
| Tech Stack Detector: Wappalyzer & BuiltWith Alternative | Detect the CMS, frameworks, analytics and hosting of any website |
| Bulk Domain Lookup: DNS, WHOIS, SPF, DMARC & SSL | DNS, email security and SSL checks for a list of domains |
| Speech to Text: Audio, Video & Podcast Transcriber | Whisper transcripts, SRT and VTT subtitles from audio, video and podcast feeds |
| Email Validator & Verifier: Bulk MX & Disposable Check | Check email lists for syntax, MX records and disposable domains |
| Website Contact Scraper: Emails, Phones & Social Links | Find emails, phone numbers and social profiles on company websites |
| VIES VAT Checker & EU Company Registry Lookup | Validate EU VAT numbers and look up company registry data |
| Companies House Scraper: UK Company Search & Officers | Search UK companies and get profiles and officers |
| Greenhouse, Lever & Ashby Job Scraper: 7 ATS in One Feed | Job postings from 7 applicant tracking systems in one schema |
| GitHub Scraper: Repo Stats, Stars, Trending & Search | Repository stats, stars, trending repos and search results |