UK Public Contract Award Leads - Contracts Finder avatar

UK Public Contract Award Leads - Contracts Finder

Pricing

$2.00 / 1,000 per award notice returneds

Go to Apify Store
UK Public Contract Award Leads - Contracts Finder

UK Public Contract Award Leads - Contracts Finder

From $0.002 per award notice, no start fee. Every UK public contract AWARDED on Contracts Finder: winning supplier, value, CPV code, contract start and end date - plus the buying authority's procurement contact, email and phone. Filter by CPV, keyword, region, buyer or value. No API key.

Pricing

$2.00 / 1,000 per award notice returneds

Rating

0.0

(0)

Developer

Scrapers Delight

Scrapers Delight

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

UK Public Contract Award Leads — Contracts Finder

Every contract the UK public sector actually awarded: what it was for, what it is worth, when it ends, who won it — and the named procurement officer at the buying authority, with their email and phone number.

Official Contracts Finder OCDS data, published by the Cabinet Office under the Open Government Licence v3. No API key. No account. No login.


The measured numbers

Everything below was counted on this machine on 2026-09-16, by walking the feed to exhaustion — not estimated, and not taken from the source's documentation.

August 2026, walked to exhaustion28 pages, 2,711 award notices, 16.2 MB, cursor terminated cleanly
July 2026, walked to exhaustion34 pages, 3,356 award notices
Of the August month2,521 original awards + 190 amendments (awardUpdate, 7.0%)
Unique buying authorities509
Unique buyer email addresses860
Unique winning suppliers1,916 (from 2,971 supplier records)
Total value awarded in the month£5,354,598,580
Median award£100,608
Contracts whose end date is still in the future2,453 of 2,711 (90.5%)
Run rate2,700–3,400 notices/month, ≈35,000/year
Historyaddressable back to 2015 (see honest limits)

Field fill — counted, not claimed

Three independent real samples. The headline column is a full calendar month walked to exhaustion (n=2,711). The second is the 200 notices shipped as this Actor's test fixtures (published 2026-09-15). The third is a real run of this Actor over the 7 days to 2026-09-16 (n=741).

fieldAug 2026 (n=2,711)2026-09-15 (n=200)live run, 7 days (n=741)
buyerEmail100.0%100.0%100.0%
buyerPostcode · buyerStreet · buyerName100.0%100.0%100.0%
buyerContactName (a named person)69.8%54.0%52.8%
buyerPhone51.6%35.0%37.8%
buyerLocality100.0%73.5%—
awardValueGbp · awardDate · contractStartDate · contractEndDate100.0%100.0%100.0%
bidDeadline · cpvCode · cpvDescription · title100.0%100.0%100.0%
supplierName100.0%100.0%100.0%
supplierAddress99.2%100.0%—
supplierPostcode (regex-extracted from the address blob)91.1%89.0%90.8%
supplierIsSme78.9%83.5%—
supplierCompanyNumber (Companies House)33.7%40.5%41.7%
procurementCategory98.9%99.5%—
procurementMethodDetails87.3%95.0%—
tenderValueGbp80.4%91.0%—
procurementMethod76.4%90.0%—
deliveryRegions54.5%40.0%—
deliveryPostcodes43.4%39.5%—
additionalCpvCodes13.3%12.5%—

buyerContactName and buyerPhone swing by ~15 points between August and September — September is consistently the weaker month in both independent September samples. Every figure is printed here rather than only the flattering one, and every run writes its own measured fill into RUN_SUMMARY.fieldFillPercent so you can check the window you actually bought.

The one thing you must know before buying this

The winning supplier is named, but is NOT contactable. There is no email and no phone for the company that won the contract — not "sparse", absent. Verified three ways:

  • 0 of 2,971 supplier records in a full month carry a contactPoint object at all
  • 0 of 2,971 contain an @ anywhere in the raw record
  • the public notice HTML page adds nothing — the only address on it is the buyer's

So this Actor advertises no supplierEmail or supplierPhone column. A column that is null everywhere gets cut, not shipped.

The contactable side of an award notice is the BUYER — the public body that just signed. That side is 100% email, 69.8% a named individual, 51.6% direct phone. 52.6% of the addresses are firstname.lastname@ style; the rest are role inboxes (procurement@, tenders@, commercial.team@). Top domains in the measured month: suffolk.gov.uk (258), nhs.net (189), leicester.gov.uk (98), defra.gov.uk (83).

If you sell into UK government, that is the list. If you wanted contact details for the winning vendors, this feed does not have them and neither does anything else on the site.

What one row looks like

A real row from the verified walk:

{
"releaseId": "e22d7e44-5d3d-4479-85ad-4028d8f954c5-912492",
"ocid": "ocds-b5fd17-687d393f-098a-40c5-a5ad-17a5de6262a6",
"noticeUrl": "https://www.contractsfinder.service.gov.uk/Notice/e22d7e44-5d3d-4479-85ad-4028d8f954c5",
"noticeType": "awardUpdate",
"isAmendment": true,
"publishedDay": "2026-08-28",
"title": "Provision of Jira and Confluence cloud hosted software 2026",
"cpvCode": "48000000",
"cpvDescription": "Software package and information systems",
"procurementCategory": "services",
"procurementMethodDetails": "Call-off from a framework agreement",
"deliveryRegions": ["London"],
"awardValueGbp": 232204.08,
"awardCurrency": "GBP",
"awardDate": "2026-04-24",
"contractStartDate": "2026-04-24",
"contractEndDate": "2027-04-23",
"contractDurationDays": 364,
"bidDeadline": "2026-04-01",
"smeSuitable": false,
"buyerName": "Government Commercial Agency",
"buyerContactName": "Greg Marsh",
"buyerEmail": "info@gca.gov.uk",
"buyerPhone": "07772271119",
"buyerStreet": "39 Old Hall Street",
"buyerLocality": "Liverpool",
"buyerPostcode": "L3 9PP",
"supplierCount": 1,
"supplierName": "AUTOMATION CONSULTANTS LIMITED",
"supplierCompanyNumber": "04047568",
"supplierAddress": "Field Farm Barn RG7 4DA GB",
"supplierPostcode": "RG7 4DA",
"supplierIsSme": false
}

Who buys this

  • Bid-writing and tender consultancies — contractEndDate is present on 100% of rows and 90.5% of it is in the future. That is a dated pipeline of re-tenders, with the incumbent and the price already attached.
  • Vendors selling into the public sector — filter by cpvPrefixes to your category, get the named buyer who has just proven they have budget and signing authority for exactly that thing.
  • SMEs hunting subcontract work — supplierName plus supplierCompanyNumber tells you who won the prime; smeSuitable (59.4% true) tells you which frameworks were built for firms your size.
  • Market and competitor analysis — 1,916 named suppliers a month against £5.35bn of spend, with CPV codes, so you can size a category or track a rival's public-sector wins.

Filters

All filtering happens before delivery, so a filtered-out notice is never charged.

inputwhat it does
lastDaysRolling window; leave the dates empty. Default 7.
publishedFrom / publishedToExplicit window. publishedTo is inclusive here (see below).
cpvPrefixes["45"] construction, ["72","48"] IT, ["85"] health. Matches the main and additional CPV codes.
keywordsTitle or description contains any of these.
buyerNameIncludese.g. NHS, County Council, Ministry of.
regionsDelivery region — but see the honest limit below.
minAwardValueGbp / maxAwardValueGbpValue band.
includeAmendmentsKeep or drop the 7.0% awardUpdate rows.
maxNoticesHard cap on rows delivered and charged. Default 1,000.

Honest limits

1. publishedTo is exclusive at the source — this Actor fixes it. Asking the API for publishedFrom=2026-09-15&publishedTo=2026-09-15 returns 0 releases and no error, which reads exactly like "nothing was awarded that day". This Actor sends the following day as the bound, so the date you type is the date you get. If you call the API yourself, this will cost you a day.

2. The source rate-limits hard, and that sets the runtime. Contracts Finder allows roughly 12 requests per 120 seconds, then answers

HTTP 429 — Rate limit of 12 exceeded. Please retry after 120 seconds.
with Retry-After: 120. Enforcement lags the breach by tens of seconds, so a burst that looks fine gets blocked later. Measured: 40 requests in 6.6s all returned 200, and the next request was blocked. August at 6s pacing walked in 323s but ate one 120s penalty; July at the shipped 10s default walked 34 pages / 3,356 notices in 381s with zero 429s. Measured throughput is therefore about 530 rows per minute:

windownoticeswall-clock
the daily bounded run (40 notices)404s, measured
one week~740~80s, measured
one month2,700–3,400~6 min, measured
one year~35,000~1 hour

The Actor honours Retry-After and permanently widens its own pace after any 429 rather than buying a second penalty a few pages later.

3. There is no total anywhere in the feed. The OCDS envelope publishes no count, so progress cannot be shown, a run cannot be pre-sized, and there is nothing to floor-assert a walk against. The only end-of-data signal is the absence of links.next. That is why a page that fails to arrive is reported as a truncation (RUN_SUMMARY.unreachable, and the run is marked failed) and never as the end of the window — a short register that reads as complete is the one bug you could not see.

4. ocid is not unique. Amendments reuse the ocid of the award they amend — 2,711 releases collapse to 2,616 ocids in one month. This Actor dedupes on releaseId. Deduping on ocid, which is the obvious choice, silently drops every amendment.

5. Pre-2017 dates are unreliable. The archive is addressable back to 2015, but the backfill has date drift: a 2015-03-01 → 2015-03-08 window returns records whose own release date is 2016-11-18. From 2018 onward the dates align exactly. Don't trust the date filter on the 2015–2016 tail.

6. deliveryRegions is a filter that also filters by silence. Only 54.5% of notices publish a region at all, so regions: ["London"] also drops every notice that left the field blank.

7. A literal - is not a value. The feed publishes placeholder strings — -, N/A, TBC — in real fields. On 2026-09-15, 53 of 200 buyer records had locality: "-". Counted naively that column is 100% full; it is 73.5%. Every field goes through a placeholder filter before it is counted or delivered, which is why the numbers in this README are lower than a raw count would give.

8. Supplier addresses contain literal newlines. 96 of the 200 captured supplier addresses have \r\n inside a single free-text field. Exported straight to CSV they break the row. They are normalised here, and the postcode is regex-extracted (91.1% recoverable).

9. 3.0% of awards publish a value of exactly £0 (82 of 2,711). That is the source's own figure, not a missing value — but any minAwardValueGbp/maxAwardValueGbp filter drops rows whose value is genuinely absent rather than treating them as zero.

Pricing

$0.002 per award notice delivered. No run-start fee.

what you wantnoticescost
One working day of UK awards~130~$0.26
A week (measured: 741)~740~$1.48
A full month (measured: 2,711 and 3,356)2,700–3,400$5.42–$6.71
The default capped run1,000$2.00
A full year~35,000~$70
Filtered to one CPV category for a monthusually 50–300cents

Notices excluded by your filters are never delivered and never charged. Duplicates are dropped before billing. A run that finds nothing costs nothing. The cap is checked against rows produced, not batches flushed, so maxNotices: 40 delivers and bills exactly 40.

Source and licence

Data comes from the Contracts Finder OCDS search endpoint at contractsfinder.service.gov.uk/Published/Notices/OCDS/Search — the same public feed anyone can call in a browser, with no key and no account. The envelope declares its own publisher (Cabinet Office) and licence: Open Government Licence v3 (nationalarchives.gov.uk/doc/open-government-licence/version/3/), reproduced in every RUN_SUMMARY.

Buyer contact details are published by the authorities themselves as the official route for suppliers to contact them about that procurement. They are business contact details for a public body, not personal consumer data — but how you use them for outreach is still your responsibility under UK GDPR and PECR.