# UK Procurement Alerts – Contracts Finder + Find a Tender (`conceivable_extension/uk-procurement-alerts`) Actor

Monitor UK government procurement portals for new contract opportunities matching your keywords, CPV codes, region, and value filters. Tracks seen notices to avoid duplicates. Only charges on new matches. Affordable alternative to Tussell (£16,500/yr).

- **URL**: https://apify.com/conceivable\_extension/uk-procurement-alerts.md
- **Developed by:** [joseph fadero](https://apify.com/conceivable_extension) (community)
- **Categories:** Automation, Lead generation, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $60.00 / 1,000 new contract match founds

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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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 Procurement Alerts – Contracts Finder + Find a Tender

**Monitor UK government contracts for £0.06/match instead of £16,500/year.**

Tussell and BiP Solutions charge thousands per year for alerts on publicly available government data. This actor monitors Contracts Finder and Find a Tender Service, matches your keywords and CPV codes, tracks what you've already seen, and only charges when genuinely new opportunities are found.

### What it does

1. Searches Contracts Finder and/or Find a Tender for your keywords
2. Filters by CPV code, region, contract value, and notice type
3. Remembers previously seen notices (Key-Value Store persists across runs)
4. Returns only new opportunities not yet processed — plus seen notices for reference
5. Flags high-value contracts (£100k+) with an extra charge signal

### Data sources

- **Contracts Finder** — free, open UK government portal; all contract values; OCDS-compliant
- **Find a Tender Service** — above-threshold procurement only (>£138k); post-Brexit replacement for OJEU

Both are published under the Open Government Licence. No auth required, no rate limits.

### Use cases

- SMEs in IT, consultancy, construction tracking live opportunities
- Freelance bid writers managing keyword watchlists for multiple clients
- Sales teams building public-sector pipeline
- Competitive intel via Contract Award Notices (who won what)

### Pricing

| Event | Price |
|---|---|
| Run started | £0.05 |
| Notice scanned | £0.001 |
| New match found | £0.06 |
| High-value match (£100k+) | +£0.04 |

**Typical weekly run: 5 keywords × 50 notices × £0.001 = £0.25 scanning + £0.06–0.10 per new match**

### Input

| Field | Default | Description |
|---|---|---|
| keywords | required | Search terms — each creates a watchlist |
| cpvCodes | [] | CPV codes to filter by (optional) |
| regions | [] | UK regions to filter (empty = all UK) |
| minValueGbp | 0 | Minimum contract value filter |
| maxValueGbp | 0 | Maximum contract value filter (0 = no limit) |
| noticeTypes | contract_notice | Notice types to return |
| sources | contracts_finder | Portals to monitor |
| publishedWithinDays | 7 | Lookback window in days |
| maxResultsPerKeyword | 50 | Max notices per keyword per source |
| excludeKeywords | [] | Words that disqualify a notice |

### Output fields

`noticeId`, `source`, `noticeType`, `isNew`, `title`, `description`, `buyerName`, `buyerType`, `publishedAt`, `deadlineAt`, `awardedAt`, `valueLow`, `valueHigh`, `valueSingle`, `isHighValue`, `cpvCodes`, `region`, `suitableForSme`, `noticeUrl`, `matchedKeyword`, `relevanceScore`, `awardedTo`, `awardedValue`, `scrapedAt`, `chargedEvent`

### Schedule setup

Run daily or weekly via Apify Scheduler. Connect to n8n: filter `isNew: true` + `isHighValue: true` → Slack alert with title, buyer, deadline, and noticeUrl.

# Actor input Schema

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

Keywords to match in contract title and description. Each keyword creates a separate watchlist. Examples: 'software development', 'AI consultancy', 'cybersecurity'.
## `cpvCodes` (type: `array`):

EU Common Procurement Vocabulary codes to filter by. Optional. E.g. '72000000' for IT services. Leave empty for all categories.
## `regions` (type: `array`):

UK regions to filter by. Leave empty for all UK. Examples: 'London', 'South East', 'Yorkshire and the Humber'.
## `minValueGbp` (type: `integer`):

Only return contracts worth at least this amount in GBP. Set to 0 for no minimum.
## `maxValueGbp` (type: `integer`):

Only return contracts worth up to this amount in GBP. Set to 0 for no maximum.
## `noticeTypes` (type: `array`):

Types of procurement notice to return. Contract notices are live opportunities; award notices reveal who won.
## `sources` (type: `array`):

Which UK government procurement portals to monitor. Contracts Finder covers all values; Find a Tender covers above-threshold (>£138k) only.
## `publishedWithinDays` (type: `integer`):

Only return notices published within this many days. Default 7 ensures weekly runs don't miss anything.
## `maxResultsPerKeyword` (type: `integer`):

Maximum notices to check per keyword per source per run.
## `excludeKeywords` (type: `array`):

Exclude notices whose title or description contains these words. Useful for filtering out irrelevant categories.

## Actor input object example

```json
{
  "keywords": [
    "software development",
    "digital transformation"
  ],
  "cpvCodes": [],
  "regions": [],
  "minValueGbp": 0,
  "maxValueGbp": 0,
  "noticeTypes": [
    "contract_notice"
  ],
  "sources": [
    "contracts_finder"
  ],
  "publishedWithinDays": 7,
  "maxResultsPerKeyword": 50,
  "excludeKeywords": []
}
````

# 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 = {
    "keywords": [
        "software development",
        "digital transformation"
    ],
    "cpvCodes": [],
    "regions": [],
    "excludeKeywords": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("conceivable_extension/uk-procurement-alerts").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 = {
    "keywords": [
        "software development",
        "digital transformation",
    ],
    "cpvCodes": [],
    "regions": [],
    "excludeKeywords": [],
}

# Run the Actor and wait for it to finish
run = client.actor("conceivable_extension/uk-procurement-alerts").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 '{
  "keywords": [
    "software development",
    "digital transformation"
  ],
  "cpvCodes": [],
  "regions": [],
  "excludeKeywords": []
}' |
apify call conceivable_extension/uk-procurement-alerts --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "UK Procurement Alerts – Contracts Finder + Find a Tender",
        "description": "Monitor UK government procurement portals for new contract opportunities matching your keywords, CPV codes, region, and value filters. Tracks seen notices to avoid duplicates. Only charges on new matches. Affordable alternative to Tussell (£16,500/yr).",
        "version": "1.0",
        "x-build-id": "oadN7AB2Q9AL1IUTq"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/conceivable_extension~uk-procurement-alerts/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-conceivable_extension-uk-procurement-alerts",
                "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/conceivable_extension~uk-procurement-alerts/runs": {
            "post": {
                "operationId": "runs-sync-conceivable_extension-uk-procurement-alerts",
                "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/conceivable_extension~uk-procurement-alerts/run-sync": {
            "post": {
                "operationId": "run-sync-conceivable_extension-uk-procurement-alerts",
                "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",
                "required": [
                    "keywords"
                ],
                "properties": {
                    "keywords": {
                        "title": "Search Keywords",
                        "type": "array",
                        "description": "Keywords to match in contract title and description. Each keyword creates a separate watchlist. Examples: 'software development', 'AI consultancy', 'cybersecurity'.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "cpvCodes": {
                        "title": "CPV Codes",
                        "type": "array",
                        "description": "EU Common Procurement Vocabulary codes to filter by. Optional. E.g. '72000000' for IT services. Leave empty for all categories.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "regions": {
                        "title": "UK Regions",
                        "type": "array",
                        "description": "UK regions to filter by. Leave empty for all UK. Examples: 'London', 'South East', 'Yorkshire and the Humber'.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "minValueGbp": {
                        "title": "Minimum Contract Value (£)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only return contracts worth at least this amount in GBP. Set to 0 for no minimum.",
                        "default": 0
                    },
                    "maxValueGbp": {
                        "title": "Maximum Contract Value (£)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only return contracts worth up to this amount in GBP. Set to 0 for no maximum.",
                        "default": 0
                    },
                    "noticeTypes": {
                        "title": "Notice Types",
                        "type": "array",
                        "description": "Types of procurement notice to return. Contract notices are live opportunities; award notices reveal who won.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "contract_notice",
                                "prior_information_notice",
                                "contract_award_notice",
                                "dynamic_purchasing_system"
                            ],
                            "enumTitles": [
                                "Contract Notice (live opportunities)",
                                "Prior Information Notice (upcoming opportunities)",
                                "Contract Award Notice (who won – competitive intel)",
                                "Dynamic Purchasing System"
                            ]
                        },
                        "default": [
                            "contract_notice"
                        ]
                    },
                    "sources": {
                        "title": "Procurement Portals",
                        "type": "array",
                        "description": "Which UK government procurement portals to monitor. Contracts Finder covers all values; Find a Tender covers above-threshold (>£138k) only.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "contracts_finder",
                                "find_a_tender"
                            ],
                            "enumTitles": [
                                "Contracts Finder (below-threshold + above-threshold)",
                                "Find a Tender Service (above-threshold only, >£138k)"
                            ]
                        },
                        "default": [
                            "contracts_finder"
                        ]
                    },
                    "publishedWithinDays": {
                        "title": "Published Within Days",
                        "minimum": 1,
                        "maximum": 90,
                        "type": "integer",
                        "description": "Only return notices published within this many days. Default 7 ensures weekly runs don't miss anything.",
                        "default": 7
                    },
                    "maxResultsPerKeyword": {
                        "title": "Max Results Per Keyword",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum notices to check per keyword per source per run.",
                        "default": 50
                    },
                    "excludeKeywords": {
                        "title": "Exclude Keywords",
                        "type": "array",
                        "description": "Exclude notices whose title or description contains these words. Useful for filtering out irrelevant categories.",
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
