EU + UK Public Tenders Feed (Unofficial)
Pricing
from $4.00 / 1,000 notice saveds
EU + UK Public Tenders Feed (Unofficial)
Public tenders from the EU's TED and UK Contracts Finder in one schema, from official keyless APIs. Filter by date, keyword, CPV, country, region, value and notice kind. Change tracking. Not affiliated with the EU Publications Office or Crown Commercial Service.
Pricing
from $4.00 / 1,000 notice saveds
Rating
0.0
(0)
Developer
Gray Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
What does EU + UK Public Tenders Feed (Unofficial) do?
This Actor gives you public procurement notices from the EU and the UK in one clean, flat format: calls for tender, prior information notices and contract award notices, one row per notice, each with a link to the original notice. Every row is checked against a fixed schema before it is saved.
It reads two official, keyless sources:
- TED (Tenders Electronic Daily), the EU's public procurement journal, through TED's public Search API. Covers the procurement notices published in the Supplement to the Official Journal of the EU.
- UK Contracts Finder, the UK government's notice service, through its public OCDS search API.
You don't need an account or API key for either source. Put it on a schedule for a daily feed of new and changed notices for your CPV codes, countries, regions or keywords, or run it once to research a market.
This Actor is unofficial. It is not affiliated with, endorsed by, or sponsored by the Publications Office of the European Union, the European Commission or Crown Commercial Service. Data comes from their public APIs.
What data can you extract?
| Field | What it is |
|---|---|
noticeId | Unique key: ted:<publication number> or cf:<notice id> |
source, sourceName | ted or contracts_finder, and the source's full name |
noticeUrl | Link to the original notice on ted.europa.eu or contractsfinder.service.gov.uk |
title, titleLanguage, titleIsOriginal | Title (English where the source offers one; see Languages) |
originalTitle, originalLanguage | Title in the notice's original language |
noticeKind | planning, tender, award or other (same meaning for both sources) |
noticeType, procedureType, contractNature | The source's own notice type, procedure (e.g. open) and works/supplies/services |
buyerName, buyerCountry, buyerRegion | Buying organisation, its country (ISO 3-letter) and region (TED: NUTS code) |
nutsCodes, deliveryRegions, placeOfPerformanceCountries | Where the work happens (TED: NUTS codes; Contracts Finder: UK region names) |
cpvCodes, mainCpvCode, mainCpvDescription | CPV classification codes |
estimatedValue, estimatedValueCurrency, estimatedValueBasis | Estimated value as published, in the notice's own currency, and how it was derived (see Lots) |
awardedValue, awardedValueCurrency | Total awarded value for award notices, when published |
lotCount | Number of lots (TED) |
publishedAt, deadlineAt | Publication date and the submission deadline (earliest lot deadline) |
contractStart, contractEnd, suitableForSme | Contract period and the SME-suitability flag, when published |
suppliers, suppliersWithheld | Winning organisations, only when Include supplier / winner organisations is on (off by default; see Supplier names) |
description | Notice description, only when Include descriptions is on (otherwise null) |
changeStatus | new, updated or unchanged when change tracking is on |
attribution | Source credit and licence line for that row |
retrievedAt | When the row was fetched |
Organisations only. Contact names, email addresses, phone numbers, street addresses and other named individuals are not included.
Reliability
- Validated rows. Every row is checked against a fixed schema before it is saved. Rows that fail are skipped, counted in the run summary and not charged.
- One source can fail without stopping the other. If TED or Contracts Finder is down or rate-limits the run, rows from the other source are still saved and the run is marked
partialwith the reason. - Retries and polite pacing. Server errors are retried with backoff;
429 Retry-Afteris honoured; Contracts Finder's documented 5-minute pause after a403is respected. - Duplicates removed across pages; change tracking labels each notice
new,updatedorunchanged, and can save only what changed. - Run summary. A
RUN_SUMMARYrecord lists per-source counts, requests, waits, skipped rows, the newest publication date seen, and warnings (for example when a source returned nothing for several days or changed its format).
Use cases
- Suppliers and SMEs: a daily list of new EU and UK tenders in your CPV codes and countries.
- Bid and business development teams: track prior information notices before the tender opens, and award notices to see who won (organisations only).
- Consultants: one saved search per client, sent to a spreadsheet or CRM.
- Market researchers: award values and buyers by CPV code, country or region.
- Developers: one JSON schema for both sources through the Apify API.
How to use it
- Choose Sources (both by default).
- Pick a date range: Last N days (default 3: today and the two previous days, in UTC) or Published from / to (up to 90 days per run).
- Add any filters: keywords, CPV codes, buyer countries, NUTS regions (TED), UK regions (Contracts Finder), notice kinds, value range.
- Set Maximum results and click Start. For a daily feed, schedule it once a day with Track changes between runs and Only new or updated notices on.
Download results as JSON, CSV or Excel, or connect them to your tools.
Input examples
These are also in the examples/ folder.
Daily feed of IT tenders in Germany, France and the UK (examples/daily-it-tenders-de-fr-uk.json):
{"lastNDays": 3,"cpvCodes": ["72000000"],"countries": ["DEU", "FRA", "GBR"],"noticeKinds": ["tender"],"maxResults": 500,"trackChanges": true,"onlyNewOrUpdated": true}
UK award notices over £100,000 in the last week, with winning organisations (examples/uk-awards-over-100k.json):
{"sources": ["contracts_finder"],"lastNDays": 7,"noticeKinds": ["award"],"minValue": 100000,"includeSuppliers": true,"maxResults": 1000}
EU construction tenders over €1 million in Germany, Austria and the Netherlands, with descriptions (examples/construction-tenders-eu.json):
{"sources": ["ted"],"lastNDays": 7,"cpvCodes": ["45000000"],"countries": ["DEU", "AUT", "NLD"],"noticeKinds": ["tender"],"minValue": 1000000,"includeDescriptions": true,"maxResults": 300}
Output example
Real sample: 3 rows from a test run on October 17, 2026, with the default input (links shown without ``; the dataset has full links).
[{"noticeId": "ted:718661-2026","source": "ted","sourceName": "TED (Tenders Electronic Daily), Publications Office of the European Union","noticeUrl": "ted.europa.eu/en/notice/-/detail/718661-2026","title": "Germany – Road transport services – Speisenlogistik zur Versorgung des Klinikstandortes Campus Hallerwiese","titleLanguage": "eng","titleIsOriginal": false,"originalTitle": "Speisenlogistik zur Versorgung des Klinikstandortes Campus Hallerwiese","originalLanguage": "deu","noticeKind": "tender","noticeType": "cn-standard","procedureType": "open","contractNature": "services","buyerName": "Klinikum Nürnberg","buyerCountry": "DEU","buyerRegion": "DE254","nutsCodes": ["DE254", "DE259"],"deliveryRegions": [],"placeOfPerformanceCountries": ["DEU"],"cpvCodes": ["60100000", "63520000", "63521000"],"mainCpvCode": "60100000","mainCpvDescription": null,"estimatedValue": null,"estimatedValueCurrency": null,"estimatedValueBasis": null,"awardedValue": null,"awardedValueCurrency": null,"lotCount": 1,"publishedAt": "2026-10-16","deadlineAt": "2026-11-13","contractStart": null,"contractEnd": null,"suitableForSme": null,"suppliers": null,"suppliersWithheld": 0,"description": null,"changeStatus": null,"attribution": "Source: TED, © European Union, ted.europa.eu. Procurement notices published in the Supplement to the Official Journal of the EU can be freely reused for commercial or non-commercial purposes (Commission Decision 2011/833/EU). Normalised by this Actor; not an official reproduction.","retrievedAt": "2026-10-18T00:04:24.000Z"},{"noticeId": "cf:71be42f6-fdb6-43ed-99b3-366dce762502","source": "contracts_finder","sourceName": "UK Contracts Finder (Crown Commercial Service)","noticeUrl": "www.contractsfinder.service.gov.uk/Notice/71be42f6-fdb6-43ed-99b3-366dce762502","title": "Grounds Maintenance","titleLanguage": "eng","titleIsOriginal": true,"originalTitle": "Grounds Maintenance","originalLanguage": "eng","noticeKind": "award","noticeType": "award","procedureType": "Call-off from a framework agreement","contractNature": "services","buyerName": "THE CAMBRIDGE HOUSING SOCIETY LIMITED","buyerCountry": "GBR","buyerRegion": null,"nutsCodes": [],"deliveryRegions": ["East of England"],"placeOfPerformanceCountries": ["GBR"],"cpvCodes": ["77314000"],"mainCpvCode": "77314000","mainCpvDescription": "Grounds maintenance services","estimatedValue": 482798,"estimatedValueCurrency": "GBP","estimatedValueBasis": "notice","awardedValue": 482798,"awardedValueCurrency": "GBP","lotCount": null,"publishedAt": "2026-10-16T16:18:51+01:00","deadlineAt": null,"contractStart": "2021-11-01T00:00:00Z","contractEnd": "2027-03-31T23:59:59+01:00","suitableForSme": true,"suppliers": null,"suppliersWithheld": 0,"description": null,"changeStatus": null,"attribution": "Contains public sector information licensed under the Open Government Licence v3.0. Licence: www.nationalarchives.gov.uk/doc/open-government-licence/version/3/. Source: UK Contracts Finder, www.contractsfinder.service.gov.uk. Normalised by this Actor.","retrievedAt": "2026-10-18T00:04:24.000Z"},{"noticeId": "ted:718660-2026","source": "ted","sourceName": "TED (Tenders Electronic Daily), Publications Office of the European Union","noticeUrl": "ted.europa.eu/en/notice/-/detail/718660-2026","title": "Croatia – Pollution-control vessels – Nabava plovila za uklanjanje onečišćenja i opreme","titleLanguage": "eng","titleIsOriginal": false,"originalTitle": "Nabava plovila za uklanjanje onečišćenja i opreme","originalLanguage": "hrv","noticeKind": "tender","noticeType": "cn-standard","procedureType": "open","contractNature": "supplies","buyerName": "MINISTARSTVO UNUTARNJIH POSLOVA","buyerCountry": "HRV","buyerRegion": "HR050","nutsCodes": ["HR031", "HR050"],"deliveryRegions": [],"placeOfPerformanceCountries": ["HRV"],"cpvCodes": ["34513600", "34512000", "34113200", "34711200", "35512400"],"mainCpvCode": "34513600","mainCpvDescription": null,"estimatedValue": 4534400,"estimatedValueCurrency": "EUR","estimatedValueBasis": "procedure","awardedValue": null,"awardedValueCurrency": null,"lotCount": 7,"publishedAt": "2026-10-16","deadlineAt": "2026-11-20","contractStart": null,"contractEnd": null,"suitableForSme": null,"suppliers": null,"suppliersWithheld": 0,"description": null,"changeStatus": null,"attribution": "Source: TED, © European Union, ted.europa.eu. Procurement notices published in the Supplement to the Official Journal of the EU can be freely reused for commercial or non-commercial purposes (Commission Decision 2011/833/EU). Normalised by this Actor; not an official reproduction.","retrievedAt": "2026-10-18T00:04:24.000Z"}]
The full field list is in the Output tab.
How much does it cost?
- $0.01 per run start (Apify's Actor start event) plus $4 per 1,000 notices saved ($0.004 each, the
tenderevent). Example: 1,000 notices = $0.01 + $4 = $4.01. Runs using more than 1 GB of memory incur one extra start charge per additional GB. - You pay only for rows that are saved. Rows skipped as duplicates, invalid, filtered out or unchanged are free.
- Set Maximum cost per run when you start a run; the Actor stops when it reaches your cap.
Languages
- TED publishes some fields in many EU languages.
titleis TED's English title when TED provides one; TED builds it as "Country – CPV description – original title", so the last part stays in the original language (titleIsOriginal: false). If there is no English title,titleis the original-language title (titleIsOriginal: true).originalTitleandoriginalLanguage(ISO 639-2, e.g.deu) always give the original. Descriptions, when included, are in the original language. The Actor does not machine-translate anything. - Contracts Finder notices are in English (
eng).
Lots
TED notices can have several lots. The Actor saves one row per notice, not per lot:
lotCountgives the number of lots.estimatedValueis the procedure's total estimated value when the notice gives one (estimatedValueBasis: "procedure"). Otherwise it is the single lot's value (single_lot) or the sum of lot values (sum_of_lots), but only when every lot has exactly one value in one currency; if not, it isnullrather than a guess.deadlineAtis the earliest lot deadline. CPV codes and regions are combined across lots.- Contracts Finder values are taken from the notice (
estimatedValueBasis: "notice").
Filters: what each source supports
| Filter | TED | Contracts Finder |
|---|---|---|
| Dates | Server-side (publication date) | Server-side (published from/to) |
| Keywords | Server-side full-text search of the notice | Matched in the title (and description when included) |
| CPV codes | Server-side; a parent code covers its children (72000000 covers 72212000) | Matched after download, same parent/child rule |
| Buyer countries | Server-side (ISO 3-letter, e.g. DEU) | UK only: skipped unless GBR is in the list or the list is empty |
| NUTS regions | Matched after download (TED only) | Not supported |
| UK regions | Not supported | Matched after download against the notice's region names (e.g. "London"); many notices have no region and are excluded when this filter is set |
| Notice kinds | Server-side | Matched after download |
| Value range | Matched after download on estimatedValue, in the notice's own currency (no currency conversion); notices without a value are excluded | Same |
Filters matched after download still use requests: a narrow Contracts Finder filter over a long window can read many pages to find a few matches. The cap is Maximum requests per source (default 60).
Privacy: organisations only
- Contact persons, email addresses, phone numbers, fax numbers and street addresses are dropped from both sources.
- Supplier names are off by default. See Supplier names: how the filter works and its limits.
- Descriptions are off by default. With Include descriptions on, emails and phone numbers are replaced with placeholders, but descriptions are free text written by buyers and can still mention people by name.
Supplier names: how the filter works and its limits
Off by default. Unless you turn on Include supplier / winner organisations (includeSuppliers: true), suppliers is null in every row and the Actor doesn't even request winner names from TED.
When you turn it on, the Actor tries to keep organisations and drop private individuals. For each winner named in an award notice:
- Natural-person flag (TED). If TED marks any winner in the notice as a natural person, all winner names in that notice are withheld. (TED lists names and person flags separately, so the Actor can't safely tell which name the flag belongs to.)
- Register identifier (Contracts Finder). A name with a UK company, charity or public-body register identifier in the notice (for example a Companies House number) is kept.
- Organisation words. Otherwise the name is kept only if it contains a legal form (Ltd, Limited, LLP, plc, GmbH, S.A., S.r.l., B.V., AB, …) or an organisation word (Council, University, Trust, Services, Consulting, Group, …).
- Everything else is withheld. Names that pass none of these checks, such as a bare "Jane Doe", are dropped and counted in
suppliersWithheld, so you can see how many were held back.
Limits (please read):
- It's a heuristic, not identity checking. It looks at the wording of the name, not at who is behind it.
- Some personal names get through. A sole trader who trades under their own name plus a business word is kept: for example "John Smith Consulting" or "Jane Doe Services Ltd". If your use case must exclude every individual, don't turn this option on, or review the names yourself.
- Some organisations are held back. An organisation whose name has no legal form or organisation word (for example a short brand name) is withheld even though it's a company.
- No enrichment. Names are passed through as the source publishes them. The Actor doesn't look them up anywhere else, link them to other data, or build profiles.
- Contact details are never included, with the option on or off: no contact persons, emails, phone numbers or addresses.
- Many notices don't name a winner at all, so
supplierscan be an empty list even when the option is on.
Limits
- Up to 90 days per run and up to 50,000 results; run again for older periods.
- TED fair use. TED's developer page sets fair-use limits per IP address (700 requests per minute and 600 views or downloads per 6 minutes). The Actor sends one request at a time with pacing well below that.
- Contracts Finder rate limits. Contracts Finder's API documentation says that after a
403no further requests should be made for 5 minutes. The Actor waits 5 minutes and tries again (at most twice per run), then keeps what it has and marks the source as failed in the summary. It also paces requests 2 seconds apart. - TED publishing days. TED publishes Monday to Friday, excluding certain public holidays (see TED's release calendar), so a window covering only a weekend or holiday returns no TED notices.
- Dates. TED
publishedAtis a date (2026-10-16); Contracts Finder gives a full timestamp with offset. Date windows are in UTC. - UK coverage. Only Contracts Finder is included for the UK. UK notices published only on other UK services are not covered.
- Not an official reproduction. TED's legal notice says only the electronically signed notices published in the Supplement to the Official Journal of the EU are authentic. Always check the original notice before bidding.
Integrations and API
Schedule runs daily, send results to Google Sheets, Slack or email through Apify integrations, trigger webhooks when a run finishes, or start runs and fetch results from your own code with the Apify API. The RUN_SUMMARY record in the key-value store lists counts per source, requests used, waits and anything skipped.
FAQ
Which data sources does it use? Only two official APIs: TED's Search API (api.ted.europa.eu), which TED's documentation says is "primarily targeted at data reusers and does not require authentication", and Contracts Finder's public OCDS notice search. It doesn't scrape website pages.
Can I reuse the data? 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." Contracts Finder content is available under the Open Government Licence v3.0. Every row carries an attribution line; keep it when you republish. Contains public sector information licensed under the Open Government Licence v3.0. This is not legal advice; read each source's terms for your own use case.
Why are some suppliers missing? Supplier names are off by default. When on, names that may belong to a private individual are withheld (see Supplier names), and many notices don't name a winner.
Why did I get fewer results than expected? Check the run summary: the date window (TED publishes Monday to Friday only), your filters, the request cap per source, or a rate limit can reduce results. Rows skipped as duplicates, filtered out or unchanged are listed there too.
Why are values in different currencies? Values are shown as published. The Actor doesn't convert currencies, and the value filter compares numbers in each notice's own currency.
How do I report a problem? Open an issue on the Issues tab with the run ID.