EU Tenders & Contract Awards Scraper — TED Procurement avatar

EU Tenders & Contract Awards Scraper — TED Procurement

Pricing

from $2.00 / 1,000 results

Go to Apify Store
EU Tenders & Contract Awards Scraper — TED Procurement

EU Tenders & Contract Awards Scraper — TED Procurement

Scrape EU public procurement from TED (Tenders Electronic Daily). Find open tenders by CPV code, country, keyword, value and deadline, or mine awarded contracts for winners and prices. Official EU open-data API, English-normalised flat JSON/CSV, company-level only.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

mochi

mochi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

EU Tenders & Contract Awards Scraper — TED public procurement data

Scrape EU public procurement from TED (Tenders Electronic Daily), the European Union's official journal for public contracts. Two jobs in one actor:

  • Find open tenders you can still bid on — filtered by CPV code, country, keyword, contract value and submission deadline.
  • Mine awarded contracts — who won, what they were paid, when it was signed, and whether the winner was an SME or a large company.

Around €700 billion of public contracts are advertised through TED every year, across the EU, the EEA and candidate countries. This actor turns that into flat, English-normalised JSON/CSV you can drop straight into a CRM, a spreadsheet, or an AI agent.

Built on TED's official public API — EU open data, no API key, no login, no scraping of a rendered page.


What you get

One flat row per notice. No nested objects, the same columns on every row:

FieldDescription
publicationNumberTED publication number, e.g. 449762-2026
noticeCategorytender, award, prior-information or other
noticeTypeRaw TED subtype, e.g. cn-standard, can-standard, veat
titleNotice title, in English (or your chosen language)
buyerName / buyerCountry / buyerCity / buyerWebsiteThe contracting authority
buyerLegalTypee.g. body-pl (body governed by public law)
cpvMain / cpvCodesTED's declared main CPV plus every classification on the notice
contractNatureservices, supplies or works
procedureTypeopen, restricted, neg-w-call, …
publicationDateWhen the notice was published
deadlineDate / deadlineDateLatestEarliest and latest tender-submission deadline
daysUntilDeadline / isOpenForBidsComputed for you — sort by urgency without post-processing
performanceCountries / performanceCitiesWhere the work is delivered
estimatedValue / estimatedValueCurrencyThe published budget
awardedValue / awardedValueCurrencyWhat was actually awarded (award notices only)
winnerNames / winnerCountries / winnerSizesThe winning companies, and sme / large
contractConclusionDateWhen the contract was signed
noticeUrl / xmlUrl / pdfUrlEnglish notice page, full XML, and PDF

Example inputs

Every IT tender in Germany and France still open for bids, closing before 30 September

{
"searchMode": "openTenders",
"cpvCodes": ["72000000"],
"countries": ["Germany", "FR"],
"contractNature": "services",
"deadlineTo": "2026-09-30",
"maxResults": 200
}

Who is winning big EU IT contracts?

{
"searchMode": "awards",
"cpvCodes": ["72000000"],
"minValue": 1000000,
"maxResults": 500
}

Everything mentioning "cloud migration", anywhere in the EU, in any language

{ "searchMode": "all", "keywords": "cloud migration", "maxResults": 100 }

Run it with empty input {} and you get the 20 most recently published open tenders across the whole EU.


Input reference

InputDefaultNotes
searchModeopenTendersopenTenders (deadline still ahead), awards (winners & prices), all
cpvCodes[] (all)A code matches all of its sub-codes, so 72000000 = every IT notice
countries[] (all)Buyer country. Name, ISO-2 or ISO-3 — Germany, DE, DEU all work
keywords""Full-text phrase, matched across every published language version
contractNatureanyservices, supplies, works
minValue0Minimum total value, in the notice's own currency
publishedFrom / publishedTolast 12 monthsYYYY-MM-DD
deadlineFrom / deadlineTotoday / noneYYYY-MM-DD
sortOrdernewestoldest is faster and cheaper for a full-archive pull
languageeng3-letter code for translated text: eng, deu, fra, spa, …
maxResults200 = no limit

Handy CPV codes

72000000 IT services · 45000000 construction · 33000000 medical equipment · 79000000 business & management services · 71000000 architectural & engineering · 80000000 education & training · 85000000 health & social work · 50000000 repair & maintenance · 34000000 transport equipment · 09000000 energy & fuels


Three things this actor gets right

1. It hands you the newest notices first. TED's API has no sort parameter and returns matches in ascending publication-number order — so a naive scraper gives you decade-old notices first. This actor slices the publication window by day and walks it backwards, so the first row you see is from today.

2. cpvMain is the real main CPV. TED lumps the main and additional classifications into one list. Taking the first one is wrong for 23% of notices (measured on a 250-notice sample). This actor reads TED's declared main classification instead.

3. Estimated value and awarded value are never conflated. TED publishes both under the same total-value key, meaning "budget" on a call for tenders and "price paid" on an award notice. They are separate columns here, so you never mistake one for the other.


Data coverage and honest limits

  • Winner data starts with eForms. Award notices published before 2024 carry no structured winner name, size or signature date — that data simply is not in the source. Measured fill rates: 0% for 2016–2023, 58% in February 2024, 86–88% from April 2024, and 90–96% from 2025 onward. awards mode therefore defaults its window to 2024-01-01; set publishedFrom earlier if you want the older archive, and the run log will warn you that the winner columns will be empty.
  • Not every notice publishes a value. Roughly 80–90% do. minValue silently excludes the rest.
  • Buyer and winner names are not translated. TED machine-translates notice titles into all 24 EU languages, but organisation names are published only in their own language. Asking for eng falls back to the original rather than dropping the name.
  • newest mode costs more requests than oldest, because it queries day by day. For a full archive pull, use sortOrder: "oldest".

Privacy — organisation-level data only

This actor returns legal entities only: contracting authorities and the companies that won public contracts, which are published as a matter of public record in the EU's official journal.

TED also exposes personal fields — contact persons, personal e-mail addresses, and beneficial-owner records. This actor never requests them, so they cannot appear in your dataset. That is enforced in code (the requested field list is fixed) and asserted by the test suite, which additionally scans every output row for anything resembling an e-mail address.

Source and licence

Data comes from the European Union's TED Search API v3 (api.ted.europa.eu), reused under the European Commission's reuse policy. This actor is not affiliated with, endorsed by, or connected to the European Union or the Publications Office.