# UK Contracts Finder Scraper (`parseforge/uk-contracts-finder-scraper`) Actor

Scrapes UK public sector contract notices from Contracts Finder by keyword and OCDS notice stage. Returns each contract as a flat row with title, buyer, value, dates, and full notice details.

- **URL**: https://apify.com/parseforge/uk-contracts-finder-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Lead generation, Business, Automation
- **Stats:** 5 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $35.03 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### UK Contracts Finder Scraper

**Scrape UK public sector contracts from Contracts Finder by keyword and notice stage, up to a million per run.** Each contract comes with its title, buyer, value, dates, and full notice details. No login or API key. Export to CSV, JSON, Excel, or XML.

Contracts Finder is the UK government's official portal for public procurement opportunities, but its web interface makes bulk analysis slow and manual. This Actor reads the public search results directly, filtered by keyword and OCDS notice stage, and returns each matching contract in one fixed schema.

| Who uses it | What they scrape UK Contracts Finder for |
|---|---|
| Sales teams | Find new public sector tender opportunities in their niche |
| Market researchers | Track which government departments are buying what |
| Procurement analysts | Monitor award patterns and supplier competition |
| Compliance officers | Keep an audit trail of published contract notices |

### What it does

This Actor collects UK public sector contract notices from Contracts Finder by keyword and notice stage, and returns each one as a flat row.

- 🔎 **Keyword search:** Enter any term like 'software', 'construction', or 'consultancy' to match contract titles and descriptions.
- 📋 **Notice stage filter:** Choose planning, tender, award, or implementation stages, or combine them in one run.
- 📦 **Bulk collection:** Set a maximum up to 1,000,000 contracts per run and let the Actor paginate through all results.
- 🗂️ **Fixed schema:** Every contract returns the same flat structure, ready for spreadsheets or databases.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with UK Contracts Finder data

**📈 Find new tender opportunities.**

A sales team runs the Actor daily with their product keywords and the tender stage to get a fresh list of open public sector contracts.

**📊 Track government spending.**

A market researcher collects award notices for a specific keyword over several months to see which suppliers are winning contracts.

**🔍 Monitor competitor activity.**

A procurement analyst scrapes award notices for a niche to identify which companies are repeatedly winning public work.

**🗂️ Build a contract database.**

A data engineer schedules the Actor to collect all tender and award notices for a set of keywords and stores them in a central database.

### Why choose this scraper

| | What you get |
|---|---|
| **No API key or registration** | Reads the public Contracts Finder search directly, so you can start scraping in minutes |
| **All notice stages** | Planning, tender, award, and implementation notices in one dataset |
| **Built for scale** | Collect up to a million contracts per run with automatic pagination |
| **Clean, flat output** | Each contract is one row with consistent fields for easy analysis |

### How it compares

No other Store actor targets UK Contracts Finder the same way, so the honest comparison is with the alternatives teams actually weigh.

| | UK Contracts Finder Scraper | Build it in-house | By hand |
|---|---|---|---|
| Setup | Run it now, zero config | Days of engineering | None, but hours per pull |
| When UK Contracts Finder changes | Maintained for you | You fix it | You re-learn the page |
| Proxies, retries, anti-bot | Built in | Your problem | Browser only |
| Output | Fixed JSON schema, CSV/Excel export | Whatever you build | Copy-paste |
| Cost | Pay per result | Engineering time | Analyst hours |

### Configure the run

Drive the Actor with a keyword and one or more notice stages, and set a maximum number of contracts to collect per run. The Input tab lists every parameter.

A first run with the defaults:

```json
{
 "maxItems": 10
}
```

A larger pull:

```json
{
 "maxItems": 200
}
```

### Pricing

Pay-per-result: **$0.0467 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $4.67 |
| 1,000 results | $46.70 |
| 10,000 results | $467.00 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [UK Contracts Finder Scraper](https://apify.com/parseforge/uk-contracts-finder-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to UK Contracts Finder through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=parseforge/uk-contracts-finder-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Your keyword may be too specific or the selected notice stage may have no matching contracts. Try a broader keyword or include more stages.

**The run stops before reaching my maxItems.**

The Actor stops when there are no more results on Contracts Finder for your query. Lower your maxItems or broaden your keyword to collect more.

**Some fields are empty in the output.**

Contracts Finder does not always publish every field for every notice. Empty fields mean the data was not available on the source page.

**The Actor is slow for large runs.**

Large runs with high maxItems can take time because the Actor must request many pages. Use a higher memory allocation or split the run by keyword.

**I get a timeout error.**

Contracts Finder may be temporarily slow. Retry the run, or reduce maxItems to shorten the run duration.

### FAQ

| Question | Answer |
|---|---|
| Do I need an API key or login for Contracts Finder? | No. The Actor reads the public search results from Contracts Finder without any authentication. |
| What is an OCDS notice stage? | OCDS is the Open Contracting Data Standard. Contracts Finder uses stages like planning, tender, award, and implementation to describe where a contract is in its lifecycle. |
| Can I search for multiple keywords at once? | The input accepts one keyword per run. To search multiple terms, run the Actor once per keyword or use a task with different inputs. |
| How many contracts can I collect in one run? | You can set the maximum up to 1,000,000 contracts. The Actor will paginate through all available results until it reaches that limit or there are no more matches. |
| What data does each contract include? | Each row includes the contract title, description, buyer name, published and closing dates, value, and other notice details as returned by Contracts Finder. |
| Can I filter by buyer or region? | The current input only supports keyword and notice stage. For buyer or region filtering, collect the data and filter it in your spreadsheet or database. |
| Is this legal to scrape? | Contracts Finder publishes public procurement data under the Open Government Licence, which permits reuse. Always check the current terms before large-scale scraping. |
| How often should I run the Actor? | New notices are published daily. Many users schedule the Actor to run once a day or once a week to keep their dataset current. |
| Can I export the results to Excel? | Yes. Apify datasets can be exported to CSV, JSON, Excel, or XML from the run page or via API. |
| What if I get no results? | Check your keyword spelling and try a broader term. Also make sure the selected notice stage has published notices for that keyword. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Crown Commercial Service. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

## `keyword` (type: `string`):

Search query (e.g. 'software', 'construction')

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

OCDS stage to include

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

Maximum number of contracts to collect per run.

## Actor input object example

```json
{
  "keyword": "",
  "stages": [
    "tender"
  ],
  "maxItems": 10
}
```

# Actor output Schema

## `overview` (type: `string`):

Overview of scraped data

## `fullData` (type: `string`):

Complete dataset

# 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 = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/uk-contracts-finder-scraper").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 = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("parseforge/uk-contracts-finder-scraper").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 '{
  "maxItems": 10
}' |
apify call parseforge/uk-contracts-finder-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/ahvjxGQ41hbZuYs5S/builds/pjlNaTHUYb3PoXflg/openapi.json
