EU Tenders (TED) Search & Monitor – open data avatar

EU Tenders (TED) Search & Monitor – open data

Pricing

from $4.00 / 1,000 record extracteds

Go to Apify Store
EU Tenders (TED) Search & Monitor – open data

EU Tenders (TED) Search & Monitor – open data

EU public procurement notices from TED (Tenders Electronic Daily) via the official TED Search API: contract notices, awards and prior information with buyer, country, CPV, deadline, value and notice links. Open data (Commission Decision 2011/833/EU); no personal data.

Pricing

from $4.00 / 1,000 record extracteds

Rating

0.0

(0)

Developer

Signalrows Studio

Signalrows Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Get EU public procurement notices from TED (Tenders Electronic Daily), the official EU procurement journal, as clean structured data: contract notices (calls for competition), contract award notices and prior information notices with buyer, country, CPV codes, submission deadline, estimated / awarded value and direct links to the notice page, PDF and eForms XML. Filter by free text or a full TED expert query, by country and by CPV. Uses only the official TED Search API — no scraping, no login, no API key. Open data licensed for commercial reuse (Commission Decision 2011/833/EU); no personal data. Runs in one click with sensible defaults (contract notices of the last 7 days), and monitor mode returns only what changed since the last run.

What you get

One record per TED notice, in the same TenderRecord schema as the other tender actors of this studio, plus TED-specific fields.

FieldTypeExample
sourcestring"ted"
sourceId, tenderNumberstring"660259-2026" (OJ S publication number)
urlurlhttps://ted.europa.eu/en/notice/-/detail/660259-2026
titlestringprocedure title in the original language: "Turnkey contract double hall Vennesla"
titleEnstringTED's English title: "Norway – Construction work for sports facilities – Turnkey contract …"
buyerobject{ "name": "Vennesla kommune", "unit": null, "type": "authority" } (from eForms buyer-legal-type)
buyerName, countryCodestringflat copies for tables; country as ISO 3166-1 alpha-3 ("NOR")
tenderTypeenumpublic (contract notices & awards) · rfi (prior information) · other
noticeTypeKeyenumcontract-notice · contract-award · prior-information (input key)
noticeType, formTypestringeForms values: cn-standard / competition, can-standard / result, pin-only / planning
procedureType, contractNaturestringopen, restricted, … · works / supplies / services
statusenumopen · closed (deadline passed) · awarded (award notices) · unknown (no deadline)
publishedAtISO date"2026-09-24"
deadlineAtISO datetime/nulllatest lot deadline, offset-aware: "2026-10-23T10:00:00Z"
lotDeadlinesstring[]every lot deadline, ascending
categories, cpvstring[]unique CPV codes, main first: ["45212200", "45000000", …]
cpvLabelsstring[]CPV division labels: ["Construction work"]
locationobject{ "city": "Vennesla", "region": "NOR" }
placeOfPerformancestring[]NUTS / country codes: ["NO092", "NOR"]
estimatedValueobject/null{ "amount": 155000000, "currency": "NOK" }
awardValue, winnersobject/null, arrayaward notices: { "amount": 4314672, "currency": "PLN" }, [{ "name": "VEOLIA … Sp. z o.o.", "country": "POL", "winnerType": "organisation" }]; winners that look like natural persons are masked by default (name: null, winnerType: "masked-individual")
documentsarraynotice page (EN + original language), PDF, original PDF, eForms XML
buyerLegalType, mainActivity, buyerProfileUrlstringeForms codes (body-pl-la, pub-os) and buyer profile URL
languagestringoriginal language (ISO 639-2: eng, pol, fra, …)
descriptionstring/null≤300-char excerpt of the procedure description (original language), redacted
noticeId, procedureIdstringeForms UUIDs
contactnullcontact persons are never requested from TED
attributionstringlicence attribution (see "Data source & licence")
changeTypeenumnew · updated · deadline-changed · closed · awarded · unchanged (monitor mode)
source_url, fetched_at, actor_versionprovenancehttps://ted.europa.eu/…, 2026-09-24T17:24:43.901Z, 0.1
{
"source": "ted",
"sourceId": "660259-2026",
"url": "https://ted.europa.eu/en/notice/-/detail/660259-2026",
"title": "Turnkey contract double hall Vennesla",
"titleEn": "Norway – Construction work for sports facilities – Turnkey contract double hall Vennesla",
"buyer": { "name": "Vennesla kommune", "unit": null, "type": "authority" },
"buyerName": "Vennesla kommune",
"countryCode": "NOR",
"tenderType": "public",
"noticeTypeKey": "contract-notice",
"noticeType": "cn-standard",
"formType": "competition",
"procedureType": "open",
"contractNature": "works",
"tenderNumber": "660259-2026",
"status": "open",
"publishedAt": "2026-09-24",
"updatedAt": null,
"deadlineAt": "2026-10-23T10:00:00Z",
"lotDeadlines": ["2026-10-23T10:00:00Z"],
"categories": ["45212200", "45000000", "45111000", "45210000"],
"cpv": ["45212200", "45000000", "45111000", "45210000"],
"cpvLabels": ["Construction work"],
"location": { "city": "Vennesla", "region": "NOR" },
"placeOfPerformance": ["NO092", "NOR"],
"estimatedValueILS": null,
"estimatedValue": { "amount": 155000000, "currency": "NOK" },
"awardValue": null,
"winners": [],
"documents": [
{ "title": "Notice page (EN)", "url": "https://ted.europa.eu/en/notice/-/detail/660259-2026" },
{ "title": "Notice PDF (EN)", "url": "https://ted.europa.eu/en/notice/660259-2026/pdf" },
{ "title": "Original PDF (ENG)", "url": "https://ted.europa.eu/en/notice/660259-2026/pdfs" },
{ "title": "Notice XML (eForms)", "url": "https://ted.europa.eu/en/notice/660259-2026/xml" }
],
"buyerLegalType": "body-pl-la",
"mainActivity": "pub-os",
"buyerProfileUrl": "https://eu.eu-supply.com/ctm/company/companyinformation/index/311790",
"language": "eng",
"description": "Vennesla municipality shall establish a new double hall in Skolevegen. The project comprises two separate individual halls (double hall) and shall include …",
"noticeId": "f6525edb-d034-4715-bab4-a6b6c044be61",
"procedureId": "d56fc555-1c95-4677-b84b-a696d102b1b6",
"contact": null,
"attribution": "Source: Tenders Electronic Daily (TED), Publications Office of the European Union (https://ted.europa.eu). Reused under Commission Decision 2011/833/EU. Unofficial extract; the linked notice is the authoritative text.",
"changeType": "new",
"source_url": "https://ted.europa.eu/en/notice/-/detail/660259-2026",
"fetched_at": "2026-09-24T17:24:43.901Z",
"actor_version": "0.1"
}

You can download the dataset in JSON, CSV, Excel, XML or HTML from the run's Output tab or via the API.

Who uses it

  • Bid and sales teams of suppliers, contractors and consultancies: a daily feed of new EU tenders in their CPV sectors and target countries, with deadlines, straight into a CRM, Slack or a spreadsheet.
  • Procurement consultants and bid writers who track calls for competition across several member states and need one normalized schema instead of 24 language versions.
  • Market intelligence and analysts: award notices with winners and awarded values by country, sector (CPV) and buyer type, for competitor tracking, pricing benchmarks and pipeline forecasts (prior information notices).
  • AI agents (via the Apify MCP server) and workflow tools (Make, Zapier, n8n): "find open IT tenders in Germany above EUR 1 million", mode=monitor on a schedule for a clean change feed.

Pricing

Pay per result: $0.004 per notice (event record-extracted). run-started is free. No charge for runs with no matching notices. Set maxItems to cap your spend. In monitor mode you pay only for changed records.

Input

ParameterDefaultNotes
query""Plain words = full-text search; anything with operators (=, ~, IN, AND, SORT BY) is passed through as a TED expert query
countries[]Buyer countries, ISO alpha-2 (DE) or alpha-3 (DEU)
cpv[]CPV codes: 8 digits exact, 2–7 digits = prefix (72 = all IT services)
noticeTypes["contract-notice"]Any of contract-notice, contract-award, prior-information
publishedFrom7 days agoYYYY-MM-DD, publication date on TED
openOnlytrueDrop notices whose deadline has passed; notices without a deadline (awards, planning) are kept
modesearchmonitor = only changes vs. the previous run's STATE
maxItems100Max 2000
maskContactstrueRedact e-mails/phones/IDs in free text and drop the raw payload (contact persons are never requested)
maskWinnerIndividualstrueAward notices: keep a winner name only if it looks like an organisation (legal-form marker such as GmbH, Ltd, S.A., Sp. z o.o., s.r.o., or an acronym); otherwise name: null, winnerType: "masked-individual". Off = names kept, winnerType: "individual"
proxynoneThe TED API needs no proxy
maxPages40Advanced: cap on API pages (250 notices each, 1 request/second)
stateStore–Advanced: named key-value store for monitor STATE (persists across runs)

Expert query examples (query)

TED's expert search language, tested at https://ted.europa.eu/en/search/expert-search, is passed straight to the API; the actor appends the notice-type, country, CPV and date filters and SORT BY publication-date DESC unless you supply your own SORT BY.

Goalquery
IT tenders in Germany or Austriaclassification-cpv IN (72*) AND buyer-country IN (DEU AUT)
Title contains "solar"notice-title~("solar")
Restricted procedures onlyprocedure-type=restricted
Deadline still at least a week awaydeadline-receipt-tender-date-lot>=20261001
Works above EUR 5 million (estimated)contract-nature=works AND estimated-value-proc>=5000000 AND estimated-value-cur-proc=EUR

Monitor mode

mode=monitor scrolls through every notice matching the query (TED "iteration" mode, a consistent snapshot), compares each with the STATE saved by the previous run (fingerprint of title, status, deadline, documents) and pushes only records whose changeType is new, updated, deadline-changed, closed or awarded. openOnly narrows new/updated records to ones whose deadline has not passed; closures are always reported. Schedule it daily; the key-value store key RUN_SUMMARY holds the counts. On the Apify platform the run's default key-value store is per run, so set stateStore (e.g. tenders-eu-ted-state) or run from a saved task to keep state between runs.

Use from code, Make/Zapier/n8n, or AI agents (MCP)

curl -X POST "https://api.apify.com/v2/acts/signalrows~tenders-eu-ted/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"countries": ["DE", "AT"], "cpv": ["72"], "noticeTypes": ["contract-notice"], "maxItems": 50}'

This actor is also exposed as a tool on the Apify MCP server, so AI agents can call it directly (e.g. "list open EU tenders for cloud services in the Netherlands published this week").

Limits and fair use

  • Source: the official TED Search API v3 (POST https://api.ted.europa.eu/v3/notices/search), 250 notices per request, 1 request/second, one request at a time, identifying User-Agent and From: headers, Retry-After honoured. No website pages are fetched.
  • Search mode uses TED page-number pagination (server limit 15,000 notices per query); monitor mode uses iteration mode (no limit) up to maxPages.
  • deadlineAt is the latest lot deadline (a multi-lot notice stays open while any lot is open); lotDeadlines lists all of them. Always check the notice before submitting.
  • Titles are shown in the original language (title) and in TED's machine-translated English (titleEn); descriptions are excerpts. Attached procurement documents live on the buyer's platform (buyerProfileUrl) and are not downloaded.
  • Values are as published (estimatedValue, awardValue), not converted; estimatedValueILS is always null.
  • No personal data: contact-person fields are never requested; free text is redacted by default. In award notices, winner names are kept only when they look like organisations (winnerType: "organisation"); names that may belong to a natural person (sole traders) are replaced by null with winnerType: "masked-individual" unless you set maskWinnerIndividuals: false for a declared, lawful purpose. The heuristic errs on the side of masking, so some organisations without a legal-form marker may be masked too.
  • This is an unofficial extract provided "as is"; the Publications Office and the studio accept no liability for consequences of reuse. The TED and SIMAP logos are not used and may not be used without the Publications Office's consent.
  • Source structure changes are monitored daily and fixed automatically; if a run fails, please open an issue.

Data source & licence

Data: Tenders Electronic Daily (TED), Publications Office of the European Union — https://ted.europa.eu. Procurement notices published in the Supplement to the Official Journal of the EU "can be freely reused, for commercial or non-commercial purposes" under the Commission's reuse policy (Commission Decision 2011/833/EU), provided the source is acknowledged and the original meaning is not distorted. Every record carries this attribution in its attribution field; please keep it when you republish the data:

Source: Tenders Electronic Daily (TED), Publications Office of the European Union (https://ted.europa.eu). Reused under Commission Decision 2011/833/EU.

Data removal / contact

If you represent the source or a buyer and want content excluded, contact signalrows.data@gmail.com. Requests are handled within 24 hours.

Development

  • Shared schema/normalizer/masking/diff code lives in ventures-src/apify/shared/tenders and is vendored into src/shared/tenders; run scripts\sync-shared.cmd (or npm run sync-shared) after changing the shared module — never edit the vendored copy.
  • npm test runs offline tests on redacted fixtures (test/fixtures, captured from the live API) including a local HTTP emulation of the search endpoint. LIVE=1 npm run test:live performs a 1-request smoke test against the real API.
  • apify run (input in storage/key_value_stores/default/INPUT.json) writes records to storage/datasets/default and RUN_SUMMARY to the default key-value store.