TED Europa Tenders Scraper avatar

TED Europa Tenders Scraper

Pricing

from $3.56 / 1,000 notices

Go to Apify Store
TED Europa Tenders Scraper

TED Europa Tenders Scraper

Scrape TED Europa tender notices and contract award notices: title in English, buyer, country, CPV codes, deadline, value, winner and 245 eForms fields. Daily tender alerts by country, CPV, keyword or expert query.

Pricing

from $3.56 / 1,000 notices

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

ParseForge

TED Europa Tenders Scraper

Scrape EU tender notices and contract award notices from TED (Tenders Electronic Daily) — every notice with its title in English, the buyer, the country, the CPV codes, the submission deadline, the contract value and the winning supplier. No login, no API key, no browser. Built for daily tender alerts: point it at the last day and it returns only what was published since. Export to CSV, JSON, Excel, or XML.

TED is the EU's official journal supplement for public procurement: every contract above the EU threshold in 27 member states plus Norway, Switzerland, Iceland and the Western Balkans is published there. The website itself sits behind an AWS captcha, and its search API takes an expert query language, an explicit list of 1,830 field names and three different pagination rules. This Actor drives that API and returns one flat row per notice, with the fields you asked for and nothing you did not.

Who uses itWhat they scrape TED tender notices for
Bid and capture teamsDaily tender alerts for their CPV codes and countries, with the deadline and the submission portal link
Public-sector salesWhich authorities buy what they sell, who they bought it from last time and for how much
Competitive and supplier intelligenceContract award notices naming a competitor, with the awarded value, the ranking and the number of bids received
Procurement analysts and researchersAward rates, framework agreements, green and reserved procurement flags across a country or a whole sector
Tender-alert and government-tender platformsA deduplicated daily feed keyed on TED's own publication number

What it does

This Actor searches TED's official API — 7.0 million notices back to 26 August 2016, about 2,500 new ones every working day — and returns one row per notice:

  • 📋 The notice (always): publication number, title in your language, publication and dispatch dates, OJS issue, notice type and stage, procedure type, contract type, CPV codes, buyer name, country, region and city, total value and currency, tender deadline, and links to TED's own HTML, PDF and XML.
  • 🏛️ Buyer details (optional): full address, e-mail, phone, contact point, buyer profile URL, legal type and main activity.
  • 📦 Lot details (optional): per-lot titles, descriptions, estimated values, durations, place of performance, and the award criteria with their weights.
  • 🏆 Award and winner details (optional): winner name, VAT identifier, address and company size, the awarded value, contract number and date, tender ranks, and how many bids arrived — including how many came from SMEs and from outside the EEA.
  • 📑 Participation conditions (optional): exclusion grounds, selection criteria, framework agreements, dynamic purchasing systems, e-submission and e-invoicing, guarantees, reserved and green procurement, EU funding.
  • 📎 Tender documents (optional): links to the procurement documents and the submission portal, their languages and access restrictions.
  • ⚖️ Review and appeal bodies (optional): the body that hears appeals, its address, and the deadline for lodging one.
  • 🏢 Other organisations, corrections, legacy codes, full text and all 24 title translations (optional, one block each).

A row with everything switched on carries about 150 columns drawn from 245 TED fields.

Every filter runs inside TED's own index, so a search by country, CPV code or keyword costs a single request instead of a sweep.

Titles in English, whatever language the buyer filed in

TED machine-translates every notice title into all 24 official EU languages, and this Actor picks the one you asked for. A Czech hospital's notice comes back as "Czechia – Medical consumables – Dodávky jednorázových bipolárních elektrochirurgických nástrojů…": the English summary first, then the buyer's own wording.

Descriptions, lot texts and buyer names exist only in the language the buyer filed in — TED does not translate those. Those fields fall back to the original, and every row carries a textLanguages field naming the language buckets it actually used, so a run set to German never silently hands you Polish while claiming otherwise.

Filter by CPV code

CPV (Common Procurement Vocabulary) codes are how TED classifies what is being bought, and matching is hierarchical: asking for the division 72000000 also returns 72263000, 72210000 and every other code beneath it. Pick whole divisions from the list — IT services, construction work, medical equipment, transport and 41 more — or put exact eight-digit codes in the expert query.

What you can do with TED procurement data

Get a daily tender alert for your sector.

A construction firm schedules a run every morning with buyerCountries: ["DEU", "AUT"], cpvCodes: ["45000000"] and publishedLastDays: 1, and pushes the new rows straight into its CRM.

Only see tenders you can still bid on.

Switch on Only tenders still open and TED drops everything whose submission deadline has passed — 510,000 Spanish notices become the 26,000 that are actually live.

Watch a competitor.

Set winnerName to a company and switch on the award block to get every contract it has won: the buyer, the value, where it ranked and how many others bid.

Build a market-sizing dataset.

Pull every contract award notice in a CPV division for a year with the award and lot blocks on, and total the awarded values by buyer, country and supplier size.

Search the full text.

keywords: "artificial intelligence" searches the whole notice body, not just the title, across every language.

Why choose this scraper

What you get
The whole archive7.0M notices back to 26 August 2016, not just what is currently open
245 TED fieldsEleven optional blocks, each charged only when you switch it on
English titles everywhereTED's own translations, so one keyword search reaches all 24 languages
Deduplicated, in orderSorted on a unique key, so parallel pages never repeat a row and a deep run never stops early
No 15,000-row ceilingPast TED's page window the Actor switches to token iteration and keeps going
Expert query passthroughAnything TED's own expert search accepts, including today(-7), IN (…) and NOT
No browser, no proxy, no keyThe API is open; a run is HTTP requests and nothing else

How it compares

FeatureParseForgeOther TED scrapers
Notice, buyer, CPV, deadline, value, winnerYesYes
Per-lot descriptions, values and award criteriaYesNot listed
Participation conditions, e-submission, EU funding flagsYesNot listed
Review and appeal body with the appeal deadlineYesNot listed
Bids received, split by SME and non-EEAYesNot listed
Title in all 24 EU languagesYesNot listed
Legacy TED codes for pre-2024 archive noticesYesNot listed
Only-still-open filterYesNot listed
Runs past 15,000 rowsYesNot listed
Pay only for the blocks you enableYesSingle flat price

Configure the run

Pick a window, add filters, set the maximum number of notices. Every extra block is off by default.

A first run with the defaults:

{
"publishedLastDays": 3,
"maxItems": 50
}

Daily tender alerts for one sector:

{
"publishedLastDays": 1,
"buyerCountries": ["DEU", "AUT", "CHE"],
"cpvCodes": ["45000000"],
"formTypes": ["competition"],
"maxItems": 500,
"includeLotDetails": true,
"includeDocuments": true
}

Live tenders you can still bid on, closing next month:

{
"onlyActive": true,
"cpvCodes": ["72000000"],
"deadlineBefore": "2026-10-31",
"maxItems": 1000,
"includeLotDetails": true
}

Every contract a competitor has won:

{
"winnerName": "Siemens",
"formTypes": ["result"],
"publishedAfter": "2024-01-01",
"maxItems": 2000,
"includeAwardDetails": true
}

An expert query, exactly as TED's own expert search takes it:

{
"expertQuery": "buyer-country IN (FRA ESP) AND classification-cpv=33000000 AND total-value>=1000000 AND publication-date>=today(-30)",
"maxItems": 500,
"includeAwardDetails": true
}

Limits

  • TED's API caps a page at 250 notices and at 10,000 field-values. The more blocks you switch on, the smaller the pages get: 250 notices per request with the base fields, 40 with all eleven blocks on. A 5,000-notice run takes 20 requests with the base row and 125 with everything.
  • Page numbers stop working at 15,000 rows. Past that the Actor switches to TED's iteration token, which is sequential rather than three pages at a time, so very large runs are slower per row. A verified 16,000-notice run took 64 requests and returned no duplicates.
  • Sorting is on the publication number, not the publication date. TED accepts SORT BY publication-date DESC, but the key is not unique: a paged sweep of one month came back 14% duplicated, and a token iteration with that sort silently stopped yielding at 4,750 rows while still reporting 59,945 matches. The publication number is unique and TED orders it by year and sequence, so it is both stable and genuinely newest-first.
  • The archive starts on 26 August 2016. Earlier dates return nothing rather than an error.
  • Notices before the 2024 eForms switchover carry the legacy two-letter codes, not the modern field names. Switch on Legacy TED codes when scraping the older archive, or those rows will look sparse.
  • Only titles are translated. Descriptions, lot texts and buyer names come in the buyer's own language; textLanguages records which.
  • A handful of fields repeat per lot. A three-lot notice lists its contract type three times; the Actor deduplicates every field before writing it, and keeps a real array only where the values genuinely differ.
  • A run stops when it reaches its cost ceiling. Apify caps what a single run may charge, and with every block enabled a notice costs about $0.016, so the default ceiling is reached after roughly a thousand of them. The Actor stops there and says so in the log rather than collecting a result set it cannot bill for; raise Max cost per run in the run options to go further.
  • The run needs 256 MB. The heaviest configuration measured — 5,000 notices with all eleven blocks — peaked at 129 MB, so there is no reason to pay for more.

Pricing

Pay-per-event. $4 per 1,000 notices (notice) plus $0.02 per run start. Extras are charged only when enabled, and only on the notices that carry them:

EventPriceWhen
notice$0.004Every row
lot-details$0.0015Lot details on
award-details$0.0015Award and winner details on
full-text$0.002Full notice text on
buyer-details$0.001Buyer details on
procurement-conditions$0.001Participation conditions on
tender-documents$0.001Tender documents on
title-translations$0.001All 24 title translations on
review-bodies$0.0008Review and appeal bodies on
related-organisations$0.0008Other organisations on
notice-history$0.0008Corrections and previous notices on
legacy-fields$0.0008Legacy TED codes on
RunApproximate cost
50 notices, base row$0.22
500 daily alerts with lots and documents$3.27
1,000 notices with lots and awards$7.02
5,000 award notices with the award block$27.52

New Apify accounts start with $5 in free credit.

Free users

Free-plan runs return up to 10 notices as a preview. Upgrade your Apify plan to pull the whole archive.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the TED Europa Tenders Scraper.
  3. Pick a window and your filters, then click Start.
  4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab, or schedule the run daily.

Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.

Use with AI agents (MCP)

Give an AI agent live access to EU procurement through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/ted-europa-tenders-scraper"

Then ask: "Which German IT tenders published this week are still open, and when is each deadline?"

FAQ

Is the data public? Yes. TED is the EU's official publication channel for public procurement; every notice is published for anyone to read. The Actor reads TED's own public search API.

How current is it? TED publishes on every working day, and notices appear in the API the same morning they hit the Official Journal. A run with publishedLastDays: 1 catches them.

Do I need an API key for TED? No. TED's search API is open and unauthenticated. The single-notice endpoints do need a key, which is why this Actor reads everything through the search API instead.

Why is winnerName empty on most rows? Only contract award notices name a winner. Filter with formTypes: ["result"] to get only those.

Why does a notice appear twice with different publication numbers? TED republishes a corrected notice under a new number. Switch on Latest version only to keep one row per notice.

Can I get more than 15,000 notices in one run? Yes. Set maxItems higher and the Actor switches to TED's iteration token automatically; it is slower per row but has no ceiling.