EU TED Tenders API: Public Procurement Notices (no key) avatar

EU TED Tenders API: Public Procurement Notices (no key)

Pricing

from $0.40 / 1,000 results

Go to Apify Store
EU TED Tenders API: Public Procurement Notices (no key)

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

Datawharf Tools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 hours ago

Last modified

Security

Limited permissions

Share

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

  1. Set any filters (all optional): keywords, buyer countries, CPV codes, notice types, buyer name, publication dates.
  2. Click Start, then open the Overview table or download the dataset.
  3. 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 os
from apify_client import ApifyClient
client = 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 (72 covers IT services); TED also treats a full 8-digit code such as 72000000 as its whole branch, and a notice matches if any of its lots has a matching CPV, so the cpvCodes list 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 maxResults is 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.

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.