EU TED Tenders Scraper avatar

EU TED Tenders Scraper

Pricing

Pay per event

Go to Apify Store
EU TED Tenders Scraper

EU TED Tenders Scraper

Export EU TED (Tenders Electronic Daily) public procurement notices as flat, buyer-ready rows: buyer, title, CPV code, estimated value, deadline, and winner info. Keyless EU API — filter by CPV code, buyer country, notice type, and publication date.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Categories

Share


🎯 What this scrapes

TED (Tenders Electronic Daily) is the EU-wide official journal for public procurement — every EU/EEA member state's contracting authorities publish notices there, from a Polish ministry's IT framework agreement to a German city's construction tender. TED's own v3 search API is keyless and public, but it returns deeply nested eForms-taxonomy JSON with 24-language multilingual fields ({"eng": [...], "pol": [...]}) that are painful to parse by hand. This Actor queries TED's public search API and flattens every notice into one buyer-ready row — buyer, title, CPV classification, estimated value, deadline, and award/winner info once a contract has been won. No API key, no login, no eForms-schema puzzle.

🔥 What we handle for you

  • 🔁 Retries with exponential backoff on 408/429/503/network errors — up to 5 attempts, Retry-After honoured.
  • 🧱 Per-notice fault isolation — one malformed notice is skipped and logged, never crashes the whole run.
  • 🌐 Multilingual-first field extraction — English preferred, falling back through 24 EU languages so a title/buyer name is never silently dropped.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, never the raw eForms JSON blob.
  • 💰 Pay-Per-Event pricing — you only pay for rows that land in your dataset. No data, no charge.

💡 Use cases

  • Bid-team pipeline — pull new EU-wide tenders matching a CPV code or country every day.
  • Market intelligence — track which EU public bodies are buying what, and at what value, across all 27+ member states.
  • Award tracking — monitor closed notices for winner names and countries on contracts you bid on.
  • Lead generation — build a cross-border prospect list of buyers issuing contracts in your sector.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
querystringno'—'Raw TED expert-query string (e.g. classification-cpv=72000000 AND buyer-country=POL). When set, used…
cpvCodesarrayno['72000000']CPV classification codes, OR-combined (e.g. 72000000 for IT services). Default is a confirmed-live,…
buyerCountriesarrayno[]Buyer country codes, OR-combined (ISO3, e.g. POL, DEU). Leave empty to match all EU/EEA…
noticeTypesarrayno[]Notice types, OR-combined (e.g. cn-standard, can-standard). Leave empty to match all notice…
publishedFromstringno'—'Only include notices published on or after this date, e.g. 2026-01-01.
publishedTostringno'—'Only include notices published on or before this date, e.g. 2026-08-01. Must be on/after…
maxResultsintegerno20Hard cap on the number of notice rows returned by this run.
useProxybooleannoFalseRoute requests through Apify Proxy. TED is EU public infrastructure with no observed anti-bot, so this defaults off —…

Example input

{
"cpvCodes": [
"72000000"
],
"maxResults": 5,
"useProxy": true
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
publication_numberstringTED publication number, e.g. 13-2026. Always present.
notice_id['string', 'null']Stable per-notice UUID.
titlestringNotice title, multilingual-first (English preferred).
notice_urlstringPublic TED notice URL, built from the publication number.
notice_type['string', 'null']TED notice type enum, e.g. cn-standard (contract notice), can-standard (contract award notice).
form_type['string', 'null']TED form type enum, e.g. competition, result.
procedure_type['string', 'null']Procurement procedure type, e.g. open, neg-w-call, oth-single.
buyer_name['string', 'null']Contracting authority / buyer name, multilingual-first.
buyer_country['string', 'null']Buyer country, ISO3 code (e.g. POL).
buyer_city['string', 'null']Buyer city, multilingual-first.
place_of_performance_country['string', 'null']Place-of-performance country, ISO3 code.
cpv_codesarrayDeduplicated CPV classification codes; empty list when none present.
description['string', 'null']Lot description, multilingual-first.
estimated_value_amount['number', 'null']Estimated value of the first lot, parsed as a float.
estimated_value_currency['string', 'null']Currency of estimated_value_amount.
deadline_date['string', 'null']Submission deadline of the first lot; null on award notices (no open deadline).
publication_date['string', 'null']Notice publication date, as returned by TED.
winner_name['string', 'null']Winning supplier name, multilingual-first; populated on award notices only.
winner_country['string', 'null']Winner country, ISO3 code; populated on award notices only.
scraped_atstringISO 8601 UTC timestamp when this row was scraped.

Example output

{}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.2One-off warm-up charge per run
result-row$0.004Per unique dataset item

Example: 1 000 results at the rates above ≈ $4.20. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

  • TED (EU-wide) only — national procurement portals are out of scope (see our UK Contracts Finder Actor for UK-specific coverage).
  • No eForms XML/PDF document downloads, only the structured notice metadata.
  • Real-time per-query only — no historical bulk export and no cross-run deduplication.

❓ FAQ

Do I need a TED account or API key?

No. TED's v3 search API is public and keyless — this Actor calls it directly.

Why does the default CPV code return so many results?

72000000 (IT services) alone matches 396k+ live notices — confirmed on TED. maxResults defaults to 20 to keep a first run fast and cheap; raise it once you've confirmed the filter shape you want.

What if a notice's title isn't in English?

TED's multilingual fields aren't guaranteed to carry an "eng" key. This Actor falls back to the generic "mul" key, then the first available language, so title/buyer_name/description/winner_name are never silently dropped.

Can I write my own TED expert query?

Yes — set query to any raw TED expert-query string (e.g. classification-cpv=72000000 AND buyer-country=POL) and it's sent verbatim, overriding every structured filter.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.