EU TED Tenders API: Public Procurement Notices (no key)
Pricing
from $0.40 / 1,000 results
EU TED Tenders API: Public Procurement Notices (no key)
Search EU public tenders from TED (Tenders Electronic Daily) by keyword, country, CPV code, notice type, buyer and date. Flat rows with deadlines, values and links. No API key. Not affiliated with the EU. Source: TED, CC BY 4.0.
Pricing
from $0.40 / 1,000 results
Rating
0.0
(0)
Developer
Datawharf Tools
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 hours ago
Last modified
Categories
Security
Limited permissionsShare
EU TED Tenders: Search Public Procurement Notices by Keyword, Country, CPV
Search EU public tenders from TED (Tenders Electronic Daily) through the official, keyless TED Search API v3, and get flat rows you can export to JSON, CSV or Excel. It only calls the documented API (no scraping, no proxies, no login). No API key is needed, and the default input returns real notices on the first click.
Who is this for?
- Bid and tender teams who want a daily table of new EU contract notices matching their CPV codes, countries or keywords.
- Exporters and agencies tracking public procurement in specific member states, or award notices for a competitor's buyers.
- Analysts and developers who want TED behind a simple form, schedule and dataset instead of writing a client that handles paging, multilingual fields and retries.
- Teams that bid in both markets. It pairs with our SAM.gov Contract Opportunities Actor (US federal bids): same flat-row idea, EU data.
What you get
One row per notice: noticeId (TED publication number, e.g. 775146-2026), noticeUuid, title and titleLanguage (your preferred language, then English, then the first available), buyerName, buyerCountry (ISO alpha-3), cpvCodes, noticeType, procedureType, publicationDate, deadline (earliest lot deadline) and deadlines, estimatedValue with estimatedValueCurrency (when the notice states it; sum of lot values, per-lot detail in estimatedValuesByLot), placeOfPerformance (plus countries and cities), links (tedUrl, pdfUrl, xmlUrl, htmlUrl), the attribution line, and fetchedAt.
Fields TED does not publish for a notice (for example the deadline of an award notice, or a value that is not stated) come back empty rather than guessed. Every run also saves a RUN_REPORT (key-value store) with the query used, requests made, retries and total matching notices.
Quick test
The default input needs no changes and returns the 20 most recent notices:
{ "maxResults": 20 }
How to use it
- Set any filters (all optional): keywords, buyer countries, CPV codes, notice types, buyer name, publication dates.
- Click Start, then open the Overview table or download the dataset.
- Schedule it daily with Apify schedules to get new notices as they are published (results are newest first).
Example inputs
IT-services tenders from German and French buyers, last 30 days (default window):
{ "countries": ["DE", "FR"], "cpvCodes": ["72"], "noticeTypes": ["cn-standard"], "maxResults": 200 }
Contract awards mentioning a keyword, over one quarter, titles in German where available:
{ "keywords": ["cybersecurity"], "noticeTypes": ["can-standard"], "publicationFrom": "2026-07-01", "publicationTo": "2026-09-30", "titleLanguage": "de", "maxResults": 500 }
Everything a given buyer published recently:
{ "buyerName": "Bundesagentur", "maxResults": 100 }
Use it from code (JavaScript and Python)
JavaScript (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('datawharf-tools/eu-ted-tenders').call({ countries: ["DE"], cpvCodes: ["72"], noticeTypes: ["cn-standard"], maxResults: 50 });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.length, 'rows');
Python (pip install "apify-client>=3"):
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("datawharf-tools/eu-ted-tenders").call(run_input={"countries": ["DE"], "cpvCodes": ["72"], "noticeTypes": ["cn-standard"], "maxResults": 50})items = list(client.dataset(run.default_dataset_id).iterate_items())print(len(items), "rows")
More examples: https://github.com/datawharf-tools/examples
Pricing
Pay per result: $0.40 per 1,000 results ($0.0004 per notice), plus a small per-run start fee and standard Apify platform usage. Set the maximum charge per run to cap spend; the Actor charges before it saves each batch, so it never returns more rows than your cap allows.
Limits and behaviour
- Filters are combined with AND; several values inside one filter (keywords, countries, CPV codes, notice types) are combined with OR. CPV codes shorter than 8 digits match the whole branch (
72covers IT services); TED also treats a full 8-digit code such as72000000as its whole branch, and a notice matches if any of its lots has a matching CPV, so thecpvCodeslist of a row can include unrelated codes. - Keywords use TED's full-text search. Buyer name is a "contains" match.
- Results are newest publication first. Each request returns up to 250 notices; the Actor pages with TED's iteration token, so large result sets are not capped by the 15,000-result page window.
- Notice dates are the publication date. The default window is the last 30 days; the default
maxResultsis 20. - TED publishes titles in many languages; the title is in your preferred language when available. Titles of many notices are machine-prefixed with country and CPV label by TED.
- Failed requests (HTTP 429 and 5xx, timeouts) are retried with backoff. A rejected query (HTTP 400) stops the run with TED's message. Optional
maxApiCalls(default 100) bounds requests per run. - If a run stops part-way, the status message starts with "PARTIAL RESULT" and the rows already saved (and charged) are kept.
- TED asks reusers to stay under its fair-usage limits (the developers' corner states 700 requests per minute); this Actor makes far fewer.
FAQ
How do I get EU tenders for one country and CPV code every day? Set countries (for example ["DE"]), cpvCodes (for example ["72"] for IT services) and noticeTypes, save it as a Task and schedule it daily. Results are newest first.
Can I export TED tenders to Excel or Google Sheets? Yes, from the dataset (XLSX/CSV/JSON) or with the Google Sheets integration.
Do I need an API key? No. The TED Search API is open and keyless.
Is this scraping? No. It calls the official Search API only.
Is the full notice text included? No, the row has the key fields and links to the notice, PDF, HTML and XML on TED.
Which notice type codes exist? TED's standard codes, for example cn-standard (contract notice), can-standard (contract award notice), pin-only (prior information notice). See the TED documentation for the full list.
Source, license and non-affiliation
Source: TED – Tenders Electronic Daily, Publications Office of the EU, CC BY 4.0 (https://ted.europa.eu). Data comes from the TED Search API (documentation). Per the TED legal notice, TED content may be reused, including commercially, with appropriate credit; if you republish the data, keep the attribution line (each row carries it) and indicate any changes you make.
This Actor is not affiliated with, endorsed by, or sponsored by the European Union, the Publications Office of the European Union or TED. Those names are used only to describe the data source.
Related Actors
- SAM.gov Contract Opportunities for US federal bids.
- SEC EDGAR Filings & XBRL Data for company filings and financials.
Privacy policy
Publisher: datawharf-tools. Contact: datawharf@gmail.com. Last updated 2026-11-07.
- What we process. Your run inputs (filters) and the public tender notices the TED API returns, including the buyer names and organisation details TED publishes on them. They go straight into your own run's dataset. No API key or credentials are involved.
- What we keep. Nothing. We keep no copy of your inputs or the data returned, and the Actor has no analytics, tracking or third-party sharing. Requests go only to api.ted.europa.eu.
- Where your data lives. Your run datasets, key-value records and logs live in your own Apify account under Apify's retention rules and Apify's privacy policy. You control and can delete them at any time.
- Questions or deletion requests. Write to datawharf@gmail.com.