# UK Government Tenders Scraper: Find a Tender & Contracts Finder (`seaf999ield/uk-public-tenders-feed`) Actor

UK tenders API: new notices and contract awards from the Find a Tender OCDS API and Contracts Finder, plus EU TED. Filter by keyword, CPV, value and region, by RawTrader | UK Industry & Bills: https://ukindustryandbills.substack.com · X: x.com/ImRawTrader

- **URL**: https://apify.com/seaf999ield/uk-public-tenders-feed.md
- **Developed by:** [RustonRoad](https://apify.com/seaf999ield) (community)
- **Categories:** Lead generation, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 tender notices

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## UK Government Tenders Scraper: Find a Tender & Contracts Finder

**Get new UK government tenders and contract awards from Find a Tender and Contracts Finder as clean, filterable data, every day.**

### Who it's for

- Bid writers and SMEs looking for new public sector contracts to bid on
- Sales teams tracking which public bodies are buying (and who won awards)
- Analysts researching UK public procurement by CPV code, region or value

### Sample output

| source | title | buyerName | valueGBP | deadline |
|---|---|---|---|---|
| Find a Tender | UKRI-6349 UPLiFT Refrigerant-based Helium Gas Cooler | UK Research & Innovation (UKRI) | 140000 | 2026-12-17T11:00:00Z |
| Find a Tender | Client Transport Services 2026 - 2034 - SEND | Surrey County Council | – | – |
| Find a Tender | Operation of RIDC Melton | NETWORK RAIL INFRASTRUCTURE LIMITED | 29386811 | – |

*Real rows from a test run (shortened; the full output has more fields).*

### Price per 1,000 results

Main event: **`apify-default-dataset-item` at $0.003 each**, so **1,000 results = $3.00**. See the Pricing tab for the current prices.

### Input example

```json
{
  "sources": [
    "findATender",
    "contractsFinder"
  ],
  "daysBack": 2,
  "maxResults": 20
}
```

**Get every UK public sector tender, contract award and pipeline notice in one clean dataset.** The data comes straight from the government's official **Find a Tender (FTS)** and **Contracts Finder** OCDS APIs.

- No login, no API key, no browser automation.
- It doesn't break when a website layout changes.

### Ready-made reports

Don't want to run a scraper? Get the results as a ready report:

- **Free preview** of the October digest: https://payhip.com/b/8hSA7
- **£19 sector digests** (IT & Digital, Construction): https://payhip.com/UKIndustryBills
- **Free weekly newsletter**, UK Industry & Bills: https://ukindustryandbills.substack.com

### What you get

Each notice comes back as one flat record:

| Group | Fields |
|---|---|
| Notice | title, description, notice type (planning / tender / award / contract), status, published date, link to the official notice |
| Value and dates | **bid deadline**, estimated or awarded **value in GBP**, contract start and end |
| Classification | **CPV codes**, procurement method, category |
| Organisations | **Buyer** organisation, locality, postcode, NUTS/ITL region; **supplier** organisations on award notices |
| Housekeeping | a source flag, and duplicates removed across both portals |

Export as JSON, CSV, Excel, or via the API, webhooks, Make, Zapier or n8n.

### New: EU tenders (TED)

Add `"ted"` to Sources to include notices from **Tenders Electronic Daily**, the EU's official procurement journal, via the public TED Search API (no key). Filter by buyer country. TED records carry `estimatedValue` (estimated procurement value) and, on award notices, `awardValue`, plus `currency` (usually EUR) instead of `valueGBP`. The TED `deadline` is the tender submission deadline, or the request-to-participate deadline for restricted procedures.

### Who it's for: more detail

- **Bid and sales teams:** a daily alert for new tenders in your CPV codes, value band and region.
- **Agencies and consultancies:** track the councils, NHS trusts and universities you sell to.
- **Market research:** see who is winning which contracts and at what value. Uses award notices.
- **CRM and BI:** schedule a run every morning and push it into HubSpot, Sheets or BigQuery.

### Input

| Field | What it does | Default |
|---|---|---|
| Sources | Find a Tender, Contracts Finder, and optionally **EU TED** | UK both |
| TED buyer countries | ISO-3 codes, e.g. `DEU`, `FRA`, `IRL` (TED only) | all |
| Days back | Notices updated or published in the last N days | 2 |
| Keywords | Whole-word match on title (+ description) | none |
| Match title only | Stricter keyword matching | off |
| CPV prefixes | e.g. `72` IT services, `45` construction, `79` business services | none |
| Minimum value (GBP) | Skip small notices | 0 |
| Only open opportunities | Deadline still in the future | off |
| Notice types | planning, tender, award, contract… | all |
| Max results | Hard cap per run | 200 |

**Example: open IT tenders from the last 3 days**

```json
{"daysBack":3,"keywords":["software","digital","cloud","data","IT"],"matchTitleOnly":true,"onlyOpen":true,"noticeTypes":["tender"]}
```

#### Example output (real sample)

| source | title | buyerName | valueGBP | deadline | cpvCodes |
|---|---|---|---|---|---|
| Contracts Finder | Short Breaks for 1324785 | East Riding of Yorkshire Council | 4000 | 2026-08-21 | 85000000 |
| Find a Tender | Estate Agency Services for Herefordshire Council's Commerci… | Herefordshire Council | 450000 | 2026-10-26 | – |
| Contracts Finder | 021352 - Videography for the Knowsley Business Awards | Knowsley Council | 52725 | 2026-09-03 | 79416200, 79952000 |

### Output

Each run writes one dataset item per matching notice (Output tab → **Tenders** view, plus an **Awards & suppliers** view), and a `RUN_SUMMARY` record in the key-value store with how many notices were scanned and output.

**Sample item**

```json
{
  "source": "Contracts Finder",
  "ocid": "ocds-b5fd17-9fe0d98b-c67c-4c82-98f9-422d34c41247",
  "noticeId": "e3ca1e71-248e-476f-a6fb-9b7f78db2fea-918306",
  "url": "https://www.contractsfinder.service.gov.uk/Notice/e3ca1e71-248e-476f-a6fb-9b7f78db2fea",
  "title": "Short Breaks for 1324785",
  "description": "East Riding of Yorkshire Council is searching for a short breaks provider to support our young person.They do not require personal care within their short br...",
  "noticeTypes": [
    "award"
  ],
  "status": "complete",
  "publishedDate": "2026-10-19T19:03:46+01:00",
  "deadline": "2026-08-21T12:00:00+01:00",
  "isOpen": false,
  "valueGBP": 4000,
  "awardValueGBP": 4000,
  "currency": "GBP",
  "cpvCodes": [
    "85000000"
  ],
  "procurementMethod": "selective",
  "category": "services",
  "contractStart": "2026-10-26T00:00:00Z",
  "contractEnd": "2027-01-04T23:59:59Z",
  "buyerName": "East Riding of Yorkshire Council",
  "buyerId": "GB-CFS-188336",
  "buyerLocality": "Beverley",
  "buyerPostcode": "HU17 9BA",
  "region": "ENG",
  "supplierNames": [
    "Barnardo's DSI Service"
  ],
  "licence": "Open Government Licence v3.0"
}
```

### Pricing

**In plain words:** **$3 per 1,000 notices returned** ($0.003 each). A daily feed of new UK tenders for a few keywords or CPV codes usually costs a few cents a day.

**Pay per result:** you pay a small fixed price per notice returned (one dataset item = one result). The per-result price is shown on the Store page. Filtering happens before billing, so you never pay for notices you filtered out.

### Data, licence and privacy

- **Source:** Find a Tender and Contracts Finder, published under the **Open Government Licence v3.0**. Commercial reuse is allowed with attribution, which each record carries.
- **No personal data by design:**
  - Contact names, emails and phone numbers are **never** returned.
  - Emails and phone numbers that appear inside free-text descriptions are redacted.
  - Only organisation-level data is output.
- **Gentle on the source:** official APIs only, with polite rate limiting and retries.

### Known limits

- Contracts Finder's search API returns up to 100 notices per query. The actor walks the window in 6-hour slices and logs a warning if a slice hits the cap.
- Values are taken from tender, lot or award fields. Some notices publish no value.

### FAQ

- **Is this the same data as the government websites?** Yes. It's the same notices, from the official machine-readable feeds.
- **Does it cover Scotland, Wales and Northern Ireland?** It covers what is published to Find a Tender, which since Feb 2025 includes below-threshold notices outside Scotland. Public Contracts Scotland and Sell2Wales-only notices aren't included yet.
- **Can I get only new notices each day?** Schedule it daily with `daysBack: 1`. A built-in "new since last run" mode is on the roadmap.

*Keywords: UK tenders API, Find a Tender scraper, Contracts Finder API, public procurement data UK, government contracts UK, OCDS UK, bid alerts, CPV tenders, NHS tenders, council tenders.*

### Related UK data actors

- [UK Companies House Scraper: New Companies & Insolvency Alerts](https://apify.com/seaf999ield/uk-companies-house-feed)
- [UK Planning Applications Scraper: London & Idox Councils](https://apify.com/seaf999ield/uk-planning-applications)
- [UK Jobs Scraper: NHS Jobs, DWP Find a Job & Careers Pages](https://apify.com/seaf999ield/uk-jobs-feed)

### About RawTrader | UK Industry & Bills

RawTrader | UK Industry & Bills is a UK newsletter and open data project tracking energy bills, fuel prices, public tenders, company closures and FCA short positions, using official data from Ofgem, DESNZ, ONS, Companies House, Find a Tender and the FCA.

- [RawTrader Data: every UK data tool in one place](https://imrawtrader.beehiiv.com/p/data)
- [UK Industry & Bills newsletter](https://imrawtrader.beehiiv.com)
- [Follow @ImRawTrader on X](https://x.com/ImRawTrader)
- [Free UK tenders preview pack](https://payhip.com/b/8hSA7)
- [UK sector tender digests, £19 each](https://payhip.com/UKIndustryBills)

# Actor input Schema

## `sources` (type: `array`):

Official sources to query. Find a Tender (FTS) covers above- and below-threshold UK notices; Contracts Finder covers English public sector notices; EU TED (Tenders Electronic Daily) is optional and covers all EU/EEA.

## `tedCountries` (type: `array`):

Only used when EU TED is selected. ISO 3166-1 alpha-3 buyer country codes, e.g. DEU, FRA, IRL, NLD. Leave empty for all EU/EEA (very large; set Max results).

## `daysBack` (type: `integer`):

Return notices published or updated in the last N days (1–90). Use 1 for a daily scheduled run.

## `keywords` (type: `array`):

Case-insensitive whole-word match on the notice title or description (any keyword matches), e.g. software, cleaning, cloud. Leave empty for all notices.

## `matchTitleOnly` (type: `boolean`):

Stricter matching: keywords must appear in the title; descriptions are ignored.

## `cpvPrefixes` (type: `array`):

Keep notices with at least one CPV code starting with any of these prefixes, e.g. 72 (IT services), 45 (construction), 90 (cleaning/environmental), 85 (health/social). Leave empty for all.

## `minValueGBP` (type: `integer`):

Skip notices whose estimated or awarded value is below this amount (notices with no published value are skipped too when this is set). 0 = no limit.

## `onlyOpen` (type: `boolean`):

Keep only opportunities still accepting bids (submission deadline in the future).

## `noticeTypes` (type: `array`):

Keep only these OCDS notice types (UK sources). Leave empty for all. Note: TED notices use their own types (e.g. cn-standard), so they are excluded whenever this filter is set.

## `maxResults` (type: `integer`):

Stop after this many matching notices (each one is a billable result).

## Actor input object example

```json
{
  "sources": [
    "findATender",
    "contractsFinder"
  ],
  "tedCountries": [],
  "daysBack": 2,
  "keywords": [],
  "matchTitleOnly": false,
  "cpvPrefixes": [],
  "minValueGBP": 0,
  "onlyOpen": false,
  "noticeTypes": [],
  "maxResults": 20
}
```

# Actor output Schema

## `results` (type: `string`):

All matching notices (dataset items), opened in the Tenders overview view.

## `runSummary` (type: `string`):

JSON with scanned/output counts, sources queried and the 'since' timestamp.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sources": [
        "findATender",
        "contractsFinder"
    ],
    "daysBack": 2,
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("seaf999ield/uk-public-tenders-feed").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "sources": [
        "findATender",
        "contractsFinder",
    ],
    "daysBack": 2,
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("seaf999ield/uk-public-tenders-feed").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sources": [
    "findATender",
    "contractsFinder"
  ],
  "daysBack": 2,
  "maxResults": 20
}' |
apify call seaf999ield/uk-public-tenders-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,seaf999ield/uk-public-tenders-feed"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/O5f5nVGiN9NDnwIUy/builds/zI5PDYCtKnx3z7884/openapi.json
