EU TED Tenders Scraper: Public Procurement Notices avatar

EU TED Tenders Scraper: Public Procurement Notices

Pricing

from $1.50 / 1,000 results

Go to Apify Store
EU TED Tenders Scraper: Public Procurement Notices

EU TED Tenders Scraper: Public Procurement Notices

[$1.50-$2.50/1K, no usage fees] Export EU public tenders from the official TED Search API. Filter by keyword, CPV code, buyer country and publication date. Get buyer, submission deadline, value and notice links. Not affiliated with the EU Publications Office.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Vladimir Tsaplin

Vladimir Tsaplin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Scrape EU tenders from TED, the official journal of EU public procurement, into a clean table. Bid teams and public-sector suppliers filter by keyword, CPV code, buyer country and date, and get the buyer, submission deadline, value and notice links. Sample record from a real run on 2026-10-31:

{
"publication_number": "744140-2026",
"publication_date": "2026-10-27",
"title": "Germany – IT services: consulting, software development, Internet and support – Rahmenvereinbarungen Programmier- und Beratungsleistungen zur Anwendungsentwicklung im Ressort des StMELF",
"buyer_name": "Freistaat Bayern, vertreten durch das Bayer. StM f. Ernährung, Landwirtschaft, Forsten und Tourismus",
"country_code": "DEU",
"cpv_codes": [
"72000000",
"72211000",
"72200000",
"72243000",
"72262000",
"72263000"
],
"submission_deadline": "2026-11-23T10:00:00+01:00",
"estimated_value": null,
"lots_estimated_value_sum": 46875000.0,
"lots_estimated_value_currency": "EUR",
"ted_url": "https://ted.europa.eu/en/notice/-/detail/744140-2026"
}

Not affiliated with the Publications Office of the European Union. Data source: the official TED Search API.

What you get

FieldExampleNotes
titleGermany – IT services: consulting, software development, Internet a...In English where TED has it
buyer_nameFreistaat Bayern, vertreten durch das Bayer. StM f. Ernährung, Landwirtschaft, Forsten und TourismusContracting authority
submission_deadline2026-11-23T10:00:00+01:00The next tender deadline still ahead when the run started, as the buyer published it. Multi-lot notices list all of them in submission_deadlines
participation_request_deadlinenullThe next deadline for requests to participate, with its time, in restricted and negotiated procedures, or for expressions of interest on a prior information notice used as a call for competition
cpv_codes72000000, 72211000, 72200000, 72243000, 72262000, 72263000Classification codes
country_codeDEUFirst buyer country. Joint procurements list all of them in buyer_countries
estimated_valuenullValue of the whole procedure, as published. Buyers sometimes enter a placeholder such as 1
lots_estimated_value_sum46875000.0Sum of the lot estimates, only when the notice gives no procedure value. A buyer can repeat one figure on each lot, so the sum can overstate the value
total_valuenullTotal value field of the notice, where it has one. On an award notice this is usually the awarded value
ted_urlLinkNotice page, with PDF and XML links in their own fields

How much does it cost?

You pay per notice in the output, with no usage fees.

Apify planPrice per 1,000 notices2,000 notices a month
Free$2.50$5.00
Starter (Bronze)$2.00$4.00
Scale (Silver)$1.75$3.50
Business (Gold)$1.50$3.00

A run also carries Apify's small start fee of $0.00005 per run for each GB of memory. Set Maximum notices to cap a run.

Set up daily monitoring in 3 steps

  1. Enter your keyword, CPV codes and countries, and turn on Only new notices.
  2. Save the input as a task.
  3. Add a daily schedule to the task. Each run returns just the notices that earlier runs of this search have not delivered, so you do not pay twice for the same notice.

The list of delivered notices is kept in a storage named eu-ted-tenders-seen-notices in your own Apify account. It is saved after every 100 stored notices and at the end of the run, so a run that is aborted or crashes keeps what it delivered. There is one gap: a run stopped in the moment between storing a batch and saving the list repeats that batch in the next run, and you pay for those notices twice. That is 100 notices at most.

If the list cannot be read, the run fails rather than repeat old notices. If it cannot be saved, the run stops and fails, because the next one may repeat its notices. The list keeps the latest 20,000 notices of a search, so a search that delivers more than that can repeat older ones. Two runs of the same search at the same time can deliver the same notices.

Sorting and open tenders

  • Sort by newest publication, oldest publication or nearest submission deadline. The nearest deadline is the one in submission_deadline: for a multi-lot notice, its next lot deadline still ahead. Notices whose deadlines have all passed come after those, latest first, and notices with no tender deadline come last. This sort reads the whole result before it stores anything, so it takes longer, and a search that matches more than 15,000 notices is refused, because that is the most this Actor reads. Narrow the search or sort by publication date.
  • Open tenders only is on by default and keeps notices with a deadline still ahead when the run starts, for tenders, requests to participate or expressions of interest. Deadlines are compared as moments, time zone included, so a deadline that passed earlier today does not count: those notices are not stored and not charged. Restricted and negotiated procedures often take requests first and set no tender deadline yet, so they show participation_request_deadline and a null submission_deadline. Turn the option off to include contract awards and other notices.
  • Deadlines are taken as published. Some buyers enter 00:00, which is the start of that day: a notice with its only deadline at 2026-10-31T00:00:00+01:00 counts as closed for the whole of 31 October. Read the notice before you rule out a tender near midnight.

Compared with the alternatives

TED is free, and its own tools may be all you need. Every option below uses the same public data: this Actor has no extra source. You pay for a ready table, the form filters and scheduled only-new runs.

OptionCostFiltersWhat you get
TED websiteFreeSearch formWeb pages, with PDF and XML per notice
TED registered accountFree access, registration neededSearch profilesEmail alerts and personalised RSS feeds
TED RSS feedsFree, no accountA feed per business sector or country. A hand-built feed URL can also carry an expert queryTitle, link, publication date and notice type, and on request the buyer name, estimated value and tender deadline with its time, as text. A query feed tested on 2026-10-31 held only the latest daily issue: 277 items for CPV 72000000, all dated 30 October, and nothing for any earlier date. Buyer names came with 27 of those 277 items in an English feed
TED XML packagesFree, no sign-inNone: every notice of a day or a monthOne archive per day or month, with XML to unpack and parse yourself
TED Search APIFree, no API keyExpert query languageJSON to parse, with code to write and maintain
This ActorPer notice, as aboveKeyword, CPV, country and date fields, or an expert queryOne table as CSV, JSON or Excel with a column per field, past notices as well as new ones, sorting by deadline, up to 5,000 notices per run

Limits

  • Up to 5,000 notices per run.
  • The Actor reads at most the first 15,000 notices of a search, because it pages by number and TED stops that paging there. Only new notices on a bigger search can reach that point once it skips many delivered notices. The run then fails with REJECTED_LATER_PAGE, and the notices it stored stay.
  • If the TED API fails, or the time limit ends before the result has been read, the run fails with its error code. It never fills in other notices. Notices stored before a failure stay in the dataset, so check the run status before you treat a result as complete.
  • At the end of a search the Actor compares what it read with the total TED reports. If notices are missing, the run fails with NOTICES_MISSING instead of looking complete. That can happen when TED publishes new notices during a long run: run it again.
  • A field stays null when TED's search data has no value for it, even if the notice PDF or XML shows one. Check the notice before you rely on a null.
  • Old-format notices, nearly all published before 2024, hold less than eForms notices:
    • One time limit covers tenders and requests to participate. It goes in submission_deadline on an open procedure and in participation_request_deadline on any other.
    • It is the buyer's local time with no time zone, so it has no offset here, and sorting and Open tenders only read it as UTC, which can be a few hours out. TED writes 00:00 for a notice that gives no time, so only the date is kept, and it counts to the end of that day.
    • TED's date can differ from the notice text. Of 66 old-format notices checked on 2026-10-31, 2 had a later date than the notice, one of them 2031 for a tender whose notice says January 2021. Such a notice counts as open, so read it before you act on it.
    • A correction is a notice of its own, with notice_type corr and the changed date, so the first notice can show a date that has since moved.
    • estimated_value comes from the notice total on planning and competition notices. Award notices keep their value in total_value with a null estimate. lots_estimated_value_sum stays null, and so does a value published as a range.
    • procedure_type can be a one-character TED code, such as 4 for a negotiated procedure.
  • A country code goes to TED as you enter it, once 2-letter codes are converted. If TED does not know the code, the run fails with INVALID_INPUT and no notice is charged.

FAQ

What is a CPV code? The Common Procurement Vocabulary classifies what a tender buys: 72000000 is IT services, 45000000 is construction work. A search by a code also finds its narrower codes: in a run on 2026-10-31, 72000000 returned notices coded 72224000 and other 72 codes.

Can I use this data commercially? TED notices are published by the EU Publications Office, which allows reuse, including commercial reuse, under its reuse policy. Name the source when you publish the data, and do not use the TED logo.

Can I write my own query? Yes. Put a TED expert query expression in the keyword field. The Actor adds the date, country and CPV filters around it.

Call it from your own code

curl -X POST "https://api.apify.com/v2/acts/creatortsv~eu-ted-tenders-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"cpvCodes": ["72000000"], "countries": ["DEU"], "sortBy": "deadline", "maxItems": 50}'

Scope

What's Included: notices from the official TED Search API, filters by keyword, CPV, country and date, submission deadlines, value fields as published, sorting, only-new mode for schedules.

What's Not Included: tender documents, notices below the EU thresholds that are published only nationally, translations, bid advice and award predictions.

Keywords: ted tenders scraper, eu tenders api, public procurement data, cpv code search, tenders electronic daily, government contracts europe.