TED EU Tenders Scraper (Tenders Electronic Daily) avatar

TED EU Tenders Scraper (Tenders Electronic Daily)

Pricing

$3.00 / 1,000 notice returneds

Go to Apify Store
TED EU Tenders Scraper (Tenders Electronic Daily)

TED EU Tenders Scraper (Tenders Electronic Daily)

EU public procurement notices from the official TED (Tenders Electronic Daily) API: every buyer name and email, CPV, deadline, value, link.

Pricing

$3.00 / 1,000 notice returneds

Rating

0.0

(0)

Developer

Jason

Jason

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Pulls EU public procurement notices from TED (Tenders Electronic Daily), the official EU procurement journal (Supplement to the Official Journal of the EU), through the Publications Office's public TED Search API v3. No API key, no browser automation, no login. You get one flat JSON record per notice with the buyer, country, CPV codes, deadline, estimated value, contact email and a link to the notice on ted.europa.eu, filtered by date window, notice type, buyer country, CPV, keyword and minimum value. TED publishes roughly 3,000 to 3,600 new notices per working day, about 1,500 to 2,000 of them contract notices (measured against the live API for the working days of 28 August to 7 September 2026), so a daily run with the defaults is a complete feed of new EU tenders.

What you get

Every record contains:

  • id - TED publication number (for example 612553-2026), source (ted), url - the English notice page on ted.europa.eu, pdfUrl, xmlUrl
  • publicationDate, dispatchDate, ojsIssue (OJ S issue, for example 171/2026), noticeVersion, noticeIdentifier, procedureIdentifier
  • title in the notice's original language with titleLanguage (ISO 639-3, for example fra), plus noticeTitleEn - TED's English heading (Country – CPV label – title)
  • noticeType (eForms code such as cn-standard, can-standard, pin-only), formType (competition, result, planning, ...), contractNature (works, supplies, services), procedureType (open, restricted, neg-w-call, ...), legalBasis (CELEX number of the directive)
  • buyerName, buyerCountry (ISO alpha-3), buyerCity, buyerEmail, buyerWebsite - all five describe the same organisation, the lead buyer (the first buyer listed on the notice)
  • buyerCount and the full arrays buyerNames, buyerCountries, buyerEmails, buyerWebsites - joint procurements list every participating authority (see "Joint procurement" below)
  • mainCpv, cpvCodes (array, de-duplicated across lots), placeOfPerformanceCountry, placeOfPerformanceCountries
  • deadline - earliest tender-receipt deadline across lots, ISO 8601 with the buyer's UTC offset
  • estimatedValue (procedure total, or the sum of lot values when no total is given), estimatedValueCurrency
  • description (procedure description, first 1,000 characters), descriptionLanguage, lotCount
  • fetchedAt - ISO timestamp of the run

Multilingual fields prefer English when the buyer supplied it; otherwise the original language is used and its code is kept. HTML entities that TED leaves in notice text (&, ', –, and the occasional double-escaped ") are decoded, and buyer websites published without a scheme (www.example.pl) are prefixed with https:// so every URL is clickable.

Joint procurement (multiple buyers on one notice)

About 3% of notices are joint procurements run by one authority on behalf of others: EU institutions buying together, or a national central purchasing body buying for its hospitals, schools and municipalities. TED returns the buyer details for those as parallel lists, and this Actor keeps them intact:

  • buyerName / buyerCountry / buyerCity / buyerEmail / buyerWebsite are the lead buyer - the first organisation on the notice, and always one and the same organisation across all five fields.
  • buyerCount is how many buying organisations the notice lists (1 for an ordinary notice; 39 for notice 612350-2026, an EU joint call for financial IT systems; 541 for 615921-2026, a Croatian central purchasing body).
  • buyerNames, buyerCountries, buyerEmails, buyerWebsites are de-duplicated lists covering every buyer, so no contact is lost. For 612350-2026 that is 39 institution names across 19 countries.

Because a joint notice has several buyer countries, the countries filter matches a notice when any of its buyers is in one of your countries. The record's buyerCountry is the lead buyer's, which for such a notice can be a country you did not ask for - check buyerCountries to see the buyer that matched. In a live run filtered to ["DEU","NLD"], all 400 records had DEU or NLD in buyerCountries, and exactly one (the EU joint call above) had a lead buyerCountry of BEL.

Input

FieldTypeDefaultDescription
daysBackinteger2Look-back window in days on the publication date, ending today. Ignored when dateFrom/dateTo are set.
dateFromstring-Earliest publication date, YYYY-MM-DD, inclusive.
dateTostringtodayLatest publication date, YYYY-MM-DD, inclusive.
noticeTypesstring[]["cn-standard","cn-social"]eForms notice-type codes. Contract notices: cn-standard, cn-social, cn-desg. Prior information: pin-only, pin-buyer, pin-rtl, pin-cfc-standard, pin-cfc-social. Awards and changes: can-standard, can-social, can-desg, can-modif, can-tran, veat. Also qu-sy, subco, corr, brin-eeig, brin-ecs. Empty list = all types.
countriesstring[]allBuyer country, ISO 3166-1 alpha-3 (DEU, FRA, NLD, POL, ESP, ITA, IRL, ...).
cpvPrefixesstring[]allCPV codes or prefixes, 2 to 8 digits. 72 matches every IT-services code; 45 construction; 33 medical; 48 software; 79 business services.
keywordsstring[]noneFull-text terms, any match. Sent to TED as a full-text query (FT~"term"), which searches the whole notice text in every language.
strictKeywordMatchbooleanfalseAlso require the keyword in the title, lot titles, description or buyer name. Much narrower than TED's own search - see "Limits and freshness".
minValueinteger0Keep only notices whose estimated procedure or lot value is at least this amount (notice currency, usually EUR).
onlyLatestVersionsbooleantrueSkip superseded versions of corrected notices.
maxItemsinteger500Stop after this many notices. Newest publication numbers come first.

Example - German and Dutch IT tenders worth at least EUR 1 million from the last week:

{
"daysBack": 7,
"countries": ["DEU", "NLD"],
"cpvPrefixes": ["72", "48"],
"minValue": 1000000,
"maxItems": 1000
}

Invalid codes fail fast with a clear error before any request is made, and the API's own validation errors (unknown country, notice type or CPV) are surfaced verbatim.

Output example

A real record from a live run on 2026-09-07 (OJ S issue 172/2026), unchanged:

{
"id": "616186-2026",
"source": "ted",
"url": "https://ted.europa.eu/en/notice/-/detail/616186-2026",
"publicationDate": "2026-09-07",
"dispatchDate": "2026-09-03",
"ojsIssue": "172/2026",
"noticeVersion": 1,
"noticeIdentifier": "6f882a8a-4cea-413a-b63b-a20714de0345",
"procedureIdentifier": "8761c053-e873-4203-b04f-56b396082f73",
"title": "TEN2600157 - CfT for Construction of new Community Facility for use as a Men's and Women's Shed at Beckscourt View, Drumbannan, Bailieborough, Co. Cavan, A82 D928 for Cavan County Council.",
"titleLanguage": "eng",
"noticeTitleEn": "Ireland – Construction work for social services buildings – TEN2600157 - CfT for Construction of new Community Facility for use as a Men's and Women's Shed at Beckscourt View, Drumbannan, Bailieborough, Co. Cavan, A82 D928 for Cavan County Council.",
"noticeType": "cn-standard",
"formType": "competition",
"contractNature": "works",
"procedureType": "open",
"legalBasis": "32014L0024",
"buyerName": "Cavan County Council",
"buyerCountry": "IRL",
"buyerCity": "Cavan",
"buyerEmail": "kevingsmith@cavancoco.ie",
"buyerWebsite": "https://www.cavancoco.ie",
"buyerCount": 1,
"buyerNames": [
"Cavan County Council"
],
"buyerCountries": [
"IRL"
],
"buyerEmails": [
"kevingsmith@cavancoco.ie"
],
"buyerWebsites": [
"https://www.cavancoco.ie"
],
"mainCpv": "45215200",
"cpvCodes": [
"45215200",
"45210000",
"45262800"
],
"placeOfPerformanceCountry": "IRL",
"placeOfPerformanceCountries": [
"IRL"
],
"deadline": "2026-09-24T12:00:00+01:00",
"estimatedValue": 100000,
"estimatedValueCurrency": "EUR",
"description": "TEN2600157 - CfT for Construction of new Community Facility for use as a Men's Shed and Women's Shed, together with Alterations to Existing Building for Disabled WC Accommodation at Beckscourt View, Drumbannan, Bailieborough, Co. Cavan, A82 D928 for Cavan County Council. Please refer to Tender Documents for further details.",
"descriptionLanguage": "eng",
"lotCount": 1,
"pdfUrl": "https://ted.europa.eu/en/notice/616186-2026/pdf",
"xmlUrl": "https://ted.europa.eu/en/notice/616186-2026/xml",
"fetchedAt": "2026-09-07T06:11:18.378Z"
}

estimatedValue is null when the buyer did not publish a value (common in France and Germany) and 0 when the buyer explicitly entered zero.

The joint-procurement notice described above looks like this (buyer block only, trimmed):

{
"id": "612350-2026",
"title": "Development, Implementation, Maintenance and Operation of financial IT Systems",
"buyerName": "European Commission, DG BUDG - Budget",
"buyerCountry": "BEL",
"buyerCity": "Brussels",
"buyerEmail": "BUDG-PROCUREMENT-CELL@ec.europa.eu",
"buyerWebsite": "https://ec.europa.eu/info/departments/budget_en",
"buyerCount": 39,
"buyerNames": ["European Commission, DG BUDG - Budget", "EP - European Parliament", "European External Action Service (EEAS)", "..."],
"buyerCountries": ["BEL", "LVA", "DEU", "FRA", "ROU", "DNK", "ESP", "ITA", "IRL", "LUX", "SVK", "HUN", "MLT", "NLD", "GRC", "AUT", "SVN", "EST", "PRT"]
}

The run also writes a SUMMARY record to the key-value store with the number of notices scanned, pushed and filtered, whether the strict keyword check was on, how many notices had more than one buyer, the total TED reported for the query (0 rather than null when the query genuinely matches nothing), the resolved date window and the exact expert-search query used.

Pricing

Pay per result: US$0.003 per notice delivered (US$3 per 1,000 notices). You are charged only for records pushed to the dataset; empty runs cost nothing. Runs on the Apify free plan are limited by the platform's free-tier usage allowance.

Data source and licence

  • Source: TED Search API v3, POST https://api.ted.europa.eu/v3/notices/search, operated by the Publications Office of the European Union. Public, anonymous, documented at https://api.ted.europa.eu/swagger-ui/index.html (spec https://api.ted.europa.eu/api-v3.yaml) and https://docs.ted.europa.eu/api/latest/index.html.
  • Licence: the TED legal notice (https://ted.europa.eu/en/legal-notice, "Copyright notice", © European Union, 1998-2026) states that the Commission's reuse policy is implemented by Commission Decision 2011/833/EU of 12 December 2011 on the reuse of Commission documents (http://data.europa.eu/eli/dec/2011/833/oj) and that, unless otherwise noted, the procurement notices published in the Supplement to the Official Journal "can be freely reused, for commercial or non-commercial purposes". The same notice places SIMAP/TED system metadata in the public domain (CC0 1.0) and licenses the websites' editorial content under CC BY 4.0. The data.europa.eu catalogue entry for TED (https://data.europa.eu/data/datasets/ted-1) records the licence as "European Commission reuse notice" (COM_REUSE). Attribute the source as "© European Union, TED (Tenders Electronic Daily), https://ted.europa.eu" and indicate any changes you make. TED logos may not be reused. Buyer contact details are published by the buyers themselves in the notice; use them in line with GDPR and your local marketing rules.

Limits and freshness

  • TED releases one OJ S issue per working day (Monday to Friday, except Publications Office holidays), early in the morning Central European time. Notices published in an issue carry that issue's date; the API serves them as soon as the issue is out. Run daily after 09:00 CET with daysBack: 2 for a gap-free feed.
  • The Actor pages with the API's ITERATION mode (250 notices per page), so there is no cap on the number of notices per query beyond your maxItems. Results are sorted by publication number descending (newest first).
  • Date filters use TED's publication date in Central European time. When dateTo is not set, the upper bound is extended by one day so the latest issue is never missed because of the UTC offset.
  • keywords uses TED's full-text index, which covers all languages and the whole notice text, and by default that server-side result is what you get. strictKeywordMatch: true re-checks each notice against the fields this Actor returns (title, lot titles, descriptions, buyer name) and is far narrower: in a live run for "cloud" over 7 days, TED matched 180 notices and the strict check kept 55, dropping 69%; for "kubernetes" it dropped 40% and for "cybersecurity" 8%. Use it only when you want tightly on-topic results and accept losing notices whose keyword sits in a part of the notice that is not returned here. The filteredOutLocally count and the strictKeywordMatch flag are reported in the run summary.
  • Long runs page with an iteration token. If TED expires or rejects that token part-way through (EXPIRED_ITERATION_TOKEN / INVALID_ITERATION_TOKEN), the Actor restarts paging from a fresh token at the last publication number it delivered instead of failing the run; up to 5 such restarts are made and the result is identical to an uninterrupted run.
  • estimatedValue follows what the buyer declared: procedure total first, otherwise the sum of lot values. Currencies are not converted.
  • The TED API publishes no formal rate limit; the Actor keeps a short pause between pages and retries on 429/5xx with back-off.
  • Only the search-index fields are returned. Full lot-level detail (award criteria, tenderers, documents) is in the XML linked in xmlUrl.

Use cases

  • Daily lead feed of new EU tenders in your CPV codes and countries, with buyer emails for bid/no-bid outreach - including every participating authority on joint procurements, not just the lead buyer.
  • Market intelligence: track award notices (can-standard) to see which buyers award what, at what value.
  • Compliance and research: archive all notices for a country or sector, or rebuild a history with dateFrom/dateTo.

Support

Open an issue on the Actor's Issues tab on Apify Store. Replies within 14 days.