# UK Contracts Finder Scraper: Public Tenders | $1/1K (`one_dollar_store/uk-contracts-finder-tenders`) Actor

$1 per 1,000 results, platform usage included. UK public sector tenders and contract awards from the official Contracts Finder feed: title, buyer, value, deadline, CPV codes, region, suppliers and notice link. Filter by keyword, date, value and buyer. No API key.

- **URL**: https://apify.com/one_dollar_store/uk-contracts-finder-tenders.md
- **Developed by:** [One Dollar Store](https://apify.com/one_dollar_store) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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 Contracts Finder Scraper: public tenders and contract awards

**$1 per 1,000 notices. Platform usage included. No rental, no minimum.**

The four most used Contracts Finder actors on Apify Store charge $2.00 to $10.00 per 1,000 results, and one or more add platform usage on top (Store prices checked 9 October 2026). This actor returns the same kind of data for $1.

[Open it in Apify Console](https://console.apify.com/actors/5t0ivxgoaNCKgwbPc/input)

### What it costs

| Notices | This actor | Most used Contracts Finder actors on the Store |
|---|---|---|
| 1,000 | $1.00 | $2.00 to $10.00 |
| 10,000 | $10.00 | $20 to $100 |
| 100,000 | $100.00 | $200 to $1,000 |

Plus $0.001 per run. A daily run of 100 new tenders costs about $0.10, or about $3 a month.

### Why people switch

- **One flat price.** Compute is included, so the bill follows the number of notices and nothing else.
- **Official feed.** Rows come from the Contracts Finder open data feed (OCDS format) of the UK government, covering tenders, awards, early plans and contract details. No key and no scraping of web pages.
- **Filters that matter for bidding.** Keywords, CPV codes, buyer name, value range and "still open" are applied for you. Awards come with the supplier names and the awarded value.
- **Newest first.** The actor reads the latest days first, so a small `maxItems` gives you the most recent notices.

### Quick start

1. Open the actor, choose the stages and how many days back, press **Start**.
2. Or paste this input:

```json
{ "keywords": ["software development"], "stages": ["tender"], "daysBack": 14, "onlyOpen": true, "maxItems": 100 }
```

3. Download the results as JSON, CSV or Excel, or read them through the API.

### Use it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/one_dollar_store~uk-contracts-finder-tenders/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"stages": ["tender"], "daysBack": 7, "maxItems": 50}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("one_dollar_store/uk-contracts-finder-tenders").call(
    run_input={"keywords": ["cleaning"], "stages": ["tender", "award"], "daysBack": 7, "maxItems": 100}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["publishedAt"], item["stage"], item["buyerName"], item["title"], item.get("valueAmount"))
```

### Use it from an AI assistant

Claude, ChatGPT, Cursor and other assistants can call this actor through Apify's MCP server. Add it with this server address:

```
https://mcp.apify.com?tools=one_dollar_store/uk-contracts-finder-tenders
```

Then ask, for example: "Find open UK tenders from the last 14 days for IT services above 100,000 pounds and list the deadlines."

### Switching from another Contracts Finder actor

Most take a keyword and a result limit. Here they are `keywords` (a list) and `maxItems`, with `daysBack` or `publishedFrom` and `publishedTo` for the date range. The core fields are `title`, `buyerName`, `valueAmount`, `deadline`, `cpv` and `noticeUrl`.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `keywords` | list of text | none | One search per line. A notice is kept when its title, description, buyer, supplier or CPV text contains all the words of at least one line. Empty keeps every notice. |
| `stages` | list | `tender`, `award` | `tender` (opportunities), `award` (contract awards), `planning` (early plans), `implementation` (contract details). |
| `daysBack` | number | 7 | Read notices published in the last N days (up to 3,650). |
| `publishedFrom`, `publishedTo` | text | none | Dates such as `2026-09-01`. They replace `daysBack`. |
| `cpvCodes` | list | none | Keep notices with a CPV code that starts with one of these, for example `72` or `45`. |
| `buyerContains` | text | none | Keep notices whose buyer name contains this text. |
| `minValue`, `maxValue` | number | none | Value range in GBP. Notices with no stated value are dropped when a limit is set. |
| `onlyOpen` | true or false | false | Keep tenders whose deadline has not passed. |
| `maxItems` | number | 100 | Total notices for the run. Minimum 10. |

### Output fields

| Field | Meaning |
|---|---|
| `noticeId`, `ocid`, `releaseId` | Notice id (the one in the Contracts Finder link), the OCDS process id and the id of this version of the notice. |
| `stage` | `tender`, `tenderAmendment`, `award`, `awardUpdate`, `planning` or `implementation`. |
| `title`, `description`, `status` | Notice title, text (cut at 3,000 characters) and status. |
| `buyerName`, `buyerAddress` | The contracting authority and its address. |
| `buyerContactName`, `buyerEmail`, `buyerPhone` | The contact point printed on the notice, when there is one. |
| `publishedAt`, `deadline`, `tenderStart` | Publication time, tender deadline and tender start. |
| `contractStart`, `contractEnd` | Planned or awarded contract dates. |
| `valueAmount`, `valueCurrency`, `valueMax` | Stated value, in GBP for UK notices. |
| `procurementMethod`, `procurementMethodDetails`, `category` | Procedure type and main category (goods, services, works). |
| `cpv` | List of CPV `code` and `description`. |
| `regions` | Delivery regions named on the notice. |
| `awards` | For award notices: `awardDate`, `value`, `currency`, `suppliers`, `status`. |
| `suitableForSme`, `suitableForVcse` | The notice's suitability flags. |
| `noticeUrl`, `scrapedAt` | Link to the notice on Contracts Finder and collection time. |

### Sample results

Real rows from test runs on 9 October 2026. Contact details, the OCDS ids and long text are left out here to keep the page short.

```json
[
 {
  "noticeId": "c4da7d4e-9b80-4024-a556-7954dfead045",
  "stage": "tender",
  "title": "Non-Planar Surface Characterisation and Swabbing Using the Spot Robot",
  "description": "The Contractor's scope shall include the design, development, functional demonstration, and delivery (including all required testing, verification, and docum...",
  "status": "active",
  "buyerName": "UK Atomic Energy Authority",
  "publishedAt": "2026-10-08T16:33:22+01:00",
  "deadline": "2026-10-29T12:00:00Z",
  "contractStart": "2026-10-30T00:00:00Z",
  "contractEnd": "2026-10-31T23:59:59Z",
  "procurementMethod": "open",
  "procurementMethodDetails": "Open procedure",
  "category": "services",
  "cpv": [
   {
    "code": "72262000",
    "description": "Software development services"
   },
   {
    "code": "72230000",
    "description": "Custom software development services"
   },
   {
    "code": "73120000",
    "description": "Experimental development services"
   },
   {
    "code": "73430000",
    "description": "Test and evaluation"
   }
  ],
  "suitableForSme": true,
  "suitableForVcse": true,
  "noticeUrl": "https://www.contractsfinder.service.gov.uk/Notice/c4da7d4e-9b80-4024-a556-7954dfead045"
 },
 {
  "noticeId": "b1b1791a-0271-44e1-af2a-65bd3777417d",
  "stage": "award",
  "title": "iCasework 2026",
  "description": "iCasework Governance, Legal and Debt\n\nAdditional information: \nAward via GCA Back Office Solutions RM6285",
  "status": "complete",
  "buyerName": "Wirral Borough Council",
  "publishedAt": "2026-10-08T22:22:27+01:00",
  "deadline": "2026-10-03T12:00:00+01:00",
  "contractStart": "2026-11-14T00:00:00Z",
  "contractEnd": "2028-11-13T23:59:59Z",
  "valueAmount": 130923,
  "valueCurrency": "GBP",
  "procurementMethodDetails": "Other - ",
  "category": "goods",
  "cpv": [
   {
    "code": "72000000",
    "description": "IT services: consulting, software development, Internet and support"
   }
  ],
  "regions": [
   "England"
  ],
  "awards": [
   {
    "awardDate": "2026-10-07T00:00:00+01:00",
    "value": 130923,
    "currency": "GBP",
    "suppliers": [
     "Civica UK Limited"
    ],
    "status": "active"
   }
  ],
  "suitableForSme": false,
  "suitableForVcse": false,
  "noticeUrl": "https://www.contractsfinder.service.gov.uk/Notice/b1b1791a-0271-44e1-af2a-65bd3777417d"
 },
 {
  "noticeId": "64165cb5-94e1-46ac-8ac0-fcdac8b0d2de",
  "stage": "award",
  "title": "Venue Find and Supporting Services for Meetings, Conferences and Events",
  "description": "This is a Contract Award Notice\n\nThe Care Quality Commission (CQC) requires the Provision of Venue Find and Supporting Services for Meetings, Conferences and...",
  "status": "complete",
  "buyerName": "Care Quality Commission",
  "publishedAt": "2026-10-08T16:34:00+01:00",
  "deadline": "2026-08-18T12:00:00+01:00",
  "contractStart": "2026-11-21T00:00:00Z",
  "contractEnd": "2030-11-20T23:59:59Z",
  "valueAmount": 3333333,
  "valueCurrency": "GBP",
  "procurementMethod": "selective",
  "procurementMethodDetails": "Call-off from a framework agreement",
  "category": "services",
  "cpv": [
   {
    "code": "63516000",
    "description": "Travel management services"
   }
  ],
  "regions": [
   "England"
  ],
  "awards": [
   {
    "awardDate": "2026-09-16T00:00:00+01:00",
    "value": 3333333,
    "currency": "GBP",
    "suppliers": [
     "CALDER CONFERENCES LIMITED"
    ],
    "status": "active"
   }
  ],
  "suitableForSme": true,
  "suitableForVcse": false,
  "noticeUrl": "https://www.contractsfinder.service.gov.uk/Notice/64165cb5-94e1-46ac-8ac0-fcdac8b0d2de"
 }
]
```

### Limits

- **The feed filters only by date and stage.** Keywords, CPV codes, buyer and value are applied by the actor after it reads the notices. A narrow search over a long date range still reads every notice in that range. In our tests three days held 549 tender and award notices.
- **Pace.** The service limits how fast it can be called. The actor reads 100 notices per request, one request every 1.5 seconds, and waits when it is told to slow down. If the service keeps refusing, the run ends with the rows read so far and a message. Try again after a few minutes.
- **700 requests per run.** That is up to 70,000 notices. For longer ranges, run several date ranges.
- **Value.** Many notices state no value, or a value for the whole framework. Values are as printed on the notice, in GBP.
- **Notice versions.** An amended tender or an updated award is a new row with its own `releaseId`, so one `noticeId` can appear more than once. Use `publishedAt` to pick the latest.
- **Text.** Descriptions are cut at 3,000 characters. Attached documents are not downloaded.
- **Contact details** are what the buyer printed on the notice. Check data protection rules before you use them for outreach.

### FAQ

**What is the cheapest Contracts Finder scraper on Apify?**
This actor costs $1 per 1,000 notices with platform usage included. The most used Contracts Finder actors on the Store charged $2.00 to $10.00 per 1,000 when we checked on 9 October 2026, and one or more add platform usage on top.

**How much does it cost to scrape 10,000 tenders?**
$10, plus $0.001 for each run.

**Do I pay for compute or proxy on top?**
No. Platform usage is included in the $1 per 1,000 price. The actor needs no proxy.

**Where does the data come from?**
From the Contracts Finder open data feed run by the UK government (OCDS format). The notices are published under the Open Government Licence. No login and no key are used.

**Can I get only tenders that are still open?**
Yes. Set `stages` to `tender` and turn on `onlyOpen`.

**Can I see who won a contract?**
Yes. Read the `award` stage. The `awards` field lists the suppliers and the awarded value.

**Does it cover Scotland, Wales and Northern Ireland?**
Contracts Finder is the UK government's tender portal. Scotland, Wales and Northern Ireland run their own portals, so notices from their public bodies may not be in this feed.

**Is it legal?**
The actor reads public data only, with no login. The notices are published by the UK government under the Open Government Licence. How you use them is up to you: follow the licence, data protection law for any personal contact details, and the law where you live.

**Is this an official UK government product?**
No. It is an independent tool and is not affiliated with or endorsed by the UK government or the Crown Commercial Service.

**Do I need an Apify account?**
Yes. Actors run from an Apify account, and a free account is enough to start: it includes $5 of platform usage every month. You can [sign up here](https://www.apify.com?fpr=ymnoit). This is a referral link and it costs you nothing.

**Is there a limit on the free plan?**
Yes. A run started from a free plan account delivers the first 10 results, then ends with a message and a link to the plans. Any paid plan returns everything you ask for, up to your own limit. The price per result is the same on every plan.

### More from The One Dollar Store

Every actor here costs $1 per 1,000 results, platform usage included. See the whole store: https://apify.com/one_dollar_store

**Tenders and grants**

- [EU Tenders Scraper](https://apify.com/one_dollar_store/eu-tenders-ted-scraper): EU public procurement notices from TED.
- [USAspending Scraper](https://apify.com/one_dollar_store/usaspending-awards-scraper): US federal contracts and awards.
- [Grants.gov Scraper](https://apify.com/one_dollar_store/grants-gov-opportunities-scraper): US federal grant opportunities.

**Google and search**

- [Google News Scraper](https://apify.com/one_dollar_store/google-news-articles-scraper): News articles by keyword, topic or country.

### Changelog

- October 2026: first release.

# Actor input Schema

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

Optional. One search per line. A notice is kept when its title, description, buyer, supplier or CPV text contains all the words of at least one line (any order, not case sensitive). Leave empty to take every notice in the date range.

## `stages` (type: `array`):

Which stages to read: tender (open and closed opportunities), award (contract awards), planning (early plans) or implementation (contract details).

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

Read notices published in the last N days. Ignored when you set a start date below.

## `publishedFrom` (type: `string`):

Optional start date, for example 2026-09-01. Overrides Days back.

## `publishedTo` (type: `string`):

Optional end date, for example 2026-09-30. Default is now.

## `cpvCodes` (type: `array`):

Optional. Keep notices with a CPV code that starts with one of these, for example 72 (IT services), 45 (construction) or 33 (medical equipment).

## `buyerContains` (type: `string`):

Optional. Keep notices whose buyer name contains this text, for example NHS or Council.

## `minValue` (type: `integer`):

Optional. Keep notices with a stated value of at least this amount. Notices with no stated value are dropped when a value limit is set.

## `maxValue` (type: `integer`):

Optional. Keep notices with a stated value of at most this amount.

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

Keep tender notices whose deadline has not passed (or has no deadline).

## `maxItems` (type: `integer`):

The run stops after this many notices. Minimum 10.

## Actor input object example

```json
{
  "stages": [
    "tender"
  ],
  "daysBack": 7,
  "onlyOpen": false,
  "maxItems": 50
}
```

# Actor output Schema

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

No description

## `summary` (type: `string`):

No description

# 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 = {
    "stages": [
        "tender"
    ],
    "daysBack": 7,
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("one_dollar_store/uk-contracts-finder-tenders").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 = {
    "stages": ["tender"],
    "daysBack": 7,
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("one_dollar_store/uk-contracts-finder-tenders").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 '{
  "stages": [
    "tender"
  ],
  "daysBack": 7,
  "maxItems": 50
}' |
apify call one_dollar_store/uk-contracts-finder-tenders --silent --output-dataset

```

## MCP server setup

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

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/5t0ivxgoaNCKgwbPc/builds/1Nvw8KxmfcLMDT6dH/openapi.json
