# UK Government Tenders & Contract Awards Monitor (`devon_gtme/uk-tenders-monitor`) Actor

Monitor UK public-sector tenders and contract awards from both Contracts Finder and Find a Tender in one feed. Track open opportunities or see which suppliers win. Filter by keyword, CPV code, value and deadline. Buyer, value, region, award and official link per record. No API key needed.

- **URL**: https://apify.com/devon\_gtme/uk-tenders-monitor.md
- **Developed by:** [Devon Kellar](https://apify.com/devon_gtme) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 tenders

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## UK Government Tenders & Contract Awards Monitor

Monitor **UK public-sector tenders and contract awards** from BOTH official government sources in one normalized feed:

- **Contracts Finder** - below-threshold contracts and England-wide opportunities (typically £12k-£139k and up)
- **Find a Tender (FTS)** - high-value contracts across the whole UK (above ~£139k, up to multi-million frameworks)

The UK public sector spends **~£300 billion a year** with suppliers, and every opportunity and award is published on these two registers. This actor turns them into a clean, structured, deduplicated dataset you can filter by sector, keyword, value, and deadline.

### Two ways to use it

#### 1. Win work - fresh opportunities in your sector, weekly
Set `noticeTypes` to **opportunities**, add your keywords or CPV sector codes, and [schedule](https://docs.apify.com/platform/schedules) the actor weekly. Every run delivers the open tenders published in the last 7 days that match your sector - with buyer, estimated value, submission deadline, and a direct link to bid. Use `deadlineWithinDays` to build a "closing soon" alert.

#### 2. Competitive intel - who's winning what
Set `noticeTypes` to **awards** and watch the contracts being signed in your market: which buyers are spending, which suppliers keep winning, and at what values. Perfect for tracking competitors' public-sector wins, finding buyers who purchase what you sell, or spotting incumbents whose contracts will come up for renewal.

### Who uses this data

- **Bid & business development teams** - a rolling feed of live tenders matched to your sector, before your competitors find them by hand
- **Agencies & consultancies** - marketing, IT, HR, legal and professional-services tenders published every week
- **SaaS & tech vendors selling to the public sector** - track software and digital-transformation spend, and see which councils/NHS trusts/departments buy what
- **Market-intelligence & data platforms** - structured OCDS procurement events to feed your models
- **Suppliers watching competitors** - every award names the winning supplier and the contract value

### What you get

One flat schema across both sources (normalized from OCDS):

| Field | Example |
|---|---|
| `source` | contractsFinder / findATender |
| `title` | ITT Provision of Security Services for Orkney Harbour Authority |
| `description` | First 500 chars of the notice description |
| `buyerName` | Orkney Islands Council |
| `buyerRegion` | Northern Ireland / UKM65 |
| `stage` | tender / award |
| `publishedDate` | 2026-07-15T16:43:25+01:00 |
| `deadlineDate` | Submission deadline (open tenders) |
| `valueLow` / `valueHigh` / `currency` | 850000 / GBP |
| `cpvCodes` | ["79710000", "75241000"] |
| `awardedSupplier` | Cam Cab Ltd (awards) |
| `awardedValue` | 35910 (awards) |
| `ocid` | Open Contracting ID - join key across systems |
| `noticeUrl` | Direct link to the official notice |

Results are deduplicated across the two sources by `ocid`.

### CPV cheat-sheet (common sectors)

CPV codes are the EU/UK procurement sector taxonomy. The filter is prefix-based - `72` matches everything under IT services.

| CPV | Sector |
|---|---|
| `72000000` | IT services: consulting, software development, internet |
| `48000000` | Software packages & information systems |
| `79000000` | Business services: law, marketing, consulting, recruitment |
| `79340000` | Advertising & marketing services |
| `79600000` | Recruitment services |
| `45000000` | Construction work |
| `71000000` | Architecture, engineering & inspection |
| `85000000` | Health & social care services |
| `90000000` | Sewage, refuse, cleaning & environmental |
| `80000000` | Education & training |
| `60000000` | Transport services |
| `77000000` | Agriculture, forestry & horticulture |
| `50000000` | Repair & maintenance |
| `55000000` | Hotel, restaurant & catering |
| `35000000` | Security, fire-fighting, police & defence equipment |

Full list: [simap CPV codes](https://simap.ted.europa.eu/web/simap/cpv).

### Typical usage

- **Weekly sector monitor:** `noticeTypes: opportunities`, `daysBack: 7`, your `cpvCodes` or `keywords`, scheduled every Monday
- **Closing-soon alerts:** add `deadlineWithinDays: 14`
- **SME-sized contracts only:** `maxValue: 250000`
- **Competitor win tracker:** `noticeTypes: awards`, `daysBack: 14`, keyword = competitor or sector
- **High-value only:** `source: findATender`, `minValue: 1000000`

No API key, no login - both government APIs are free and official.

### Export & integrations

Results land in an Apify dataset - export **CSV, Excel, JSON**, or connect Google Sheets, Make, Zapier, Slack, and webhooks via Apify integrations.

### Data source & licence

Data comes from the official [Contracts Finder](https://www.contractsfinder.service.gov.uk/) and [Find a Tender](https://www.find-tender.service.gov.uk/) services, published by the Cabinet Office under the [Open Government Licence v3.0](http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/). This actor is not affiliated with the Cabinet Office or Crown Commercial Service. Notices are public record.

---

**Need something more custom?** Tenders cross-referenced with Companies House data, buyer contact enrichment, renewal-date prediction from expiring awards, or a fully managed procurement-monitoring pipeline - message me via my Apify profile and I'll build it.

# Actor input Schema

## `source` (type: `string`):

Which official register to pull from. Contracts Finder = below-threshold contracts + England; Find a Tender = high-value (above-threshold) contracts UK-wide. "Both" merges and dedupes them.
## `noticeTypes` (type: `string`):

Opportunities = open tenders you can still bid for (win-work mode). Awards = contracts already awarded, including winning supplier and value (competitive-intel mode).
## `daysBack` (type: `integer`):

Fetch notices published/updated in the last N days. Default 7 — schedule the actor weekly for a rolling monitor.
## `keywords` (type: `array`):

Keep notices whose title, description, or buyer name contains ANY of these terms (case-insensitive). E.g. ["software", "digital transformation", "CRM"]. Leave empty for all notices.
## `cpvCodes` (type: `array`):

Filter by CPV (Common Procurement Vocabulary) sector codes — prefix match, so "72000000" or just "72" matches all IT services. Common examples: 72000000 IT services, 48000000 software packages, 79000000 business/consulting services, 45000000 construction, 90000000 environmental/waste, 85000000 health & social care, 79340000 advertising & marketing, 80000000 education & training, 60000000 transport, 77000000 agriculture & forestry, 71000000 architecture & engineering.
## `minValue` (type: `integer`):

Keep notices worth at least this much (tender estimate, or awarded value for awards). Notices with no stated value are excluded when set.
## `maxValue` (type: `integer`):

Keep notices worth at most this much — useful to filter down to SME-sized contracts.
## `deadlineWithinDays` (type: `integer`):

"Closing soon" filter: only keep open tenders whose submission deadline is within the next N days. 0 disables the filter.
## `maxResults` (type: `integer`):

Maximum notices to return across both sources.

## Actor input object example

```json
{
  "source": "both",
  "noticeTypes": "opportunities",
  "daysBack": 7,
  "deadlineWithinDays": 0,
  "maxResults": 200
}
````

# 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 = {
    "source": "both",
    "noticeTypes": "opportunities",
    "daysBack": 7,
    "deadlineWithinDays": 0,
    "maxResults": 200
};

// Run the Actor and wait for it to finish
const run = await client.actor("devon_gtme/uk-tenders-monitor").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 = {
    "source": "both",
    "noticeTypes": "opportunities",
    "daysBack": 7,
    "deadlineWithinDays": 0,
    "maxResults": 200,
}

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

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

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

```

## CLI example

```bash
echo '{
  "source": "both",
  "noticeTypes": "opportunities",
  "daysBack": 7,
  "deadlineWithinDays": 0,
  "maxResults": 200
}' |
apify call devon_gtme/uk-tenders-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=devon_gtme/uk-tenders-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "UK Government Tenders & Contract Awards Monitor",
        "description": "Monitor UK public-sector tenders and contract awards from both Contracts Finder and Find a Tender in one feed. Track open opportunities or see which suppliers win. Filter by keyword, CPV code, value and deadline. Buyer, value, region, award and official link per record. No API key needed.",
        "version": "0.1",
        "x-build-id": "p3jiLX6WgCQiFKNdM"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/devon_gtme~uk-tenders-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-devon_gtme-uk-tenders-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/devon_gtme~uk-tenders-monitor/runs": {
            "post": {
                "operationId": "runs-sync-devon_gtme-uk-tenders-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/devon_gtme~uk-tenders-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-devon_gtme-uk-tenders-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "source": {
                        "title": "Data Source",
                        "enum": [
                            "both",
                            "contractsFinder",
                            "findATender"
                        ],
                        "type": "string",
                        "description": "Which official register to pull from. Contracts Finder = below-threshold contracts + England; Find a Tender = high-value (above-threshold) contracts UK-wide. \"Both\" merges and dedupes them.",
                        "default": "both"
                    },
                    "noticeTypes": {
                        "title": "Notice Types",
                        "enum": [
                            "opportunities",
                            "awards",
                            "both"
                        ],
                        "type": "string",
                        "description": "Opportunities = open tenders you can still bid for (win-work mode). Awards = contracts already awarded, including winning supplier and value (competitive-intel mode).",
                        "default": "opportunities"
                    },
                    "daysBack": {
                        "title": "Days Back",
                        "minimum": 1,
                        "maximum": 365,
                        "type": "integer",
                        "description": "Fetch notices published/updated in the last N days. Default 7 — schedule the actor weekly for a rolling monitor.",
                        "default": 7
                    },
                    "keywords": {
                        "title": "Keywords (OR-matched)",
                        "type": "array",
                        "description": "Keep notices whose title, description, or buyer name contains ANY of these terms (case-insensitive). E.g. [\"software\", \"digital transformation\", \"CRM\"]. Leave empty for all notices.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "cpvCodes": {
                        "title": "CPV Sector Codes",
                        "type": "array",
                        "description": "Filter by CPV (Common Procurement Vocabulary) sector codes — prefix match, so \"72000000\" or just \"72\" matches all IT services. Common examples: 72000000 IT services, 48000000 software packages, 79000000 business/consulting services, 45000000 construction, 90000000 environmental/waste, 85000000 health & social care, 79340000 advertising & marketing, 80000000 education & training, 60000000 transport, 77000000 agriculture & forestry, 71000000 architecture & engineering.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "minValue": {
                        "title": "Min Value (GBP)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep notices worth at least this much (tender estimate, or awarded value for awards). Notices with no stated value are excluded when set."
                    },
                    "maxValue": {
                        "title": "Max Value (GBP)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep notices worth at most this much — useful to filter down to SME-sized contracts."
                    },
                    "deadlineWithinDays": {
                        "title": "Deadline Within Days (0 = off)",
                        "minimum": 0,
                        "maximum": 365,
                        "type": "integer",
                        "description": "\"Closing soon\" filter: only keep open tenders whose submission deadline is within the next N days. 0 disables the filter.",
                        "default": 0
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum notices to return across both sources.",
                        "default": 200
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
