EU Tenders Scraper: TED Contract Awards and Winners avatar

EU Tenders Scraper: TED Contract Awards and Winners

Pricing

from $1.75 / 1,000 award records

Go to Apify Store
EU Tenders Scraper: TED Contract Awards and Winners

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

Mike Ross

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

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:

FieldExample
winnerName, winnerCountry, winnerSizeORACLE IBÉRICA, S.R.L., ESP, large
winnerIdentifierNational company or VAT number, when TED ties it to this winner without doubt
winnersInNotice, otherWinners6, the other winning companies on the same notice (private individuals are left out, see Privacy)
buyerName, buyerCountry, buyerCity, buyerTypeGobierno de Zaragoza, ESP, Zaragoza, Local authority
title, titleLanguageProcedure title, in English when the buyer published one
cpvDescription, mainCpv, cpvCodesDatabase and operating software package, 48600000
value, currency, valueEur, valueBasis458411.48, EUR, 458411.48, awarded, notice total
awardDecisionDate, publicationDate2026-09-25, 2026-10-20
contractType, procedureType, isFrameworkAgreement, lotssupplies, open, false, 1
noticeId, noticeUrl, pdfUrl, procedureId722698-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:

FieldExample
deadline2026-12-02T11:00:00Z (earliest lot deadline, UTC)
deadlineDate, daysToDeadline, isOpen2026-12-02, 40, true
participationRequestDeadlineDateFor 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

  1. 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.
  2. Pick What to return: contract awards, open tenders, or both.
  3. Set your filters. Countries take ISO codes (DE, DEU) or English names (Germany). CPV codes cover every code below them, so 72000000 returns all IT services. Keywords search the full notice text.
  4. 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

FieldWhat it doesDefault
modeawards, tenders or bothawards
daysBackPublication window in TED publishing days (Monday to Friday), counting today3
dateFrom, dateToA fixed publication date window instead, for example 2026-10-01empty
countriesBuyer countriesall
winnerCountriesCountries of the winning companies (awards only)all
cpvCodesCPV codes, including every code below themall
keywordsAny of these keywords in the notice text. Inside one keyword every word must appear. A trailing * matches word endingsnone
minValueEurMinimum value in EUR. Records without a value are dropped when this is above 00
onlyOpenDrop tenders whose deadline has passedtrue
onlyNewOnly records not returned by a previous run with the same mode and filtersfalse
maxItemsAt most this many records, newest notices first. 0 means no limit1000

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-record event, $0.0025 each)
  • $1.50 per 1,000 tender records (tender-record event, $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, value is 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 and winnersInNotice tells you how many share it.
  • valueEur converts the value with the European Central Bank euro reference rates of the run date. Currencies the ECB does not publish get no valueEur.
  • 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, winnerSize and winnerIdentifier only 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.