EU Tenders Scraper: TED Contract Awards and Winners
Pricing
from $1.75 / 1,000 award records
EU Tenders Scraper: TED Contract Awards and Winners
Returns EU public procurement notices from TED: contract awards with the winning company, buyer, value in EUR, CPV and date, plus open tenders with deadlines. Filter by country, CPV, keyword and value. Daily mode returns only new records.
Pricing
from $1.75 / 1,000 award records
Rating
0.0
(0)
Developer
Mike Ross
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 hours ago
Last modified
Categories
Share
Get EU public procurement data from TED (Tenders Electronic Daily) as clean, flat records:
- Contract awards: one record per winning company, with the winner's name, country and size, the public buyer, the contract value (also converted to EUR), CPV code and description, award decision date and a link to the notice. A company that just won a public contract is a strong buying signal for sales teams.
- Open tenders: one record per call for competition that is still open, with buyer, estimated value, CPV, procedure type and the submission deadline.
Filter by buyer country, winner country, CPV code, keyword and minimum value. Schedule it daily with Only records not returned in previous runs switched on to get just the new awards and tenders.
What you get
Award records (recordType: "award"), one per winning company on a contract award notice:
| Field | Example |
|---|---|
winnerName, winnerCountry, winnerSize | ORACLE IBÉRICA, S.R.L., ESP, large |
winnerIdentifier | National company or VAT number, when TED ties it to this winner without doubt |
winnersInNotice, otherWinners | 6, the other winning companies on the same notice (private individuals are left out, see Privacy) |
buyerName, buyerCountry, buyerCity, buyerType | Gobierno de Zaragoza, ESP, Zaragoza, Local authority |
title, titleLanguage | Procedure title, in English when the buyer published one |
cpvDescription, mainCpv, cpvCodes | Database and operating software package, 48600000 |
value, currency, valueEur, valueBasis | 458411.48, EUR, 458411.48, awarded, notice total |
awardDecisionDate, publicationDate | 2026-09-25, 2026-10-20 |
contractType, procedureType, isFrameworkAgreement, lots | supplies, open, false, 1 |
noticeId, noticeUrl, pdfUrl, procedureId | 722698-2026 and links to the notice on TED |
Tender records (recordType: "tender") have the same notice, buyer, CPV and value fields (value is the estimated value), plus:
| Field | Example |
|---|---|
deadline | 2026-12-02T11:00:00Z (earliest lot deadline, UTC) |
deadlineDate, daysToDeadline, isOpen | 2026-12-02, 40, true |
participationRequestDeadlineDate | For restricted and negotiated procedures |
Every record also has isNew, firstSeenAt, source, licence and scrapedAt. The Output tab has three views: Contract awards, Open tenders and All records.
Who it is for
- Sales and business development teams: companies that just won public contracts often need staff, suppliers, subcontractors, software, equipment and finance. Filter by winner country to cover your territory.
- Bid teams and consultants looking for open tenders in their sector, with deadlines.
- Market analysts tracking who wins which public contracts, at what value, in which countries.
- Suppliers who want to know which competitors are winning and which buyers are spending.
Quick start
- Click Start with the example input. You get contract awards for IT services and software in Germany, France and the Netherlands from the last 3 publishing days.
- Pick What to return: contract awards, open tenders, or both.
- Set your filters. Countries take ISO codes (
DE,DEU) or English names (Germany). CPV codes cover every code below them, so72000000returns all IT services. Keywords search the full notice text. - Schedule it daily with Only records not returned in previous runs switched on, and send new records to email, Slack, Google Sheets or your CRM with an Apify integration or webhook.
Input
| Field | What it does | Default |
|---|---|---|
mode | awards, tenders or both | awards |
daysBack | Publication window in TED publishing days (Monday to Friday), counting today | 3 |
dateFrom, dateTo | A fixed publication date window instead, for example 2026-10-01 | empty |
countries | Buyer countries | all |
winnerCountries | Countries of the winning companies (awards only) | all |
cpvCodes | CPV codes, including every code below them | all |
keywords | Any of these keywords in the notice text. Inside one keyword every word must appear. A trailing * matches word endings | none |
minValueEur | Minimum value in EUR. Records without a value are dropped when this is above 0 | 0 |
onlyOpen | Drop tenders whose deadline has passed | true |
onlyNew | Only records not returned by a previous run with the same mode and filters | false |
maxItems | At most this many records, newest notices first. 0 means no limit | 1000 |
Example input for a daily sales feed of software and IT service winners in the DACH region:
{"mode": "awards","countries": ["DE", "AT", "CH"],"cpvCodes": ["72000000", "48000000"],"minValueEur": 100000,"onlyNew": true,"maxItems": 0}
Example input for open construction tenders in Ireland worth at least EUR 1 million:
{"mode": "tenders","countries": ["IE"],"cpvCodes": ["45000000"],"minValueEur": 1000000,"daysBack": 10}
Output example
{"recordType": "award","noticeId": "722698-2026","noticeType": "can-standard","publicationDate": "2026-10-20","title": "Suministro de licencias de Software Oracle de los sistemas de información del Ayuntamiento de Zaragoza.","titleLanguage": "spa","cpvDescription": "Database and operating software package","mainCpv": "48600000","contractType": "supplies","procedureType": "neg-wo-call","buyerName": "Gobierno de Zaragoza","buyerCountry": "ESP","buyerCity": "Zaragoza","value": 458411.48,"currency": "EUR","valueEur": 458411.48,"valueBasis": "awarded, notice total","winnerName": "ORACLE IBÉRICA, S.R.L.","winnerCountry": "ESP","winnerSize": "large","winnersInNotice": 1,"awardDecisionDate": "2026-09-25","noticeUrl": "https://ted.europa.eu/en/notice/-/detail/722698-2026","pdfUrl": "https://ted.europa.eu/en/notice/722698-2026/pdf","isNew": true,"firstSeenAt": "2026-10-23"}
A run report is saved in the key-value store as RUN_SUMMARY: the exact TED query used, how many notices matched, how many were scanned, filtered or already returned, and the exchange rate date.
Pricing
This Actor uses pay per event pricing. Platform usage is included.
- $2.50 per 1,000 award records (
award-recordevent, $0.0025 each) - $1.50 per 1,000 tender records (
tender-recordevent, $0.0015 each)
You only pay for records saved to your dataset, so filters, onlyNew and maxItems keep costs down. For example, a daily onlyNew run for IT and software awards in Germany, France and the Netherlands typically returns a few dozen award records, which costs well under $0.25 a day. Set a maximum cost per run in the run options and the Actor stops cleanly when it is reached.
How values and winners work
- For awards,
valueis the total awarded value of the notice, across all lots and winners. When a notice has several winners, each winner gets its own record with the same notice total andwinnersInNoticetells you how many share it. valueEurconverts the value with the European Central Bank euro reference rates of the run date. Currencies the ECB does not publish get novalueEur.- TED publishes winner countries, sizes and company numbers as separate lists that do not always line up with the winner names. The Actor fills
winnerCountry,winnerSizeandwinnerIdentifieronly when the match is unambiguous, and leaves them empty otherwise. - Roughly 1 award notice in 10 has no winner (for example, when no tender was received). Those notices produce no record and are counted in
RUN_SUMMARY.
How "only new records" works
When onlyNew is on, the Actor remembers which records it has already returned for this mode and these filters in a key-value store in your account called agents001-eu-ted-tenders-feed-state. The date window is not part of that history, so a daily run with the default 3 day window never returns the same record twice. The first run returns everything that matches. The store holds short hashes and dates only.
With onlyNew off, the Actor does not open or update this store, so every record has isNew set to true. If a run stops with a message that it cannot open the store (for example because another Actor in your account already uses that name), enter a different name in State store name and run again.
Data source, licence and privacy
All data comes from the official TED Search API of the Publications Office of the European Union (api.ted.europa.eu), which is open to the public and needs no login or API key. The Actor keeps well within TED's published fair usage limits.
TED's legal notice states that procurement notices published in the Supplement to the Official Journal can be freely reused for commercial or non-commercial purposes, under the Commission's reuse policy (Decision 2011/833/EU). Source: TED, Publications Office of the European Union. Each record carries a licence note and a link to the original notice so you can credit the source when you pass the data on. Exchange rates: European Central Bank euro foreign exchange reference rates.
The Actor returns company level data only. It never requests or returns contact persons, email addresses, phone or fax numbers, or street addresses, even though TED holds some of them.
Some contract winners are private individuals, such as sole traders who trade under their own name. TED does not flag them, so the Actor drops a winner when TED marks it as a micro enterprise or masks its identification number (TED masks personal ID numbers), and its name contains no legal form (such as GmbH, Ltd, S.A., S.r.l., Sp. z o.o., s.r.o., Kft, Oy, AB, d.o.o.) or organisation word (such as university, hospital, municipality, association, foundation, group, holding). Words that only describe a trade, such as "services", "consulting" or the Polish "usługi", do not count, because sole traders often trade as "first name, surname, trade" (for example "Jan Kowalski Usługi Remontowe"). Dropped winners get no record and are not named in otherWinners; winnersInNotice still counts them, and RUN_SUMMARY reports how many were dropped as personalWinnersDropped. This errs on the side of privacy, so a few small companies that leave out their legal form may also be dropped. Company numbers of kept micro enterprises are left out too.
FAQ
How fresh is the data? TED publishes new notices every working day, Monday to Friday. Each run queries TED live, so notices appear on the day they are published.
Why is the title in another language?
Buyers publish the title in their own language. The Actor uses the English title when the buyer provided one, and cpvDescription always gives the main CPV description in English.
My keyword returns too much or nothing.
TED ignores very common words (such as "and", "the" or "IT"), so the Actor drops them. Use more specific words, a trailing * (for example softw*), or a CPV code. TED also matches its own translations of CPV descriptions, so English words often find notices in other languages.
Can I get older notices?
Yes. Set dateFrom and dateTo, up to 365 days per run.
Something looks wrong. What should I do? Open an issue on the Actor's Issues tab with the run link and your input.
Disclaimer
This Actor is independent and is not affiliated with, endorsed by or sponsored by the Publications Office of the European Union, TED or the European Commission. TED and the names of buyers and companies belong to their owners. Notices can be corrected after publication; always check the official notice before acting on it.