UK Public Contract Award Leads - Contracts Finder
Pricing
$2.00 / 1,000 per award notice returneds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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 exhaustion | 28 pages, 2,711 award notices, 16.2 MB, cursor terminated cleanly |
| July 2026, walked to exhaustion | 34 pages, 3,356 award notices |
| Of the August month | 2,521 original awards + 190 amendments (awardUpdate, 7.0%) |
| Unique buying authorities | 509 |
| Unique buyer email addresses | 860 |
| Unique winning suppliers | 1,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 future | 2,453 of 2,711 (90.5%) |
| Run rate | 2,700–3,400 notices/month, ≈35,000/year |
| History | addressable 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).
| field | Aug 2026 (n=2,711) | 2026-09-15 (n=200) | live run, 7 days (n=741) |
|---|---|---|---|
buyerEmail | 100.0% | 100.0% | 100.0% |
buyerPostcode · buyerStreet · buyerName | 100.0% | 100.0% | 100.0% |
buyerContactName (a named person) | 69.8% | 54.0% | 52.8% |
buyerPhone | 51.6% | 35.0% | 37.8% |
buyerLocality | 100.0% | 73.5% | — |
awardValueGbp · awardDate · contractStartDate · contractEndDate | 100.0% | 100.0% | 100.0% |
bidDeadline · cpvCode · cpvDescription · title | 100.0% | 100.0% | 100.0% |
supplierName | 100.0% | 100.0% | 100.0% |
supplierAddress | 99.2% | 100.0% | — |
supplierPostcode (regex-extracted from the address blob) | 91.1% | 89.0% | 90.8% |
supplierIsSme | 78.9% | 83.5% | — |
supplierCompanyNumber (Companies House) | 33.7% | 40.5% | 41.7% |
procurementCategory | 98.9% | 99.5% | — |
procurementMethodDetails | 87.3% | 95.0% | — |
tenderValueGbp | 80.4% | 91.0% | — |
procurementMethod | 76.4% | 90.0% | — |
deliveryRegions | 54.5% | 40.0% | — |
deliveryPostcodes | 43.4% | 39.5% | — |
additionalCpvCodes | 13.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
contactPointobject 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 —
contractEndDateis 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
cpvPrefixesto your category, get the named buyer who has just proven they have budget and signing authority for exactly that thing. - SMEs hunting subcontract work —
supplierNameplussupplierCompanyNumbertells 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.
| input | what it does |
|---|---|
lastDays | Rolling window; leave the dates empty. Default 7. |
publishedFrom / publishedTo | Explicit window. publishedTo is inclusive here (see below). |
cpvPrefixes | ["45"] construction, ["72","48"] IT, ["85"] health. Matches the main and additional CPV codes. |
keywords | Title or description contains any of these. |
buyerNameIncludes | e.g. NHS, County Council, Ministry of. |
regions | Delivery region — but see the honest limit below. |
minAwardValueGbp / maxAwardValueGbp | Value band. |
includeAmendments | Keep or drop the 7.0% awardUpdate rows. |
maxNotices | Hard 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.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:
| window | notices | wall-clock |
|---|---|---|
| the daily bounded run (40 notices) | 40 | 4s, measured |
| one week | ~740 | ~80s, measured |
| one month | 2,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 want | notices | cost |
|---|---|---|
| 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 run | 1,000 | $2.00 |
| A full year | ~35,000 | ~$70 |
| Filtered to one CPV category for a month | usually 50–300 | cents |
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.