# UK Government Contract Notices Scraper - Contracts Finder (`jungle_synthesizer/contractsfinder-uk-government-contract-notices-scraper`) Actor

Pull UK public-sector contract notices from Contracts Finder — tenders, awards, and contracts with buyer names, contacts, and values. Covers every buyer type since 2015 and includes the award data most feeds skip, filterable by publication date.

- **URL**: https://apify.com/jungle\_synthesizer/contractsfinder-uk-government-contract-notices-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Business, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 record scrapeds

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?

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 Contract Notices Scraper — Contracts Finder

Pull UK public-sector contract notices from [Contracts Finder](https://www.contractsfinder.service.gov.uk/Search), the mandatory publication point for central government, NHS, council, and police tenders below the Find a Tender threshold. Returns tenders, awards, contracts, and planning notices — buyer contact details, award values, winning suppliers, CPV codes, and documents — across the archive back to 2015.

***

### UK Government Contract Notices Scraper Features

- Returns every release type on a notice, not just the open tender — walks forward through award and contract releases so you can see who won and at what price.
- Captures the buyer's name, postal address, and direct contact — email and phone, when the source publishes them.
- Flattens award data two ways: a clean list of winning supplier names for quick filtering, and the full nested award detail (value, date, supplier address) for the record.
- Filters by publication date window, from a single day up to the full archive.
- Covers every buyer type in one query — central government, NHS trusts, councils, police and fire authorities, universities. No separate feed per sector.

***

### Who Uses Contracts Finder Data?

- **Bid-writing consultancies** — Track new tender notices by date window and route them straight into a pipeline.
- **SMEs chasing public-sector work** — Filter for SME- and VCSE-suitable opportunities and skip the ones you can't win anyway.
- **GovCon competitive intelligence teams** — Pull award history to see who's winning which buyers, and at what value.
- **Sales teams selling into the public sector** — Use buyer contact details to route outreach without hunting through PDFs.
- **Researchers and journalists** — Build a historical record of UK public spending by buyer, supplier, or category.

***

### How UK Government Contract Notices Scraper Works

1. Set a publication date window — `publishedFrom` and `publishedTo` — or leave both blank for the last 30 days.
2. The scraper walks the window in 7-day slices and pages through each one until it runs out of records or hits `maxItems`.
3. Each release is flattened into the schema below. Buyer, tender, awards, and documents all land as plain fields, not a nested blob you have to parse yourself.
4. Results stream into the Apify dataset as they're found.

***

### Input

```json
{
  "publishedFrom": "2026-08-01T00:00:00",
  "publishedTo": "2026-08-31T00:00:00",
  "maxItems": 500
}
```

| Field           | Type    | Default         | Description |
|-----------------|---------|-----------------|-------------|
| `publishedFrom` | string  | *(30 days ago)* | Earliest publication date to include (ISO 8601, e.g. `2026-08-01T00:00:00`). Set this to an early date — the archive goes back to 2015 — for a historical pull. |
| `publishedTo`   | string  | *(now)*         | Latest publication date to include (ISO 8601). |
| `maxItems`      | integer | `10`            | Maximum number of records the run will save. |

#### Full historical backfill

```json
{
  "publishedFrom": "2015-01-01T00:00:00",
  "publishedTo": "2026-01-01T00:00:00",
  "maxItems": 50000
}
```

***

### UK Government Contract Notices Scraper Output Fields

```json
{
  "ocid": "ocds-b5fd17-73012649-c3df-43b8-9c64-22f896afb346",
  "release_id": "bcdb2aa3-d762-4645-b43c-3896373f7249-913330",
  "notice_id": "GLD 048 2026",
  "notice_type": "award",
  "notice_status": "award",
  "title": "eDisclosure Services",
  "description": "The provision of an eDisclosure service",
  "published_date": "2026-09-08T14:47:04+01:00",
  "buyer_name": "Government Legal Department",
  "buyer_id": "GB-SRS-sid4gov.cabinetoffice.gov.uk/NDfF5Gvb",
  "buyer_address": {
    "streetAddress": "102 Petty France",
    "locality": "London",
    "postalCode": "SW1H9GL",
    "countryName": "England"
  },
  "buyer_contact": {
    "name": "Oluwafunmilayo Akinleye",
    "email": "Oluwafunmilayo.Akinleye@governmentlegal.gov.uk",
    "telephone": "07778497428"
  },
  "value_amount": 107438,
  "value_currency": "GBP",
  "value_min": null,
  "value_max": 107438,
  "cpv_codes": ["79100000"],
  "procurement_method": "selective",
  "procurement_category": "services",
  "tender_start_date": null,
  "tender_end_date": "2026-08-21T17:00:00+01:00",
  "contract_start_date": "2026-08-24T00:00:00+01:00",
  "contract_end_date": "2029-09-30T23:59:59+01:00",
  "delivery_regions": [],
  "is_suitable_for_sme": false,
  "is_suitable_for_vco": false,
  "awards": [
    {
      "award_id": "ocds-b5fd17-73012649-c3df-43b8-9c64-22f896afb346-1",
      "date": "2026-08-21T00:00:00+01:00",
      "value": 107438,
      "currency": "GBP",
      "supplier_name": "Legastat Ltd",
      "supplier_id": "GB-COH-03807082",
      "supplier_address": { "streetAddress": "57 Carey Street, London WC2A 2JB" }
    }
  ],
  "supplier_names": ["Legastat Ltd"],
  "documents": [
    {
      "title": "Awarded contract notice on Contracts Finder",
      "url": "https://www.contractsfinder.service.gov.uk/Notice/bcdb2aa3-d762-4645-b43c-3896373f7249",
      "format": "text/html",
      "date_published": "2026-09-08T14:47:04+01:00"
    }
  ],
  "amendments": [],
  "source_url": "https://www.contractsfinder.service.gov.uk/Notice/bcdb2aa3-d762-4645-b43c-3896373f7249",
  "scraped_at": "2026-10-01T14:49:20.499Z"
}
```

| Field                  | Type    | Description |
|------------------------|---------|-------------|
| `ocid`                 | string  | Open Contracting ID — stable identifier for the contracting process across its full lifecycle (planning, tender, award, contract). |
| `release_id`           | string  | Identifier for this specific release. |
| `notice_id`            | string  | Contracts Finder notice reference number. |
| `notice_type`          | string  | Release classification: `tender`, `award`, `contract`, or `planning`. |
| `notice_status`        | string  | Raw release tag(s), comma-separated. |
| `title`                | string  | Notice title. |
| `description`          | string  | Notice description. |
| `published_date`       | string  | When this release was published. |
| `buyer_name`           | string  | Buying organization. |
| `buyer_id`             | string  | Buyer's Contracts Finder / Companies House identifier, where present. |
| `buyer_address`        | object  | Buyer's postal address. |
| `buyer_contact`        | object  | Buyer contact name, email, and telephone, when published. |
| `value_amount`         | number  | Headline value — an award's actual value once one exists, otherwise the tender's estimated maximum. |
| `value_currency`       | string  | Currency for the value fields (almost always `GBP`). |
| `value_min`            | number  | Tender's estimated minimum value. |
| `value_max`            | number  | Tender's estimated maximum value. |
| `cpv_codes`            | array   | CPV classification codes (main and additional). |
| `procurement_method`   | string  | `open`, `selective`, `limited`, or `direct`. |
| `procurement_category` | string  | `goods`, `works`, or `services`. |
| `tender_start_date`    | string  | Tender period start, when published. |
| `tender_end_date`      | string  | Tender submission deadline. |
| `contract_start_date`  | string  | Contract period start. |
| `contract_end_date`    | string  | Contract period end. |
| `delivery_regions`     | array   | Region names where goods, works, or services are delivered. |
| `is_suitable_for_sme`  | boolean | Flagged by the buyer as suitable for small/medium enterprises. |
| `is_suitable_for_vco`  | boolean | Flagged by the buyer as suitable for voluntary/community organizations. |
| `awards`               | array   | Per-award detail: `award_id`, `date`, `value`, `currency`, `supplier_name`, `supplier_id`, `supplier_address`. |
| `supplier_names`       | array   | Flattened list of winning supplier names across all awards on this release. |
| `documents`            | array   | Tender and award documents: `title`, `url`, `format`, `date_published`. |
| `amendments`           | array   | Amendment history, when present. |
| `source_url`           | string  | Link to the notice on Contracts Finder. |
| `scraped_at`           | string  | When this record was collected. |

***

### FAQ

#### How do I scrape Contracts Finder?

UK Government Contract Notices Scraper needs no account and no API key. Give it a publication date window — or nothing at all for the last 30 days — and it returns every notice published in that window.

#### What data can I get from Contracts Finder?

Tenders, awards, contracts, and planning notices, with buyer contact details, award values, winning suppliers, and CPV codes attached to each one. That includes the award data a lot of feeds leave out.

#### Does this include contract awards, or just open tenders?

Both, plus planning and contract-amendment releases. A single date window returns every release type the buyer has published for it — you don't need a separate mode for "who won."

#### Can I pull the full historical archive?

Yes. Contracts Finder's archive goes back to 2015. Set `publishedFrom` to an early date and raise `maxItems` to match — see the backfill example above.

#### Do I need an account or API key for Contracts Finder?

No. The source is a public government register and the scraper doesn't require credentials of any kind.

***

### Need More Features?

Need custom fields, filters, or a different target site? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use UK Government Contract Notices Scraper?

- **Full release history** — walks award and contract releases, not just the live-tender window every rival ships.
- **Buyer contact preserved** — name, email, and telephone land in the output as structured fields, which is the field several alternatives drop entirely.
- **Correct pagination** — follows the source's own cursor to exhaustion instead of guessing at page numbers, so a wide date window doesn't quietly lose records partway through.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

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

Maximum number of records to scrape

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

Earliest publication date to include (ISO 8601, e.g. 2026-08-01T00:00:00). Defaults to 30 days before now. Set to an earlier date (e.g. 2015-01-01T00:00:00) for a historical backfill.

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

Latest publication date to include (ISO 8601, e.g. 2026-08-05T00:00:00). Defaults to now.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10
}
```

# Actor output Schema

## `results` (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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "publishedFrom": "",
    "publishedTo": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/contractsfinder-uk-government-contract-notices-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "publishedFrom": "",
    "publishedTo": "",
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/contractsfinder-uk-government-contract-notices-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "publishedFrom": "",
  "publishedTo": ""
}' |
apify call jungle_synthesizer/contractsfinder-uk-government-contract-notices-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/contractsfinder-uk-government-contract-notices-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/bXpT1WCaDrPZHoCsO/builds/YdrLREy4asASAW5W5/openapi.json
