UK Find a Tender API and Contracts Finder API: search both, get daily alerts
UK public sector contracts are published on two official portals: Find a Tender (FTS), the main UK portal under the Procurement Act 2023, and Contracts Finder, which carries lower-value English contracts and many awards. Both have free, keyless OCDS APIs under the Open Government Licence. This guide shows working requests for each, the rate limits and quirks we hit, and UK Tenders API: Find a Tender + Contracts Finder, an Apify actor that searches both at once with keyword, CPV, region and value filters and an "only new" mode for daily alerts.
Run it on Apify Opens the actor's page on apify.com. A free Apify account is needed to run it.
Two portals, barely overlapping
On a test day, only 2 of 197 Contracts Finder notices also appeared on Find a Tender. If you want the full picture of what the UK public sector is buying and awarding, you need both.
| Find a Tender (FTS) | Contracts Finder (CF) | |
|---|---|---|
| Covers | Above-threshold UK procurement and Procurement Act 2023 notices, all four nations | Lower-value contracts in England, many award notices |
| API docs | find-tender.service.gov.uk/apidocumentation | contractsfinder.service.gov.uk/apidocumentation |
| Format | OCDS release packages | OCDS release packages |
| Date filter | updatedFrom, updatedTo | publishedFrom, publishedTo |
| Rate limit we observed | About 12 requests per 2 minutes, then HTTP 429 and a 120-second wait | HTTP 403 when exceeded, with a request to wait 5 minutes |
Call the APIs yourself
Find a Tender, one day of releases, 100 per page:
curl -s "https://www.find-tender.service.gov.uk/api/1.0/ocdsReleasePackages?updatedFrom=2026-10-09T00:00:00&updatedTo=2026-10-10T00:00:00&limit=100"
Contracts Finder, same day:
curl -s "https://www.contractsfinder.service.gov.uk/Published/Notices/OCDS/Search?publishedFrom=2026-10-09T00:00:00&publishedTo=2026-10-10T00:00:00&limit=100"
Both return an OCDS package: releases[] plus links.next, a URL with a cursor for the next page. In our test on 2026-10-12 the first FTS release was 095872-2026, tagged ["award", "contract"], titled "Space Technology Solutions"; the first CF release was a tender, "CA18543 - Northampton College - Media planning & Buying Services". The parts you will read most:
release.tag ["tender"], ["award", "contract"], ["planning"] …
release.tender.title / .description
release.tender.value.amount estimated value (check amountGross for incl. VAT)
release.tender.tenderPeriod.endDate deadline for tenders
release.tender.items[].additionalClassifications / classification CPV codes
release.parties[] buyer and suppliers, each with roles[]
release.awards[].suppliers / .value
Quirks to plan for
- Date is the only server-side filter. There is no keyword, CPV or region parameter, so you download every notice in your window and filter locally.
- Find a Tender's limit is per ~2-minute window, not per minute. We got "Rate limit of 12 exceeded. Please retry after 120 seconds." after 16 requests spaced 6 seconds apart. Three days of notices fit in the budget; a week of FTS takes about 4 minutes.
- Versions. FTS filters by update time, so a tender and its later updates arrive as separate releases. Keep the latest per procurement and notice type, or you will double count.
- Notice types. Under the Procurement Act 2023 notices are coded UK1 to UK17 (pipeline, planned procurement, tender, award…), alongside older forms. Map them to the stages you care about.
- Personal data. Contact names, emails and phone numbers sit in
parties[].contactPointand sometimes in descriptions; strip them if you store or forward data. - Attribution. The Open Government Licence v3.0 asks for: Contains public sector information licensed under the Open Government Licence v3.0.
Search both portals without code
- Open UK Tenders API: Find a Tender + Contracts Finder on Apify.
- Set filters: keywords, notice types (planning, tender, award), CPV codes, regions, value in GBP, buyer names, "Only open tenders", SME or VCSE suitability. Filters combine with AND; values inside one filter combine with OR.
- Choose Published in the last N days (default 3) or exact dates.
- Click Start. Export CSV or Excel, or use the Tenders and Contract awards views.
Keywords match whole words in the title, description, main CPV description and lot titles, and cloud* matches "cloud" and "cloud-based". The actor paces itself under Find a Tender's limit, waits out any 429 and continues, and keeps only the latest version of each notice by default. If one portal is down, the other's notices are still delivered and the status message says what is missing.
A tender from a real run on 2026-10-04, shortened:
{
"noticeId": "093436-2026",
"source": "Find a Tender",
"noticeUrl": "https://www.find-tender.service.gov.uk/Notice/093436-2026",
"noticeTypeLabel": "Tender notice",
"title": "Commercial Asset Management System",
"buyerName": "Oxford City Council",
"legalBasis": "Procurement Act 2023",
"cpvMain": "48100000",
"cpvMainDescription": "Industry specific software package",
"deliveryRegionNames": ["South East"],
"estimatedValue": 1800000.0,
"estimatedValueInclVat": 2160000.0,
"deadline": "2026-11-05T12:00:00Z",
"daysUntilDeadline": 32,
"isOpen": true,
"contractStart": "2027-06-01",
"contractEnd": "2032-05-31",
"matchedKeywords": ["software"]
}Worked examples with real numbers
1. Open software and cyber security tenders, last 7 days
{
"keywords": [
"software",
"cyber security"
],
"noticeTypes": [
"tender"
],
"onlyOpen": true,
"publishedWithinDays": 7,
"maxItems": 100
}
On 2026-10-04: 27 open tender notices, all from Find a Tender (5 older versions merged). They ranged from Durham County Council's internal audit management system (£170,000, deadline 5 November) and The Careers and Enterprise Company's digital products support (£15.6 million) to Merthyr Tydfil County Borough Council's CymruSOC 2.0 framework (£90 million).
2. Who won UK IT contracts in the last 3 days?
{
"noticeTypes": [
"award"
],
"cpvCodes": [
"72",
"48"
],
"publishedWithinDays": 3,
"maxItems": 200
}
130 award notices: 88 from Find a Tender and 42 from Contracts Finder, which shows why reading only one portal misses a lot. They named 153 supplier entries: 79 large companies and 70 SMEs. Award values summed to £1.66 billion, but treat sums with care: framework agreements publish their ceiling, not actual spend.
3. A daily alert for London and the South East
{
"keywords": [
"software",
"cyber security",
"cloud*"
],
"noticeTypes": [
"tender"
],
"onlyOpen": true,
"regions": [
"London",
"South East"
],
"minValueGbp": 50000,
"publishedWithinDays": 2,
"onlyNew": true
}
Schedule it for weekday mornings and send the dataset to email, Slack, Google Sheets or a webhook. In our alert test (tenders and planning notices in London and the South East above £50,000, 3-day window) the first run found 105 notices, the next 0, and after we removed 3 from the alert memory exactly those 3 came back.
Regions: London, South East, South West, East of England, East Midlands, West Midlands, North East, North West, Yorkshire and the Humber, Wales, Scotland, Northern Ireland, England, or ITL/NUTS codes such as UKI, TLJ or UKM7. Nationwide notices are included by default. CPV: 72 IT services, 48 software, 45 construction, 79 business services, 85 health and social care, 90 waste and cleaning, 80 education and training.
What each row contains
| Field | What it holds |
|---|---|
noticeId, noticeUrl, source | Notice ID, official link, which portal |
stage, noticeType, noticeTypeLabel, isUpdate | Planning, tender or award, and the UK notice code |
title, description, procurementReference | What is being bought |
buyerName, buyerType, buyerTown, buyerPostcode, buyerRegion | Who is buying |
cpvMain, cpvMainDescription, deliveryRegionNames, nationwide | Category and where it is delivered |
estimatedValue, estimatedValueInclVat, awardedValue | Values in GBP as published |
deadline, deadlineType, daysUntilDeadline, isOpen, enquiryDeadline | Deadlines |
contractStart, contractEnd, procurementMethodDetails, legalBasis | Contract period and procedure |
suitableForSme, suitableForVcse, lots[] | Suitability flags, lots with award criteria |
supplierNames, suppliers[], awardDate | Winning companies with Companies House or PPON IDs and SME flag |
matchedKeywords | Which of your keywords matched |
Honest limits
- Not every UK portal. Public Contracts Scotland, Sell2Wales and eTendersNI are not read. Their above-threshold notices also appear on Find a Tender; smaller ones do not.
- Long windows are slow. Find a Tender's rate limit means about 6 minutes per 10 days of notices.
- Data as published. Some notices have no value, a value only per lot, or a region only for the buyer (the region filter then falls back to the buyer's region). Some procedures only publish a request-to-participate deadline.
- Supplier names withheld when they might be a person. A name is shown only with a company or organisation marker (Ltd, LLP, PLC, CIC, Council, Trust, University…); otherwise
nameWithheld: true. In our 3-day IT awards test, 8 of 153 supplier entries (5%) were withheld. - No contact persons. Emails and phone numbers are never output and are scrubbed from descriptions.
Contains public sector information licensed under the Open Government Licence v3.0. Not affiliated with the Cabinet Office or Crown Commercial Service.
All input fields
Generated from the actor's live input schema (build 1.0.3).
| Field | Type | Default | What it does |
|---|---|---|---|
Keywordskeywords | array | Notices matching ANY of these words or phrases (whole words, case-insensitive) in the title, description or lot titles. A trailing * matches word endings, for example cyber* matches cybersecurity. Empty = no keyword filter. | |
Notice typesnoticeTypes | array | Tender = open opportunities to bid (UK4 tender notices and their updates). Planning = pipeline, market engagement and planned procurement notices. Award = contract awards, contract details and transparency (direct award) notices. Contract = contract changes and terminations. Cancellation = procurements cancelled. Empty = all types. Options: tender, planning, award, contract, cancellation | |
Only open tenders (deadline not passed)onlyOpen | boolean | false | Keep only notices whose deadline for tenders or requests to participate is still in the future. |
CPV codes (business sectors)cpvCodes | array | Common Procurement Vocabulary codes. A short code covers everything below it: 72 = all IT services, 48 = software packages, 45 = construction work, 79 = business services, 85 = health and social care, 90 = waste and cleaning. | |
Regionsregions | array | Where the contract is delivered: names (London, South East, Scotland, Wales, Northern Ireland, England, …) or ITL/NUTS codes (UKI, TLI, UKM7). Falls back to the buyer's region when the notice names no delivery region. | |
Published in the last N dayspublishedWithinDays | integer | 3 | Only notices published in the last N days. Ignored when "Published from" is set. Up to 3 days finishes in under a minute. Find a Tender serves about 1,100 notices per 2 minutes, so longer windows take about 6 minutes per 10 days. For daily alerts use 2 days with "Only new notices". |
| More filters | |||
Minimum value (GBP, excl. VAT)minValueGbp | integer | Keep only notices with an estimated (or awarded) value of at least this amount. Notices without a published GBP value are dropped when this is set. | |
Maximum value (GBP, excl. VAT)maxValueGbp | integer | Keep only notices with an estimated (or awarded) value of at most this amount. Notices without a published GBP value are dropped when this is set. | |
Only notices marked suitable for SMEssmeSuitableOnly | boolean | false | Keep only notices where the buyer marked the contract (or a lot) as suitable for small and medium-sized enterprises. |
Only notices marked suitable for VCSEsvcseSuitableOnly | boolean | false | Keep only notices marked as suitable for voluntary, community and social enterprises. |
Buyer name containsbuyerNames | array | Keep only notices whose buyer name contains any of these texts, for example NHS, Council, Ministry of Defence. | |
Exclude keywordsexcludeKeywords | array | Drop notices that contain any of these words or phrases. | |
Search keywords insearchIn | string | titleAndDescription | Title and description (incl. lot titles and the main CPV description), or the title only. Options: titleAndDescription, title |
Region filter: include UK-wide noticesincludeNationwide | boolean | true | With a region filter, also keep notices delivered across the whole UK. |
Include updates and amendmentsincludeUpdates | boolean | true | Keep update notices (for example a tender notice with a changed deadline). They are marked isUpdate = true. |
Only the latest version of each noticelatestVersionOnly | boolean | true | Find a Tender publishes every update as a new notice. When on, a run outputs only the newest notice per procurement and notice type (older versions in the window are skipped and not charged). |
Sourcessources | array | Find a Tender carries all Procurement Act 2023 notices (above and below threshold) since 24 February 2025. Contracts Finder still carries older procurements and call-offs. Empty = both. Options: fts, cf | |
Published from (date)publishedFrom | string | Start date, for example 2026-09-01. Overrides "Published in the last N days". | |
Published until (date)publishedTo | string | End date (inclusive), for example 2026-09-30. | |
| Alerts and output | |||
Only new notices since the last run (alerts)onlyNew | boolean | false | Remember which notices were already output for this search and skip them next time. Schedule the actor daily with a window of 2-3 days to get tender alerts. The first run outputs all matches in the date window. |
Alert memory store namestateStoreName | string | uk-tenders-state | Named key-value store that remembers output notices for "Only new" mode. Each different search keeps its own memory inside it. |
Include descriptionincludeDescription | boolean | true | Add the procurement description (up to 4,000 characters) and submission details. E-mail addresses and phone numbers are removed. |
Include lotsincludeLots | boolean | true | Add a list of lots with title, value, SME suitability, contract dates and award criteria with weights. |
Max noticesmaxItems | integer | 1000 | Stop after this many notices. 0 = up to 200,000. |
| Advanced | |||
Request timeout (seconds)requestTimeoutSecs | integer | 60 | Timeout for one API request. |
Max retriesmaxRetries | integer | 4 | Retries for network errors, rate limits and 5xx responses. Rate-limit waits follow the API's Retry-After header (2 minutes on Find a Tender, 5 minutes on Contracts Finder). |
Call it from code
Start a run and get the results in one HTTP request with the Apify API (your token is under Console, Settings, API & Integrations):
curl -X POST "https://api.apify.com/v2/acts/adamhaleworks~uk-tenders-find-a-tender-contracts-finder/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords":["software"],"noticeTypes":["tender"],"onlyOpen":true}'The run's Output tab offers 2 ready-made views; every view exports to CSV, Excel, JSON or XML:
- Tenders:
publishedDate,title,buyerName,noticeTypeLabel,deliveryRegionNames,cpvMain,deadline,daysUntilDeadline,estimatedValue,suitableForSme,source,noticeUrl - Contract awards:
publishedDate,title,buyerName,noticeTypeLabel,supplierNames,awardedValue,awardDate,contractStart,contractEnd,noticeUrl
What it costs
Free to run right now. The actor charges no fee of its own today. Apify bills only the compute a run uses against your account's platform credit, and the free Apify plan includes $5 of usage every month. For scale: building all five of our actors and test-running each once on its default input used $0.03 of credit in total (2026-10-12).
Planned: pay-per-event pricing of $0.0015 per notice in the output ($1.50 per 1,000) once the account's payout setup is finished. This page and the Apify page will show the change, and Apify notifies existing users before a price change takes effect.
With the planned price, filtered-out notices, older versions and notices already delivered in "only new" mode would not be charged. The London and South East alert above would have cost $0.16 on its first run and $0 on a quiet day.
FAQ
Does Find a Tender have an API?
Yes. Find a Tender publishes an OCDS API at /api/1.0/ocdsReleasePackages that needs no key. It filters only by update date and allows about 12 requests per 2 minutes, so keyword and CPV filtering happen on your side.
What is the difference between Find a Tender and Contracts Finder?
Find a Tender is the main UK portal for above-threshold procurement and Procurement Act 2023 notices across all four nations. Contracts Finder carries lower-value contracts in England and many award notices. They barely overlap: 2 of 197 Contracts Finder notices on a test day were also on Find a Tender.
Why are some tender deadlines empty?
Some procedures, such as the first stage of the competitive flexible procedure, only publish a deadline for requests to participate; it is returned with deadlineType requestsToParticipate. Some notices have no deadline at all.
Does it include Scottish and Welsh tenders?
Above-threshold notices from all four nations are on Find a Tender and included. Smaller contracts that appear only on Public Contracts Scotland or Sell2Wales are not.
Can I reuse the data commercially?
Both portals publish under the Open Government Licence v3.0, which allows commercial reuse with the attribution statement shown on this page.
Try it on your own data
UK public tenders and contract awards from Find a Tender and Contracts Finder in one feed. Filter by keyword, CPV, region, value, open deadline and SME suitability. Deadlines, values, lots, award criteria and suppliers (companies only). Only-new mode for daily tender alerts.
Open UK Tenders API: Find a Tender + Contracts Finder Opens the actor's page on apify.com. A free Apify account is needed to run it.