TED Tenders API – EU Public Tenders & Procurement Scraper
Pricing
from $1.00 / 1,000 results
TED Tenders API – EU Public Tenders & Procurement Scraper
Search and export EU public tenders and procurement notices from TED (Tenders Electronic Daily): filter by country, CPV code, keyword and deadline; one-language records with buyer, value, deadline, CPV labels, document links and, for award notices, the winning companies.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Perceptron Data
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
TED Tenders
Pick countries, CPV codes and keywords, get one row per EU tender notice: buyer, estimated value, deadline, CPV labels and, for awards, the winner. Built on TED's official API, with one language per record instead of 24.
Limits: only notices above the EU thresholds – national tenders below them are not on TED. Estimated value and winner appear only where the notice publishes them. CPV labels come in English.

TED (Tenders Electronic Daily) is the EU's official procurement journal, with notices from all 27 member states, the EEA and EU institutions. The data comes straight from TED's API – no HTML scraping, no proxies.
How to use – step by step
- Click Try for free on this page (a free Apify account is enough) – the form opens with Germany and CPV 72 (IT services) for the last 30 days. Called through the API without filters, the actor covers all of Europe.
- Choose Countries (three-letter codes such as
DEU,AUT) and CPV codes / categories – a two-digit division covers a whole sector; optionally Keywords in title. - Set the time window (Published within last N days or Published from (date)), Only tenders you can still bid on, the Notice types (
can-standardfor awards) and the Output language. - Set Maximum tenders (default 500) and click Start. Five notices out of 617 matches took about a second in a local test run on 12 October 2026.
- Open the Output tab: the Tenders view shows title, buyer, country, value, deadline, days left, CPV category and the notice link. Export as CSV, Excel or JSON, or read the rows through the API. The free
COVERAGErecord says how many notices matched and why the run stopped. - For daily tender alerts, add
only_newand a schedule (see Monitoring setup below).
Why this actor and not the raw API
TED's own API is powerful but awkward to consume: every text field comes back in all 24 EU languages at once, arrays contain duplicates, dates carry timezone suffixes, CPV codes are bare numbers, and page-based paging refuses to go past 15,000 results. This actor fixes all of it:
- 🌍 One language, not 24 — pick your language and every title, description, buyer name and even the PDF link comes back in it, with English fallback
- 🏷 CPV codes translated —
72260000also arrives as "IT services: consulting, software development, Internet and support" - ⏳ Deadline maths done for you —
daysUntilDeadlineandisOpen, plus an option to return only tenders you can still respond to. Restricted and negotiated procedures count too: their notices carry a deadline for requests to participate instead of a tender deadline (deadlineType) — measured on German IT notices, that is a third of all open procedures - 🔎 Filters instead of query syntax — country, CPV category, keyword and date pickers; the expert query is still there if you want it
- 📄 Direct links — notice page, PDF and XML, in your language
- ♾️ No 15,000-result ceiling — token-based iteration goes as deep as your query needs (measured: 26,127 of 26,127 notices, no duplicates)
- 🏆 Every winner, not just the first — multi-lot awards list all winning
companies (
winnerNames); the contract value is the total, the procedure estimate or the sum of all lots, andvalueBasissays which - 🧾 Every row says where it came from —
checkedAt, the exactquerysent to TED,dataSourceand the official notice link; a freeCOVERAGErecord tells you how many notices matched and why a run stopped
Use cases
- Bid monitoring — schedule a daily run for your sector and get every new tender into Slack, a webhook, Google Sheets or your CRM
- Sales & lead generation — public buyers with a budget and a stated need, filtered to your industry and region
- Market & competitor research — award notices (
can-standard) show who won which contract and for how much - Grant & funding research — track what the public sector is buying and where
- Data products & dashboards — a normalised procurement feed for analytics
- AI agents — clean schema and plain-language filters, callable via MCP
Input example
Every new IT tender in Germany and Austria from the last week that is still open for bids:
{"countries": ["DEU", "AUT"],"cpv_codes": ["72", "48"],"published_since_days": 7,"only_open_tenders": true,"notice_types": ["cn-standard"],"language": "de","max_items": 500}
Who won public construction contracts in France this year:
{"countries": ["FRA"],"cpv_codes": ["45"],"notice_types": ["can-standard"],"published_from": "2026-01-01","language": "fr"}
Output example
{"publicationNumber": "446016-2026","title": "Germany – Software-related services – Microsoft training services, Lot 2","buyerName": "Bundesrepublik Deutschland, Beschaffungsamt des BMI","buyerCity": "Bonn","buyerCountry": "DEU","noticeType": "cn-standard","procedureType": "open","contractNature": "services","publicationDate": "2026-06-30","deadline": "2026-08-04","deadlineType": "tender","daysUntilDeadline": 5,"isOpen": true,"estimatedValue": 1200000.0,"currency": "EUR","valueBasis": "procedure_estimate","cpvMain": "72260000","cpvCategory": "IT services: consulting, software development, Internet and support","cpvCodes": ["72260000", "72261000"],"placeOfPerformance": ["DEA22", "DEU"],"noticeUrl": "https://ted.europa.eu/en/notice/-/detail/446016-2026","pdfUrl": "https://ted.europa.eu/de/notice/446016-2026/pdf","checkedAt": "2026-07-30T08:14:02Z","query": "(buyer-country=DEU OR buyer-country=AUT) AND (classification-cpv=72* OR classification-cpv=48*) AND publication-date>=20260723","dataSource": "TED – Tenders Electronic Daily, Publications Office of the EU (api.ted.europa.eu)"}
Award notices add winnerName (all winners, joined with ; ) and
winnerNames (a list).
Coverage report – what was checked
Besides the dataset, every run writes a COVERAGE record to its key-value
store (free, not charged): the query, how many notices matched at TED, how many
were delivered, how many were skipped and why (closed, no deadline, delivered in
an earlier run), and why the run stopped — all matching notices delivered, your
maximum reached, your maximum cost per run reached, or the run timeout
near. The status message says the same in one line. A run never claims more
than it stored.
CPV quick reference
Pass a 2-digit division to cover a whole sector:
| Code | Sector | Code | Sector |
|---|---|---|---|
45 | Construction work | 72 | IT services & software development |
48 | Software packages | 71 | Architecture & engineering |
79 | Business services (consulting, marketing, HR) | 85 | Health & social work |
80 | Education & training | 90 | Cleaning & environmental services |
50 | Repair & maintenance | 34 | Transport equipment |
33 | Medical equipment & pharmaceuticals | 31 | Electrical equipment |
Monitoring setup
- Set your filters,
published_since_days: 7andonly_new: true - Add a Schedule (daily)
- Connect a webhook, Slack, Google Sheets or a database integration
With only_new the actor remembers which notices it delivered for these
filters (in the key-value store eu-tenders-ted-monitor of your account) and
skips them on the next run — they are neither delivered nor charged twice.
The window can therefore overlap generously, so a late run or a missed day
loses nothing. The first run delivers everything in the window.
A rolling window alone (published_since_days: 1) is not duplicate-free: it
reaches back to yesterday, so every notice falls into two consecutive daily
runs.
Notes
- Data comes from the official, public TED API — no login, no proxies. Requests are paced so runs stay reliable.
- Notices are legal publications about public bodies and contracts. Award notices name the winning bidders; where a winner is a sole trader, its trading name can contain a person's name (e.g. "… Inhaber: …").
- Large exports stop cleanly before the run timeout and before your maximum cost per run, keep everything already stored and say so.
- Not affiliated with or endorsed by the Publications Office of the European Union.
What does a run cost?
$0.01 per run start plus a price per tender that drops with your Apify plan:
| Your Apify plan | Per tender | 1,000 tenders | 10,000 tenders |
|---|---|---|---|
| Free | $0.002 | $2.01 | $20.01 |
| Starter | $0.0015 | $1.51 | $15.01 |
| Scale | $0.0012 | $1.21 | $12.01 |
| Business & Enterprise | $0.001 | $1.01 | $10.01 |
You pay only for tenders stored in the dataset — not for skipped notices, not
for notices an earlier monitoring run already delivered, and not for the
COVERAGE record.
Changelog
- 12 October 2026 –
only_newmonitoring: each notice is delivered once, also when the windows overlap. "Only open" also counts deadlines for requests to participate (deadlineType). Award notices list every winner (winnerNames); the contract value is the total or the sum of all lots (valueBasis). CPV codes with check digit (72260000-5) work. Every row carriescheckedAt, the query sent to TED and the source; a freeCOVERAGErecord per run; at your cost limit or near the timeout the run stops cleanly and says how much it stored. Called through the API without filters, the actor now covers all of Europe instead of the form's German example.
Auf Deutsch: EU-Ausschreibungen aus TED exportieren
Länder, CPV-Codes und Stichwörter rein, je Bekanntmachung eine Zeile raus: Auftraggeber, geschätzter Wert, Frist, CPV-Bezeichnungen und bei Zuschlägen der Gewinner – aus TED, über die offizielle TED-Schnittstelle. Täglich geplant entsteht daraus ein Ausschreibungsalarm für Deutschland oder jedes andere EU-Land.
Filter: Länder, CPV-Codes (auch mit Prüfziffer, z. B. 72260000-5),
Stichwörter im Titel, Veröffentlichungszeitraum, Frist und „nur noch offene
Ausschreibungen“ — dabei zählen Angebotsfristen und Fristen für
Teilnahmeanträge (nicht offene und Verhandlungsverfahren). Jede Zeile enthält
Auftraggeber mit Ort, Bekanntmachungsart, Verfahrensart, Frist mit Art und
verbleibenden Tagen, Auftragswert mit Herkunft, CPV-Bezeichnungen,
Ausführungsort, bei Zuschlägen alle Gewinner sowie Links zu PDF, XML und
Webansicht — auf Wunsch in deutscher Sprache. Dazu Prüfzeitpunkt, die an TED
gesendete Abfrage und die Quelle; der kostenlose Datensatz COVERAGE nennt
Treffer, Lieferung und Abbruchgrund.
Typische Anwendungsfälle: tägliches Ausschreibungsmonitoring per Zeitplan
(mit only_new ohne Doppellieferung), Vertrieb an öffentliche Auftraggeber,
Wettbewerbs- und Marktanalysen.
FAQ
Is there an official TED API? Yes — and this actor is built on it. What it adds is usability: TED returns every text in all 24 EU languages at once, duplicated arrays and timezone-laden dates, and its page-based paging refuses to go past 15,000 results. This actor returns one language, clean values, and iterates past that ceiling.
How do I monitor new tenders in my sector?
Pick your countries and CPV codes, set published_since_days: 7 and
only_new: true, then schedule the actor daily and connect a webhook, Slack or
Google Sheets integration. Each notice is delivered once, even though the
windows overlap.
What is a CPV code?
The EU's procurement category system. A two-digit code covers a whole sector —
72 is IT services, 45 construction, 85 health. Full eight-digit codes
narrow it down. Prefixes match automatically.
Can I see who won a contract?
Yes. Set notice_types to can-standard (contract award notice) — those
records carry every winner (winnerNames; 23 % of award notices name more
than one) and the awarded value where published.
Why do many tenders have no value? Publishing an estimated value is not mandatory for every notice type. The field stays empty rather than being estimated.
Does this cover national tenders below the EU threshold? No. TED covers procurement above the EU thresholds. Below-threshold German tenders are published elsewhere and are not part of this dataset.
More from Perceptron Data
| Actor | What it does |
|---|---|
| Advertiser Check (Google & Bing) | Company list in, one row per company out: Google ads, Bing ads, ad counts, accounts |
| Imprint & VAT Check | Domains in, company rows out: legal name, address, register number and EU VAT ID checked against VIES (Swiss UIDs excluded) |
| Free Imprint & Contact Check | The same company row, free, for up to 10 websites per run |
| PDF to Markdown | PDF, Word, Excel and PowerPoint to Markdown for AI – tables as JSON, OCR for scans |
| Research Agent | A question in, cited passages out – every source graded by evidence level |
| App Store & Google Play Data | App IDs or App Store keywords in, one row per app out, plus App Store reviews |
| Arbeitsagentur Jobs | German job listings from the Jobbörse of the Bundesagentur für Arbeit |
| kununu Employer Data | Employer score vs. industry, salary ranges, benefits and reviews for DACH companies |
| Messe München Exhibitors | Exhibitor lists of bauma, IFAT, BAU and more |
| Koelnmesse Exhibitors | Exhibitor lists of Anuga, ISM, imm cologne and more |
| MaStR Energy Assets | Solar, wind and storage units in Germany with operator and capacity |
| EUDAMED Medical Devices | EU medical devices, manufacturers and certificates |
| Data Source Finder | Free: tells you which ready-made scraper covers your data source |
Support
Bug reports are welcome in the Issues tab.