UK Government Tenders - Find a Tender & Contracts Finder avatar

UK Government Tenders - Find a Tender & Contracts Finder

Pricing

from $3.00 / 1,000 per results

Go to Apify Store
UK Government Tenders - Find a Tender & Contracts Finder

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

JP Open Data

Maintained by Community

Actor 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

WrongRightWhy
"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": 50000Whole pounds. Via the API, "£50,000" and "50k" are accepted.
"publishedFrom": "last week""daysBack": 7Dates are YYYY-MM-DD (UTC), DD/MM/YYYY, today or yesterday.
"daysBack": 90 with the default budgetalso raise maxApiRequestsOne 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 small maxItems, 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 429 is 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.