find-tender.service.gov.uk API: Search UK tenders
Finds open UK public-sector tender notices on Find a Tender matching keywords, optionally filtered by contract region, estimated value and closing date, newest first.
Unofficial. Not affiliated with or endorsed by find-tender.service.gov.uk.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Region optional
region UK contract region in words, for example London or Scotland. Defaults to all regions.
all (default)
- Keywords, required
keywords Words to find in tender notices, for example social care.
social care
- Max Results optional
max_results Maximum tender notices to return, for example 25; maximum 100.
21
Whole number from 1 to 100. Default
25.- Closing After optional
closing_after Earliest closing date (inclusive), YYYY-MM-DD, for example 2026-10-01. Defaults to today in the UK.
Not set
- Max Value (GBP) optional
max_value_gbp Maximum estimated contract value in GBP, for example 5000000. Leave blank for no maximum.
Not set
Number 0 or more.
- Min Value (GBP) optional
min_value_gbp Minimum estimated contract value in GBP, for example 100000. Defaults to no minimum.
0 (default)
Number 0 or more.
Input as JSON
{ "keywords": "social care", "max_results": 21}Output
{ "tenders": [ { "title": "Framework Agreement for Training Courses for Children's and Adults Social Care Teams", "cpv_codes": [ "80000000", "85000000" ], "notice_id": "091596-2026", "notice_link": "https://www.find-tender.service.gov.uk/Notice/091596-2026" , "procedure_type": "Open procedure", "publication_date": "2026-09-28", "closing_date_time": "2026-10-27T12:00:00+00:00", "short_description": "Powys County Council (the Council) is commissioning training courses for Adults and Children's services funded by the Social Care Wales Workforce Development Programme (SCWWDP) grant.The Council is seeking to engage with suitably experienced and competent Suppliers, to provide Social Care Training c…", "suitable_for_smes": true, "buyer_organisation": "Powys County Council", "location_or_region": "UKL24 - Powys", "estimated_value_gbp": 1182928, "suitable_for_voluntary_and_community_organisations": true }, { "title": "Cirrus Consortium Materials Supply Framework", "cpv_codes": [ "44100000", "18100000", "35113400" ], "notice_id": "091589-2026", "notice_link": "https://www.find-tender.service.gov.uk/Notice/091589-2026" , "procedure_type": "Open procedure", "publication_date": "2026-09-28", "closing_date_time": "2026-11-09T12:00:00+00:00", "short_description": "The Cirrus Consortium is a procurement consortium with members including Registered Providers of Social Housing, Local Authorities, ALMOs and NHS Trusts. The Consortium is seeking bids for the following lots: - Lot 1: Managed Services - Lot 2: General building materials - Lot 3: Plumbing and heating…", "suitable_for_smes": null, "buyer_organisation": "Cirrus Consortium c/o Coastline Housing Limited" , "location_or_region": "UKC - North East (England); UKD - North West (England); UKE - Yorkshire and the Humber; UKF - East Midlands (England); UKG - West Midlands (England); UKH - East of England; UKI - London; UKJ - South East (England); UKK - South West (England); UKL - Wales; UKM - Scotland", "estimated_value_gbp": 1200000000, "suitable_for_voluntary_and_community_organisations": null }, { "title": "Adult Social Care Extra Care Services Framework", "cpv_codes": [ "85000000" ], "notice_id": "091579-2026", "notice_link": "https://www.find-tender.service.gov.uk/Notice/091579-2026" , "procedure_type": "Open procedure", "publication_date": "2026-09-28", "closing_date_time": "2026-10-26T12:00:00+00:00", "short_description": "Extra Care forms an important part of the wider adult social care market by providing accommodation-based care and support that enables people to live independently in their own home, while having access to planned and responsive support when required. The Council is seeking to work with providers w…", "suitable_for_smes": null, "buyer_organisation": "Sefton Metropolitan Borough Council", "location_or_region": "UKD73 - Sefton", "estimated_value_gbp": 23040000, "suitable_for_voluntary_and_community_organisations": null } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"find-tender.service.gov.uk/search_tenders","input":{"keywords":"social care","max_results":21}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "find-tender.service.gov.uk/search_tenders" , "input": { "keywords": "social care", "max_results": 21 }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "find-tender.service.gov.uk/search_tenders" , "input": { "keywords": "social care", "max_results": 21 } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run find-tender.service.gov.uk/search_tenders# with {"keywords":"social care","max_results":21}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "keywords" ], "properties": { "region": { "type": "string", "default": "all", "description": "UK contract region in words, for example London or Scotland. Defaults to all regions." }, "keywords": { "type": "string", "minLength": 1, "description": "Words to find in tender notices, for example social care." }, "max_results": { "type": "integer", "default": 25, "maximum": 100, "minimum": 1, "description": "Maximum tender notices to return, for example 25; maximum 100." }, "closing_after": { "type": "string", "description": "Earliest closing date (inclusive), YYYY-MM-DD, for example 2026-10-01. Defaults to today in the UK." }, "max_value_gbp": { "type": "number", "minimum": 0, "description": "Maximum estimated contract value in GBP, for example 5000000. Leave blank for no maximum." }, "min_value_gbp": { "type": "number", "default": 0, "minimum": 0, "description": "Minimum estimated contract value in GBP, for example 100000. Defaults to no minimum." } }}Output schema
{ "type": "object", "required": [ "tenders" ], "properties": { "tenders": { "type": "array", "items": { "type": "object", "required": [ "title", "buyer_organisation", "estimated_value_gbp", "closing_date_time", "location_or_region", "procedure_type", "suitable_for_smes", "suitable_for_voluntary_and_community_organisations", "publication_date", "short_description", "notice_link", "notice_id", "cpv_codes" ], "properties": { "title": { "type": "string" }, "cpv_codes": { "type": "array", "items": { "type": "string" } }, "notice_id": { "type": "string" }, "notice_link": { "type": "string" }, "procedure_type": { "type": [ "string", "null" ] }, "publication_date": { "type": "string", "format": "date" }, "closing_date_time": { "type": [ "string", "null" ], "description": "ISO 8601 time with offset; null when the notice has no published deadline." }, "short_description": { "type": [ "string", "null" ] }, "suitable_for_smes": { "type": [ "boolean", "null" ] }, "buyer_organisation": { "type": [ "string", "null" ] }, "location_or_region": { "type": [ "string", "null" ] }, "estimated_value_gbp": { "type": [ "number", "null" ] }, "suitable_for_voluntary_and_community_organisations": { "type": [ "boolean", "null" ] } }, "additionalProperties": false } } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
find-tender.service.gov.uk/search_tenders- Returns
- title, buyer, estimated value, closing time, location, procedure, SME/VCSE suitability, publication date, description, notice link, CPV codes
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method find-tender.service.gov.uk/search_tenders with the inputs above.
Ask your agent
- Find open public-sector tenders in Scotland for school catering services worth between £200,000 and £2 million
- Any NHS cleaning contracts in the North West still open that close after 15 March 2026? Show me up to 40.
- Search Find a Tender for highway maintenance tenders in Wales under £5m, newest first
- I run a small IT consultancy in London — what open government tenders for cyber security are there, and which are flagged as suitable for SMEs?
- Pull the 10 most recent open UK council tenders on find-tender.service.gov.uk for domiciliary social care valued over £1,000,000
See more
Finds recently published EU procurement notices matching what is being bought, with buyer, estimated value, submission deadline and TED notice link. Open-only results must have a future submission deadline.
ted.europa.eu/search_tendersFinds active federal contract notices on SAM.gov that match keywords, agency, place of performance, set-aside, notice type and posting period.
sam.gov/search_contract_opportunitiesFinds published EU contract award notices on Tenders Electronic Daily by contract topic or winning company, newest publication first, optionally limited to a buyer country and a start date. Values and tender counts are included when published; counts across lots are summed.
ted.europa.eu/search_contract_awardsFind nearby NHS service listings from a UK postcode or town, nearest first. NHS service search covers England; urgent_care returns A&E listings. Hours, patient availability and websites are null when not shown.
nhs.uk/search_nearby_servicesFinds U.S. federal grant opportunities by topic, agency, applicant type and status, with funding and eligibility details. Open results exclude opportunities whose closing date has passed.
grants.gov/search_grantsSearches USAspending federal awards by keywords, awarding agency, state of performance and date across contracts, grants, loans and direct payments. Searches from October 1, 2007 onward.
usaspending.gov/search_federal_awardsSearch UK legislation by topic or title, with optional type and year filters. Closest title matches appear first; broader text matches fill remaining places.
legislation.gov.uk/search_legislationFinds current SEEK jobs in Australia by keywords, with optional location, work type and posting window. Results follow SEEK search order; some promoted listings may appear outside the selected posting window.
seek.com.au/search_jobs