UK Tenders & Contract Search — Contracts Finder & Find a Tender avatar

UK Tenders & Contract Search — Contracts Finder & Find a Tender

Pricing

from $33.50 / 1,000 contract records

Go to Apify Store
UK Tenders & Contract Search — Contracts Finder & Find a Tender

UK Tenders & Contract Search — Contracts Finder & Find a Tender

Search UK public-sector tenders and contract awards from both Contracts Finder and Find a Tender by keyword, CPV code, SME/VCSE suitability, region, value and open deadline. Buyer, value, deadline, winners, documents. Keyless, OGL v3.0, no personal data.

Pricing

from $33.50 / 1,000 contract records

Rating

0.0

(0)

Developer

NexGen Signal

NexGen Signal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Share

Both official UK notice services in one search. No API key. Pay per notice.

This actor searches the UK government's two public procurement services — Contracts Finder (lower-value notices) and Find a Tender (higher-value, above-threshold notices, including everything published under the Procurement Act 2023) — and returns one clean record per notice: open tenders and contract awards. Each record gives the buyer organisation, title and description, CPV codes, value, bidding deadline, contract dates, SME/VCSE suitability, delivery region, document links and — on awards — the winning supplier organisations and award value. Both services are read through their official Open Contracting (OCDS) APIs under the Open Government Licence v3.0, and no natural-person contact data is ever emitted.

Who buys this and for what job

  • Bid and business-development teams finding UK tenders they can still respond to, by keyword, CPV code and stage.
  • Tender-alert and procurement-data products combining Contracts Finder and Find a Tender notices in one feed.
  • Market analysts sizing UK public-sector demand and award patterns.

Buyers usually search for this as "uk tenders" or "contracts finder".

What you can do with it

  • Find open tenders by keyword across the whole UK: {"keywords": ["software"], "openOnly": true} returns software opportunities still open for bids from both services.
  • Filter like a bid team: CPV industry codes (main and additional), goods / services / works, notices marked suitable for SMEs or VCSEs, buyer or delivery location (town, postcode area or region such as London or North West), and a value range.
  • Track awards: set stages to award to see who won what, with supplier names (organisations only) and award values.
  • Choose the service: search both (default), or only Contracts Finder or only Find a Tender with sources.
  • A notice published on both services is delivered once, and an amended notice only in its newest version — you never pay twice for one procurement.

Question: which UK IT and software tenders (CPV 72 IT services, 48 software) published in the last 7 days are still open for bids?

{"sources": ["contractsFinder", "findATender"], "cpvCodes": ["72", "48"], "openOnly": true, "publishedWithinDays": 7, "stages": ["tender"], "maxRecords": 10}

On 30 Sep 2026 this run took 14 seconds and returned 10 open tenders (3 from Contracts Finder, 7 from Find a Tender) for 10 × $0.05 = $0.50 on Apify's Free plan. Its status said: "Stopped at maxRecords (10) before the whole window was searched - more matching notices may exist … Raise maxRecords to get them." That is the point of a quick search: the newest matches, fast — not all of them.

Quick recent searchComprehensive historical search
SetpublishedWithinDays 1–7, small maxRecordspublishedFrom (or publishedWithinDays up to 3650) and a maxRecords above the number of matches you expect
Answers"What is new right now?""Everything that matched in this period"
TimeSeconds to about a minuteContracts Finder is quick (about 2 seconds per 100 notices). Find a Tender has no search, so every notice updated in the window is read: about 400 a day, roughly 25–30 seconds per day searched when few notices match (a 3-day window took 90 seconds on 30 Sep 2026; 30 days is about 15 minutes).
LimitStops at maxRecordsLong Find a Tender windows can pass the default 1-hour run timeout — raise the timeout or split the period into several runs

How to tell whether a run is complete. Only a run whose status ends "Whole window searched (…)" — and whose RUN_RECEIPT has "whole_window_searched": true — has read every notice in the window. A run that stopped at maxRecords says so and records "stopped_at_max_records": true; a run where a service failed says "results are incomplete". A run that times out or is aborted leaves "search_finished": false in the receipt: whatever it delivered is incomplete. Records delivered are charged in every case, and nothing else.

Repeated runs one after another can hit Contracts Finder's rate limit; the run then switches to Apify Proxy and carries on, but more slowly (on 30 Sep 2026 a rate-limited page took about 3 minutes).

Sample output

Sample output — UK Government Tenders & Contracts Search

Real rows from an earlier live run of this actor (Contracts Finder, first 5 rows, selected columns).

One full record from the same run, exactly as delivered:

{
"record_id": "ocds-b5fd17-7733be28-4785-4fda-8af5-0f55e749bc3d",
"ocid": "ocds-b5fd17-7733be28-4785-4fda-8af5-0f55e749bc3d",
"notice_id": "0c760499-206b-4fd5-8e53-217eecfc55af-915580",
"stage": "tender",
"release_date": "2026-09-25T16:30:52+01:00",
"title": "Taxi and MPV (1-8 seats) Passenger Assistant - Taxi and MPV (1-8 seats) Passenger Assistant",
"description": "Vehicle type: 06 Seats required\r\nPassenger Assistant Required: Yes \r\n \r\nProposed Taxi Route:\r\nFrom: BN23 5TL, BN23 6TG\r\nTo: Summerdown Secondary School \r\n\r\nFrequency: Monday to Friday \r\nDaily School Time: 08:50 - 14:50 \r\n This opportunity has been distributed on SProc.net",
"tender_status": "active",
"cpv_code": "60000000",
"cpv_description": "Transport services (excl. Waste transport)",
"procurement_category": "services",
"procurement_method": "Restricted procedure (above threshold)",
"value_amount": null,
"value_currency": null,
"deadline": "2026-09-30T10:00:00+01:00",
"buyer_name": "East Sussex County Council",
"buyer_id": "GB-CFS-334419",
"buyer_locality": "Lewes",
"buyer_region": null,
"buyer_postcode": "BN7 1UE",
"buyer_country": "United Kingdom",
"award_value_amount": null,
"award_value_currency": null,
"award_date": null,
"award_status": null,
"supplier_names": [],
"supplier_ids": [],
"source": "UK Contracts Finder (OCDS)",
"source_url": "https://www.contractsfinder.service.gov.uk/Notice/0c760499-206b-4fd5-8e53-217eecfc55af-915580",
"licence": "UK Contracts Finder (Crown Commercial Service / Cabinet Office). Reused under the Open Government Licence v3.0 (OGL v3.0) — free reuse with attribution. Reformatted to org-level records; values unmodified.",
"attribution": "Contains public sector information licensed under the Open Government Licence v3.0. Source: UK Contracts Finder.",
"disclaimer": "Decision-record of a published UK procurement notice (Contracts Finder OCDS). Point-in-time facts as published — not a monitoring, alerting, or bid-writing service. Verify against the official notice before acting.",
"observed_at": "2026-09-25T17:26:11Z"
}

Use it from your code or an AI agent

One API call that returns the rows (replace YOUR_APIFY_TOKEN; the body is the run input):

curl -X POST "https://api.apify.com/v2/acts/nexgensignal~uk-contract-opportunity-records/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"sources": ["contractsFinder", "findATender"], "cpvCodes": ["72", "48"], "openOnly": true, "publishedWithinDays": 7, "stages": ["tender"], "maxRecords": 10}'

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("nexgensignal/uk-contract-opportunity-records").call(run_input={'sources': ['contractsFinder', 'findATender'], 'cpvCodes': ['72', '48'], 'openOnly': True, 'publishedWithinDays': 7, 'stages': ['tender'], 'maxRecords': 10})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)

AI agents (MCP): add https://mcp.apify.com?tools=nexgensignal/uk-contract-opportunity-records as an MCP server in Claude, Cursor or any MCP client and sign in with your Apify account. The agent gets this search as a tool, runs it with the inputs above and reads the results. Billing is the same per-record price; set a maximum cost per run to cap spend.

Pricing

EventFree planBronzeSilverGold / Platinum / Diamond
contract_record$0.05$0.045$0.04$0.0335

Delivered before charged. Blocked runs and empty results cost nothing.

Input

FieldWhat it does
sourcescontractsFinder and/or findATender. Both by default.
keywordsWords to find in the title, description or buyer name. Every word of one search must appear; several searches are combined.
cpvCodesCPV codes or their start (72 IT services, 48 software, 45 construction). Main and additional codes both count.
categoriesgoods, services, works.
suitableForsme and/or vcse — notices the buyer marked suitable (on Find a Tender: any lot marked suitable).
locationsTown, region or postcode area of the buyer or the delivery place (London, North West, Wales, M1).
minValue / maxValueValue range in GBP (uses the award value for award notices).
openOnlyOnly notices whose bidding deadline is still in the future (award notices drop out).
publishedWithinDays / publishedFromHow far back to search. With no date set: Contracts Finder searches the last 90 days when any filter is on; Find a Tender always searches the last 30 days.
stagestender (opportunities) and/or award (contract awards).
cpvPrefixOlder single-code field; still works.
maxRecordsMost notices delivered and billed in one run.

Default changed on 30 Sep 2026: if you leave maxRecords out, a run now returns up to 10 records (it was 500). Set maxRecords yourself to get more — the maximum is unchanged.

Filters combine (a notice must pass all of them). Both services are read newest first and the run takes one matching notice from each in turn, so even a 10-record search shows both. A search with no matches costs nothing.

Example — the newest open IT and software tenders from the last 7 days (the quick search described above):

{"sources": ["contractsFinder", "findATender"], "cpvCodes": ["72", "48"], "openOnly": true, "publishedWithinDays": 7, "stages": ["tender"], "maxRecords": 10}

Output

One JSON object per notice, the same fields from both services. Real Find a Tender example from a live run (description shortened):

{
"record_id": "ocds-h6vhtk-0779f2",
"ocid": "ocds-h6vhtk-0779f2",
"notice_id": "092091-2026",
"stage": "tender",
"release_date": "2026-09-29T18:54:51+01:00",
"title": "Day Opportunities Quality Framework",
"description": "Wigan Council is seeking to establish a Day Opportunities Quality Framework to deliver high-quality, person-centred support for adults with care and support nee…",
"tender_status": "active",
"cpv_code": "98000000",
"cpv_description": "Other community, social and personal services",
"procurement_category": "services",
"procurement_method": "Competitive flexible procedure",
"value_amount": 64000000,
"min_value_amount": null,
"value_currency": "GBP",
"deadline": "2026-10-27T12:00:00Z",
"contract_start": "2027-02-01T00:00:00Z",
"contract_end": "2035-01-31T23:59:59Z",
"suitable_for_sme": true,
"suitable_for_vcse": true,
"additional_cpv_codes": [],
"delivery_locations": [
"UKD36",
"North West"
],
"document_urls": [
"https://www.find-tender.service.gov.uk/Notice/092091-2026"
],
"buyer_name": "Wigan Council",
"buyer_id": "GB-PPON-PCGG-6481-TZPW",
"buyer_locality": "Wigan",
"buyer_region": "UKD36",
"buyer_postcode": "WN1 1YN",
"buyer_country": "United Kingdom",
"buyer_region_name": "North West",
"award_value_amount": null,
"award_value_currency": null,
"award_date": null,
"award_status": null,
"supplier_names": [],
"supplier_ids": [],
"lots_count": 3,
"legal_basis": "Procurement Act 2023",
"notice_type": "UK4 Tender notice",
"keyword_match": "digital",
"source": "UK Find a Tender (OCDS)",
"source_url": "https://www.find-tender.service.gov.uk/Notice/092091-2026",
"licence": "UK Find a Tender service (Cabinet Office). Reused under the Open Government Licence v3.0 (OGL v3.0) — free reuse with attribution. Reformatted to org-level records; values unmodified.",
"attribution": "Contains public sector information licensed under the Open Government Licence v3.0. Source: UK Find a Tender service.",
"disclaimer": "Decision-record of a published UK procurement notice (Find a Tender OCDS). Point-in-time facts as published — not a monitoring, alerting, or bid-writing service. Verify against the official notice before acting.",
"observed_at": "2026-09-29T19:09:50Z"
}

Contracts Finder records carry the same fields (legal_basis, notice_type, lots_count and buyer_region_name are Find a Tender only and empty there). An unbilled RUN_RECEIPT records, per service, the robots check, the route used, pages and notices read and records delivered, plus older versions and double-published notices skipped, and whether charged equals delivered.

Field reference

  • Identity: record_id / ocid (the OCDS contracting-process id), notice_id (the notice id on its service), stage, release_date, notice_type (e.g. UK4 Tender notice, UK6 Contract award notice), legal_basis (e.g. Procurement Act 2023).
  • What is being bought: title, description (both scrubbed of any contact data), cpv_code, cpv_description, additional_cpv_codes, procurement_category, procurement_method, lots_count.
  • Money and timing: value_amount (net of VAT where the service gives both), min_value_amount, value_currency, deadline, contract_start, contract_end.
  • Who can bid: suitable_for_sme, suitable_for_vcse.
  • Buyer organisation and place: buyer_name, buyer_id, buyer_locality, buyer_region (Find a Tender gives an ITL code such as UKD36), buyer_region_name, buyer_postcode, buyer_country, delivery_locations (postcodes, region codes and region names).
  • Award detail: award_value_amount, award_value_currency, award_date, award_status, supplier_names / supplier_ids (organisation registrations).
  • Provenance: source, source_url (the official notice), document_urls, keyword_match, licence, attribution, disclaimer, observed_at.

How a run works

The run checks each service's robots posture, then reads both OCDS feeds newest first, one page at a time: Contracts Finder's search (per stage, with your date window) and Find a Tender's release feed (by last-updated date). Every notice is mapped to the same org-level record and tested against your filters on our side (neither service filters by keyword, CPV or place). Matching notices are delivered before they are charged, alternating between the services, until maxRecords is reached or both windows are read.

Both services rate-limit. Contracts Finder is read about one page every 1.5 seconds; Find a Tender allows 12 requests a minute, so it is read one page (100 notices) about every 5.5 seconds. If either answers "too many requests", the run switches that service to Apify Proxy and carries on. Find a Tender publishes about 400 notices a day, so a narrow search (few matches) takes roughly half a minute per day searched there — about 15 minutes for the default 30 days; a common search reaches maxRecords in well under a minute. The final status says whether the whole window was searched or the run stopped at maxRecords.

Cost guidance

One contract_record per delivered notice: cost = notices delivered × your plan's per-record price. 1,000 notices is $50 (Free) / $33.50 (Gold). Older versions of amended notices and notices already delivered from the other service are skipped and not charged.

Honest limitations

  • UK only. Contracts Finder (England plus UK-wide notices) and Find a Tender (whole UK). Scotland's, Wales's and Northern Ireland's own portals are not read; their above-threshold notices appear on Find a Tender.
  • A capped run is not a complete run. A run that stops at maxRecords has not read the whole window; its status and receipt say so (see Quick recent search or comprehensive historical search).
  • Point-in-time. Each record is the notice as published at retrieval; statuses and awards can change. Re-run to refresh.
  • Org-level only. No buyer contact person, email or phone is emitted — by design. Find a Tender's free-text submission instructions (which often name an officer's email) are not copied.
  • Filters run on our side. Neither service filters by keyword, CPV, place or value, so those are checked on each notice as it is read; long windows on Find a Tender take time (see above).
  • Find a Tender windows by last update. Its feed is ordered and windowed by when a notice was last updated, so an older notice updated recently can appear.
  • Double-published notices are matched by deadline day (tenders) or award value (awards) plus title words; a pair whose titles differ a lot can still come through twice.
  • Award values are filled only where the service publishes them (on Find a Tender, the award or the signed contract).

Open Government Licence v3.0 (carried on every record)

Both services are published by the Cabinet Office under the Open Government Licence v3.0, which permits free commercial reuse with attribution; each OCDS response names the licence. Every record carries the attribution for its service:

Contains public sector information licensed under the Open Government Licence v3.0. Source: UK Contracts Finder. (or: Source: UK Find a Tender service.)

These are decision-records of published procurement notices — point-in-time facts, not a monitoring, alerting, or bid-writing service. Verify against the official notice before acting.

No person data — by construction

OCDS releases carry a buyer contact point (a named official, their email and phone) under parties[].contactPoint. This actor maps only organisation-level fields (buyer name/id, organisation address locality/region/postcode/country, supplier organisation name/id). The contact point is used only to know which strings to remove: every free-text field (title and description) is scrubbed before it is delivered — any known contact string, and any email address or phone-number pattern, is redacted. Acceptance tests feed notices containing a person's name, email and phone (including real Find a Tender releases with synthetic contacts) and assert none of it survives; live test runs on both services delivered 0 records containing an email address.

Differentiation

Distinct from the sibling EU Tender Bid Signals (nexgensignal/eu-tender-bid-signals), which reads the EU's Tenders Electronic Daily (TED) across member states. This actor is UK procurement specifically — Contracts Finder and Find a Tender, in native OCDS. Run both for UK + EU coverage.

The NexGen Signal family

Sources: UK Contracts Finder and UK Find a Tender service (Cabinet Office) via their OCDS APIs. Contains public sector information licensed under the Open Government Licence v3.0. Reformatted to org-level records; values verbatim; no natural-person contact data emitted.