EU & UK Public Tenders Search: TED + Find a Tender avatar

EU & UK Public Tenders Search: TED + Find a Tender

Pricing

from $2.00 / 1,000 notices

Go to Apify Store
EU & UK Public Tenders Search: TED + Find a Tender

EU & UK Public Tenders Search: TED + Find a Tender

Search EU and UK public tenders in one format: TED (Tenders Electronic Daily), the EU's official procurement journal, and the UK's Find a Tender, through their official public APIs. Filter by keywords, CPV codes, country, buyer, notice type and date; get deadlines, values, buyers and official links.

Pricing

from $2.00 / 1,000 notices

Rating

0.0

(0)

Developer

Michael Costa

Michael Costa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Share

What does EU & UK Public Tenders Search: TED + Find a Tender do?

EU & UK Public Tenders Search searches public tenders on TED (the EU's official procurement journal) and the UK's Find a Tender in one go, and returns clean notice records: title, buyer, deadline, value, CPV codes and links to the official notice. Official public APIs; no login, no key.

Try it in one click: the input comes pre-filled with the 20 newest open calls for tenders mentioning "software" from each source: up to 40 notices, or about $0.08 (40 × $0.002 per notice, plus $0.00005 for the run start). The UK part takes a few minutes (Find a Tender limits how fast it can be read, see the FAQ). Then replace it with what you actually want.

Monitor new public tenders (tender alerts)

EU & UK Public Tenders Search can run your search on a schedule and give you only the notices it hasn't returned before. Set it up once:

  1. Save a task. Fill in Keywords, CPV codes and Buyer countries, turn on Only tenders still open and Only new notices (openOnly: true, onlyNew: true in the API), and set Published from to 7 days. Then click Save as a new task at the top right of the actor's page. The first run returns everything that matches; later runs return only notices this search hasn't returned before. "7 days" moves with every run.
  2. Schedule it. In Apify Console, open Schedules, click Create new, pick the task and set how often it runs (for example every weekday at 07:00, cron 0 7 * * 1-5).
  3. Send the new tenders where you work, from the task's Integrations tab:
    • Slack: a message in the channel you choose when a run succeeds (you pick the events and can edit the message).
    • Email: Send results email via Gmail sends the run's results, with the dataset attached.
    • Webhook: a POST to your URL on the ACTOR.RUN.SUCCEEDED event. The payload's resource.defaultDatasetId points to the new notices: GET https://api.apify.com/v2/datasets/<defaultDatasetId>/items?format=json with your API token.
    • Make, Zapier or n8n: each has an Apify step that starts on a finished run and reads its dataset.

A run that finds nothing new returns 0 notices and costs only the $0.00005 start fee. Slack and email are sent for every successful run, including a quiet one; to hear only about new tenders, use the webhook or Make/Zapier/n8n and skip runs whose dataset is empty. Add the run failed event too, so a failed run doesn't go unnoticed. Keep the task's filters fixed: the memory is per keyword line and filter set, so changing them starts a fresh search. If Find a Tender refuses a run's UK requests, the next run still returns the UK notices it missed, as long as they are inside its Published from window.

What data does EU & UK Public Tenders Search return?

FieldExampleNotes
titleGrowth Hub WebsiteTED titles in the language you pick; titleOriginal keeps the buyer's own.
sourcefind-a-tenderted or find-a-tender.
buyerName, buyerCountryYork and North Yorkshire Combined Authority, GBRPlus buyerCity and buyerWebsite when given.
deadline2026-10-16T12:00+01:00The earliest tender deadline over all lots, with its time.
participationRequestDeadlinenullOften comes first in restricted and negotiated procedures.
estimatedValue, estimatedValueCurrency90000, GBPNumbers; null when the notice gives none.
awardedValue, awardedValueCurrencynullOn award notices.
cpvCodes72212224, 72413000Each code once.
placeOfPerformanceUKENUTS codes (TED) or ITL codes (UK).
noticeCategory, procedureTypecompetition, Below threshold - open competitioncompetition, award, prior, modification, or null.
publicationDate2026-09-25
descriptionPerkančioji organizacija numato...In the buyer's language; e-mail addresses and phone numbers removed.
url, pdfUrl, xmlUrlhttps://www.find-tender.service.gov.uk/Notice/091136-2026The official notice.
idfts:091136-2026Stable across runs, for deduplication.

Every notice has the same fields; the full record is under Output.

How much does it cost to search public tenders?

You pay per notice returned: $2.00 per 1,000 notices, plus $0.00005 each time a run starts. A search that fails costs nothing, and a repeat run with nothing new costs only the start fee.

  • The example below: 40 notices × $0.002 = $0.08, plus the $0.00005 start fee; the repeat run $0.00005.
  • A month, for example: a daily alert for one CPV niche that sees about 10 new notices a day: 300 × $0.002 = $0.60, plus 30 starts ($0.0015).
  • Caps: Max results per run in the input, and Maximum cost per run in the run options. It stops cleanly at whichever comes first, and stops fetching as soon as the limit is covered, so a capped run is also a fast one.

How to search EU and UK public tenders

  1. Open the actor and choose the Sources: TED (EU), Find a Tender (UK), or both.
  2. Type one search per line into Keywords, and narrow it with CPV codes, Buyer countries, Notice types or Only tenders still open.
  3. Click Start. With the UK source on, expect a few minutes.
  4. Open the Output tab and export the notices as JSON, CSV or Excel, or read them through the API.
  5. For tender alerts, save it as a task and schedule it (see Monitor new public tenders above).

The two sources:

  • TED (Tenders Electronic Daily), the EU's official journal of public procurement, where every public tender above the EU thresholds in the EU and EEA is published, plus many from EU institutions and other countries.
  • Find a Tender, the UK government's service where UK public bodies publish their tenders, awards and planned purchases (since the Procurement Act 2023, below-threshold notices too).

Example: open "software" tenders from the past week

The pre-filled search, set up as an alert (only open tenders, published in the last 7 days, only new notices):

{"queries": ["software"], "sources": ["ted", "uk"], "noticeTypes": ["competition"], "openOnly": true,
"publishedFrom": "7 days", "language": "en", "maxResultsPerQuery": 20, "onlyNew": true}

It returned 20 TED and 20 UK notices. The newest TED one (real output from a local run on 2026-09-25; description shortened):

{
"id": "660594-2026",
"title": "Lithuania – Programming services of systems and user software – Vilniaus turizmo informacijos centro skaitmeninimo paslaugos (Atviras tarptautinis pirkimas)",
"noticeCategory": "competition",
"procedureType": "open",
"contractNature": ["services"],
"publicationDate": "2026-09-25",
"deadline": "2026-09-30T09:30+03:00",
"buyerName": "VšĮ Vilniaus pirkimų agentūra",
"buyerCountry": "LTU",
"cpvCodes": ["72211000"],
"estimatedValue": null,
"description": "Perkančioji organizacija numato įsigyti Vilniaus turizmo informacijos centro skaitmeninimo paslaugas...",
"url": "https://ted.europa.eu/en/notice/-/detail/660594-2026",
"pdfUrl": "https://ted.europa.eu/en/notice/660594-2026/pdf"
}

And one of the UK notices from Find a Tender (real output from a local run on 2026-09-25, with the default input):

{
"id": "fts:091136-2026",
"source": "find-a-tender",
"title": "Growth Hub Website",
"noticeType": "tender",
"noticeCategory": "competition",
"procedureType": "Below threshold - open competition",
"publicationDate": "2026-09-25",
"deadline": "2026-10-16T12:00+01:00",
"buyerName": "York and North Yorkshire Combined Authority",
"buyerCountry": "GBR",
"cpvCodes": ["72212224", "72413000"],
"placeOfPerformance": ["UKE"],
"estimatedValue": 90000.0,
"estimatedValueCurrency": "GBP",
"url": "https://www.find-tender.service.gov.uk/Notice/091136-2026",
"pdfUrl": "https://www.find-tender.service.gov.uk/Notice/091136-2026/PDF"
}

Run again straight after, the same search returned 0 notices from either source, so only the start fee was charged. The first run took about 4 minutes and the repeat about 3: the UK part reads the last 7 days of Find a Tender at its allowed pace.

Input

FieldWhat it does
SourcesTED (EU) and/or Find a Tender (UK). The console pre-fills both; left out of an API call, TED only.
KeywordsOne search per line, matched against the full text of each notice. Quotes make a phrase ("road maintenance"), AND / OR / NOT combine words, * is a wildcard. Leave empty to search by the filters alone.
CPV codesOnly notices under these CPV codes, e.g. 72000000 (IT services). A broad code includes every code below it.
Buyer countriesDE, FR, EL/GR... or three-letter codes (DEU). UK notices are included only when this is empty or includes GB / UK.
Buyer nameWords in the contracting authority's name, e.g. Bundesagentur für Arbeit.
Notice typesOpen calls for tenders (default), contract awards, prior information notices, modifications. Empty = all kinds.
Only tenders still openOnly notices whose deadline for tenders is today or later.
Published from / toA date (2026-09-01), or for "from" a number of days back (7 days).
LanguageLanguage of TED's titles and links (24 EU languages). UK notices are in English.
Max notices per searchPer keyword line and source, newest first; up to TED's limit of 15,000.
Only new noticesSkip notices this search returned in earlier runs.
Max results per runCap the total number of notices across all searches.
{
"queries": ["cloud hosting", "\"data centre\""],
"cpvCodes": ["72000000"],
"countries": ["DE", "AT", "CH"],
"noticeTypes": ["competition"],
"openOnly": true,
"publishedFrom": "7 days",
"language": "en",
"maxResultsPerQuery": 100,
"onlyNew": true
}

Output

Every notice has the same fields. Fields the notice doesn't give are null (or an empty list).

{
"id": "658275-2026",
"query": "software",
"title": "Greece – Software package and information systems – Δράσεις Ψηφιακού Μετασχηματισμού του Δήμου Ναυπλιέων",
"titleOriginal": "Δράσεις Ψηφιακού Μετασχηματισμού του Δήμου Ναυπλιέων",
"originalLanguage": "ell",
"noticeType": "cn-standard",
"noticeCategory": "competition",
"procedureType": "open",
"contractNature": ["supplies"],
"publicationDate": "2026-09-24",
"deadline": "2026-10-27T13:00+02:00",
"participationRequestDeadline": null,
"buyerName": "ΔΗΜΟΣ ΝΑΥΠΛΙΕΩΝ",
"buyerCountry": "GRC",
"buyerCity": "ΝΑΥΠΛΙΟ",
"buyerWebsite": "www.nafplio.gr",
"cpvCodes": ["48000000", "32420000", "72268000", "80533100", "71356300"],
"placeOfPerformance": ["EL651"],
"placeOfPerformanceCountries": ["GRC"],
"estimatedValue": 649923,
"estimatedValueCurrency": "EUR",
"awardedValue": null,
"awardedValueCurrency": null,
"description": "Αντικείμενο της σύμβασης είναι η προμήθεια νέων εφαρμογών και τεχνολογικών μέσων ...",
"url": "https://ted.europa.eu/en/notice/-/detail/658275-2026",
"pdfUrl": "https://ted.europa.eu/en/notice/658275-2026/pdf",
"xmlUrl": "https://ted.europa.eu/en/notice/658275-2026/xml",
"scrapedAt": "2026-09-24T21:30:00Z"
}

source is ted or find-a-tender. id is stable across runs, so you can use it to deduplicate: TED's publication number, or fts: plus Find a Tender's notice ID. noticeCategory is competition, award, prior, modification, or null for other notices (corrections, for example). deadline is for tenders; restricted and negotiated procedures often have a participationRequestDeadline first. The description stays in the language the buyer wrote it in.

How UK notices fit the same fields

  • noticeType is Find a Tender's own type (tender, award, planning, contractAmendment, tenderUpdate, ...); noticeCategory groups them like TED's: tender is competition, award is award, planning is prior, contractAmendment is modification, and updates, cancellations and terminations are null.
  • procedureType is the procedure as Find a Tender names it (Open procedure, Competitive flexible procedure, Below threshold - open competition, ...). deadline is the tender deadline; participationRequestDeadline the deadline for requests to participate (expressions of interest).
  • estimatedValue is net of VAT when the notice gives both. awardedValue adds up the awards of an award notice when they share one currency. Suppliers' names aren't returned, as for TED.
  • placeOfPerformance has ITL region codes (UKE, UKG13), the UK's successor to NUTS. xmlUrl is null.

Run it on a schedule, or from your own code

  • Schedule: save the input as a task and add it to a schedule, as in Monitor new public tenders above.
  • API: fetch a task's latest results with GET https://api.apify.com/v2/actor-tasks/<task id>/runs/last/dataset/items?status=SUCCEEDED&format=csv and your API token (format can also be json or xlsx).
  • Webhooks and automation: a webhook when a run succeeds, or Make, Zapier or n8n through Apify's integrations.

Can I use EU & UK Public Tenders Search from an AI agent (MCP)?

Yes. Connect the agent to Apify's MCP server (https://mcp.apify.com) and add humble-echidna/eu-ted-tenders as a tool; the agent passes the same input JSON as above. The UK source takes minutes (see the FAQ), so leave it out ("sources": ["ted"], the API default) when the agent needs a quick answer. Keep Max notices per search small so answers stay short. A field left out takes its default, and Keywords defaults to software: to search by CPV code or buyer alone, pass "queries": [].

Who it's for

Companies that bid for public contracts in the EU and the UK (IT, construction, consulting, medical supplies, and so on), and the consultants who find tenders for them. The recurring job: a daily or weekly alert of new open calls for tenders in your CPV codes and countries, with the deadline and value up front.

Why this one?

  • EU and UK in one list. Since Brexit, UK tenders are no longer on TED. Here they come back from Find a Tender in the same fields as TED's (CPV codes, deadlines, values, buyer, links), each marked with its source.
  • Tender alerts that don't repeat themselves. Turn on Only new notices and schedule it: each run returns only notices that search hasn't returned before. "Published from: 7 days" moves with every run.
  • Readable in your language. TED translates every notice title into all 24 EU languages; pick yours, and the links open the official notice in that language too. The buyer's own title and language are kept alongside.
  • Clean fields, not raw eForms. TED repeats CPV codes, places and deadlines once per lot, as lists in 24 languages; you get each value once, the earliest deadline over all lots (with its time), and values as numbers with their currency.
  • No personal data. None of TED's contact-person, e-mail, phone or fax fields are requested, and e-mail addresses and phone numbers are removed from the free text.
  • Polite and safe. It identifies itself honestly (User-Agent HumbleEchidnaApify), follows robots.txt, and stays under TED's fair usage policy (at most 600 requests a minute, 3 at a time; TED allows 700) and Find a Tender's request limit (one request every 10 seconds, one at a time; it allows about 12 per 2 minutes).
  • Reliable. One failing search never affects the others in your run, and one source failing never affects the other. The run log and the RUN_STATS record say exactly which search had a problem and why.

Limits

  • TED covers above-threshold tenders. Below-threshold tenders in EU countries are usually only on national portals, which this actor doesn't read.
  • UK searches are slow (about one day of notices per minute) and go back at most 14 days per search (see the FAQ).
  • At most "Max notices per search" per keyword line and source, newest first (20 by default; TED allows up to 15,000).

FAQ

Which tenders are on TED?

Public contracts above the EU thresholds from the EU and EEA countries, plus notices from EU institutions and some other countries, since 2016 in this API. Below-threshold tenders are usually only on national portals.

How are UK notices searched?

Find a Tender's API lists notices by the day they were published or updated; it has no keyword search. So this actor reads the UK notices day by day, from the newest back, and applies your keywords and filters itself, in the same syntax as TED's (all words must appear, whole words, any case; "phrase", OR, NOT, *). A UK search stops once it has "Max notices per search" matches, or at 14 days back, whichever comes first (the run log and RUN_STATS say which days were read).

Why are UK searches slow?

Find a Tender lets a caller make about 12 requests every 2 minutes, and answers more with "Rate limit of 12 exceeded. Please retry after 120 seconds." A day of UK notices is about 5 requests (roughly 400 notices), so this actor reads about one day of UK notices per minute (one request every 10 seconds) and never tries to get around the limit. For a UK alert, set Published from to 1 days or 7 days and run it daily or weekly. If Find a Tender still refuses (another program on the same Apify server may have used the allowance), that run's UK searches fail with the reason in the log and RUN_STATS; TED's results are still returned, and with Only new notices the next run still returns the UK notices it missed, as long as they are inside its Published from window.

Why are there fewer results than on the TED website?

Each search line returns at most "Max notices per search" (20 by default), newest first. TED's API allows up to 15,000 per search.

TED couldn't read the query built from that line. The run log shows the query; simplify the keywords (for example, a stray AND at the end). Other lines in the run still run.

Why does something that used to work now fail or return fewer results?

TED may have changed its API. The run log names the search and what went wrong, and every other search in the run is unaffected. Please open an issue with the input you used.

Yes, for both sources.

TED. It only uses TED's official Search API, which is public, needs no key and is documented for data reusers (TED API docs). TED's legal notice says: "Unless otherwise noted, the procurement notices published in the Supplement to the Official Journal of the European Union can be freely reused, for commercial or non-commercial purposes", under the Commission's reuse policy (Decision 2011/833/EU). Source: TED, © European Union, 1998-2026; the records are reformatted (fields flattened, contact details removed). It stays within TED's fair usage policy. It collects no personal contact data: TED's contact-person, e-mail, phone and fax fields are never requested, and e-mail addresses and phone numbers are removed from descriptions. Names written into a description's free text can't be detected reliably and may remain. This actor is not affiliated with the Publications Office of the EU.

Find a Tender (UK). It only uses the OCDS API that Find a Tender publishes under "Data outputs" on its data and API page, which says: "Notice data is available under the Open Government Licence". The Open Government Licence v3.0 lets you "exploit the Information commercially and non-commercially", on condition that you acknowledge the source: Contains public sector information licensed under the Open Government Licence v3.0. Find a Tender's terms add: "We make most of the content on Find a Tender available through feeds for other websites and applications to use." The licence doesn't cover personal data, so contact points are never read, and e-mail addresses and phone numbers are removed from descriptions. It keeps to Find a Tender's request limit (see above) and identifies itself in its User-Agent. This actor is not affiliated with or endorsed by the Cabinet Office or Find a Tender.

ActorUse it when
Dataset Transformer: Filter, Dedupe, ConvertYou want to keep only notices above a value or with a deadline far enough away, and export them as CSV for your bid team.

Feedback and support

Found a bug, or need a field or source that isn't here? Open an issue on the Issues tab with the input you used.

Versions

Current version: 1.1. See the Changelog tab for what changed in each version.