UK Government Tenders - Find a Tender & Contracts Finder
Pricing
from $3.00 / 1,000 per results
UK Government Tenders - Find a Tender & Contracts Finder
UK public tenders and contract awards from the official Find a Tender and Contracts Finder APIs: buyer, CPV, value, deadline, region and awarded companies. Keyword, CPV, buyer, region, value and date filters; cross-service dedupe; OGL v3. Unofficial; not affiliated with the UK Government.
Pricing
from $3.00 / 1,000 per results
Rating
0.0
(0)
Developer
JP Open Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
UK public tenders and contract awards from both official services in one table: buyer, CPV codes, value, deadline, region, stage and the awarded companies, one row per procurement.
The UK publishes procurement notices on Find a Tender (the central platform under the Procurement Act 2023) and on Contracts Finder. This Actor reads the official OCDS APIs of both, compiles every notice about the same procurement into one row (so a row keeps the value from the tender notice and the supplier from the award notice), merges a procurement that appears on both services, and filters by keyword, CPV, buyer, region, value, dates and stage.
Unofficial tool. Not affiliated with or endorsed by the UK Government, the Cabinet Office or Crown Commercial Service. Data: Contains public sector information licensed under the Open Government Licence v3.0. No contact names, e-mails, phone numbers or addresses are returned, and supplier names that may belong to a person are withheld (see below).
Quick start — verified input
Run on 2026-10-04 on the Apify platform: 20 rows, 2 requests, under a minute. An empty input {} runs exactly this.
{"daysBack": 7,"maxItems": 20}
IT tenders still open for bids, over £100k, in London or the South East:
{"keywords": ["software", "cyber security"],"cpvCodes": ["72000000"],"regions": ["London", "South East"],"valueMin": 100000,"onlyOpen": true,"daysBack": 30,"maxItems": 200,"maxApiRequests": 150}
Common input mistakes
| Wrong | Right | Why |
|---|---|---|
"cpvCodes": ["software"] | "keywords": ["software"] or "cpvCodes": ["72000000"] | CPV codes are digits; 72000000 matches every code under 72. |
"regions": ["Manchester"] | "regions": ["North West"] | Regions are the 12 UK regions (or England, or codes such as UKI). |
"valueMin": "£50k" via the form | "valueMin": 50000 | Whole pounds. Via the API, "£50,000" and "50k" are accepted. |
"publishedFrom": "last week" | "daysBack": 7 | Dates are YYYY-MM-DD (UTC), DD/MM/YYYY, today or yesterday. |
"daysBack": 90 with the default budget | also raise maxApiRequests | One request returns 100 notices; a working day is about 7 requests. |
An invalid value stops the run before any request, with a message that names the field and lists the valid values.
Empty results?
A window over a weekend or bank holiday can hold only a handful of notices, and combined filters (keyword + CPV + region + value) can exclude everything. The run then ends successfully with 0 rows. Widen daysBack, drop a filter, or check RUN_SUMMARY in the key-value store: it shows how many notices each service returned.
What one row contains
title, buyerName, buyerRegion, stage (planning / tender / award), status, isOpenForBids, noticeTypes (Find a Tender UK1–UK17), mainCpvCode, cpvCodes, procurementCategory, procurementMethodDetails, valueAmount, valueMinAmount, valueCurrency, valuePlaceholder, tenderDeadline, contractStart, contractEnd, deliveryRegions, suitableForSme, suitableForVcse, awards (each with status, date, value and suppliers), awardedSuppliers, awardedSupplierIds (Companies House numbers as GB-COH-…), awardedValue, awardDate, sources, foundOnBothSources, ocids, noticeUrl, noticeUrls, firstReleaseAt, lastUpdatedAt, matchedKeywords, plus source, sourceUrl, license and retrievedAt on every row.
A value of £0 or £1 (a placeholder some buyers type) is returned as valueAmount: null with valuePlaceholder: true.
How it reads the services
- Both APIs are read newest first. With
maxItems, a service stops as soon as it has that many matching procurements, so the Quick start needs one page per service. Without a smallmaxItems, the whole window is read. - Measured on 2026-10-01 (one working day): 649 notices (Find a Tender 452, Contracts Finder 197) became 616 procurements in 7 requests and 73 seconds; 2 procurements were found on both services and merged.
- Requests go one at a time, at least 11 seconds apart, and a
429is retried only after the wait the service asks for (Retry-After). Contracts Finder signals an exceeded limit with HTTP 403 and asks for a 5-minute pause; that service then stops and the run keeps what it has. - Keywords, CPV, buyer, region, value, closing date and stage are filtered here, after reading. Neither API offers keyword search.
- If a service fails mid-run, the rows from what was read are kept and the run succeeds with
complete: false. If nothing could be read at all, the run fails visibly.
Personal data and supplier names
Contact points, addresses and the notice description text are never returned (buyers' free text can name people). Supplier names are shown only when they are clearly an organisation: a Companies House, charity, NHS or other organisations-only registry id, a name ending in a legal form (Ltd, Limited, PLC, LLP, CIC, GmbH …), or a public body (Council, University, NHS …). Everything else, including sole traders, is withheld as name: null, nameWithheld: true and counted in suppliersWithheld; the award value is still returned. On 2026-10-01 this withheld 111 of 667 supplier entries (17%), mostly companies whose name lacks "Ltd". Award values are not affected.
Honest limits
- A row reflects the notices read in the window. A procurement published last month whose award appeared this week carries what the award notice says.
- Find a Tender selects by "last updated", Contracts Finder by publication date; dates are UTC days.
- Matching across services uses title + buyer and merges a pair only when it is unambiguous, so some duplicates can remain.
- Delivery regions come from Find a Tender NUTS codes and Contracts Finder region names; notices with neither are dropped by a region filter.
Pricing
Pay per row stored in the dataset. A run stops by itself when it reaches the maximum charge you set.