EU Public Tenders Search avatar

EU Public Tenders Search

Pricing

$3.00 / 1,000 tender notices

Go to Apify Store
EU Public Tenders Search

EU Public Tenders Search

Search EU public tender notices by keyword, buyer country, CPV code and publication date through the EU's public procurement-notice API. Clean, typed records with no contact persons and no award winners. No login, no scraping. Pay per record.

Pricing

$3.00 / 1,000 tender notices

Rating

0.0

(0)

Developer

The Sjöstrand Project

The Sjöstrand Project

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

What this Actor returns

Search the public procurement notices that buyers across the EU publish, by keyword, buyer country, CPV code and publication date, and get one clean, typed record per notice. Every record has the same 13 fields, and a value the notice does not have is null, never a missing key.

  • publication_number, notice_type, publication_date: which notice it is, what kind, and when it was published
  • deadline_date: the earliest deadline for tenders, when the notice has one
  • buyer_org, buyer_country, performance_nuts_code: who is buying, from which country, and where the work is done
  • cpv_codes, notice_title, estimated_value, currency, procedure_type: what is being bought, its title, its estimated value and the procedure
  • notice_url: the link to the full notice on the source's website

The Actor reads the EU's public procurement-notice search API and nothing else. It does not scrape any website, and there is no login.

Who it helps

  • Businesses that bid for public contracts, who want a daily or weekly list of new tenders in their sector and countries, ready for a spreadsheet or a CRM.
  • Analysts and developers who want tidy tender data for market research or their own alerts, through the Apify API, without writing their own client for the source.

Quick start

  1. Open the Input tab and leave the defaults as they are. They search the notices published on one past day, 1 October 2026, so a first run returns up to 10 records (the default Maximum records).
  2. Press Start. The default run costs about $0.03: 10 records at $0.003 each, plus Apify's tiny start event (see What it costs). To try it on even less, set Maximum records to 1.
  3. Open the Output tab, check the records, then set your own keywords, countries, CPV codes and dates.

Input

FieldWhat it doesDefault
KeywordsWords to look for anywhere in the notice, in any language. Letters, digits and spaces only.empty
Published fromOnly notices published on or after this date.2026-10-01
Published toOnly notices published on or before this date.2026-10-01
Buyer countriesThree-letter country codes like DEU, FRA or SWE, separated by commas.empty
CPV codes8-digit CPV codes like 45000000, separated by commas. A broad code includes the codes under it.empty
Active notices onlyOnly notices that are still active, such as tenders still open for bids.off
LanguageThree-letter code for the title and buyer name, like eng, deu or fra.eng
Maximum recordsHow many records to return at most, from 1 to 1000.10

Give at least one of a date, keywords, a country or a CPV code. Results come newest publication first.

Output

One record per notice. The record below is one the default input returned on 12 October 2026, unchanged except for the link.

{
"publication_number": "677854-2026",
"notice_type": "cn-standard",
"publication_date": "2026-10-01",
"deadline_date": "2026-11-02",
"buyer_org": "Landkreis Schaumburg - Vergabestelle",
"buyer_country": "DEU",
"performance_nuts_code": "DE928",
"cpv_codes": ["45431100", "45431200"],
"notice_title": "Germany – Floor-tiling work – Sanierung Grundschule Evesen - Fliesen- und Plattenarbeiten",
"estimated_value": null,
"currency": null,
"procedure_type": "open",
"notice_url": "(the notice's page on the source's website)"
}

In a real record, notice_url is the full link to the notice.

What it costs

You pay for one event, Tender notice, at $0.003 per record returned. Apify also adds its standard run-start event, $0.00005 per start for an Actor run with up to 1 GB of memory; it is the platform's own event, not ours. The default run of 10 records costs about $0.03. Records the Actor leaves out (see below) are never charged.

For example, a search that returns 200 notices costs $0.60. If your Apify plan includes monthly credit, a small run draws on that credit.

If the source cannot be reached or keeps answering with errors, the run stops with a clear status message, and only the records already returned are charged.

Limits and honest notes

  • No contact persons, emails or phone numbers, and no award winners. The Actor never asks the source for those fields, and it leaves out any notice whose title or other output text happens to contain an email address or a phone number.
  • Titles are written by the source. A notice title is free text from the buyer's notice, as published.
  • One estimate per notice. estimated_value is the value of the whole procurement. When a notice gives only separate values per lot, it is null.
  • Up to 1000 records per run. For more, split the search by date range or country.
  • Pace. The source's fair-use limit is 700 requests per minute. The Actor sends at most one request per second and waits as long as the source asks when it is busy.
  • Freshness follows the source, which publishes new notices on working days. The Actor reads each notice as the source gives it at the time of your run.

Questions

Why did my run return fewer records than I asked for? Either fewer notices matched, or some were left out because they had no notice page or lacked a title, a buyer name or a publication date, or held contact details in their text. You were not charged for those.

What does the run say when something is wrong? It says what it found and what to try. "Give at least one of: a publication date, keywords, a buyer country or a CPV code" means the input was empty: add one. A message about country codes, CPV codes or dates names the field to fix and shows the right shape. "Could not be reached" or "kept answering" means the source is busy; wait a few minutes and run again.

How do I find only tenders I can still bid for? Turn on "Active notices only", and look at deadline_date.

Which country codes and CPV codes do I use? Countries are three-letter codes such as DEU for Germany or ESP for Spain. CPV codes are the EU's 8-digit codes for what is bought; a broad code such as 45000000 (construction work) includes the codes under it.

Can I run it on a schedule? Yes, with the Apify scheduler or the API. Set the dates to the period you want; each run is independent and charged per record returned.

Data source and AI note

Data source: the Search API of TED (Tenders Electronic Daily), the online version of the Supplement to the Official Journal of the European Union, published by the Publications Office of the European Union; the notices are reused under their licence, the Commission's reuse policy (Commission Decision 2011/833/EU), which allows commercial reuse. publication_date is the date the notice was published on TED, taken from the API's publication-date field; it is not a last-updated date, and the records have no source_updated_at field.

This tool is not affiliated with, endorsed by or sponsored by the Publications Office of the European Union or the European Commission.

This tool was built with the help of AI coding assistants.

Help

Questions, a record that looks wrong, or an idea for a field: please open an issue on the Issues tab. Thank you for the report; every one is read.