UK Public Procurement Monitor (Find a Tender+Contracts Finder)
Pricing
from $5.00 / 1,000 procurement notice delivereds
UK Public Procurement Monitor (Find a Tender+Contracts Finder)
Unified monitor and Streamable HTTP MCP server for UK public procurement notices across Find a Tender and Contracts Finder (OCDS 1.1.5).
Pricing
from $5.00 / 1,000 procurement notice delivereds
Rating
0.0
(0)
Developer
Harsh
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 hours ago
Last modified
Categories
Features
Share
UK Public Procurement Monitor (Find a Tender + Contracts Finder)
A production-grade, unified procurement monitoring Actor and Streamable HTTP Model Context Protocol (MCP) server for UK public sector opportunities. Automatically ingests, normalizes, deduplicates, and filters tenders and contract awards from both Find a Tender (FTS) and Contracts Finder (CF) via native Open Contracting Data Standard (OCDS 1.1.5) APIs.
⚡ Model Context Protocol (MCP) Integration
Connect this Actor directly to Claude Desktop, Cursor IDE, ChatGPT, or custom AI agent frameworks to give your AI real-time search capabilities across UK government procurement.
MCP Endpoint URL
https://mcp.apify.com/?tools=capitalist_developer/uk-procurement-unified-monitor
Claude Desktop Configuration (claude_desktop_config.json)
{"mcpServers": {"uk-procurement": {"command": "npx","args": ["-y","mcp-remote-client","https://mcp.apify.com/?tools=capitalist_developer/uk-procurement-unified-monitor"]}}}
Available MCP Tool: search_uk_tenders
AI assistants can directly query tenders using flexible parameters:
keywords: Array of search terms (e.g.["software", "cloud", "cybersecurity"])cpvCodes: CPV prefixes or full codes (e.g.["72000000"])portals:["find_a_tender", "contracts_finder"]stages:["tender", "planning", "award"]minValueGbp/maxValueGbp: Contract budget thresholdsdaysBack: Number of lookback days (default7)maxItems: Number of notices to return
🚀 Key Features
- Unified Ingestion: Ingests from both primary UK portals into one consistent, flattened schema:
- Find a Tender Service (FTS): High-value public tenders above GPA thresholds.
- Contracts Finder (CF): Central government and wider public sector opportunities from £12,000+.
- Zero Browser Overhead: Pure Node.js 20 ESM engine built with
undiciandzod. Ultra-fast, lightweight (256MB RAM), and no browser or Playwright overhead. - Resilient & Self-Healing: Automatic 3-retry exponential backoff handling HTTP 429 rate limits, 5xx server errors, and intermittent government API maintenance.
- Stateful Incremental Runs: Optional
onlyNewSinceLastRunmode uses a dedicated Key-Value Store (uk-tenders-seen-ids) with a 50,000-ID FIFO cache to ensure you only receive fresh, unread tenders. - Pay-Per-Event (PPE) Support: Supports granular pay-per-event pricing (
mcp-lookupflat query fee andtender-noticeper delivered notice) with immediate budget-cap enforcement.
🎯 High-Value Use Cases
- B2B GovTech & SaaS Sales Prospecting: Identify commercial tender opportunities for software, cloud hosting, AI solutions, and managed IT services the minute they are published.
- Consulting & Defense Bidding Alerts: Track frameworks, engineering tenders, and advisory RFPs across local councils, the NHS, and central ministries.
- Automated Pipeline Integrations:
Run on scheduled cron intervals (hourly or daily) with
onlyNewSinceLastRun=trueand push newly announced tenders directly to Slack, Teams, or your CRM via webhooks. - Competitor & Award Analysis:
Inspect
awardedSuppliersand historical contract values to monitor vendor incumbency and government spending patterns.
📋 Input Configuration
| Parameter | Type | Default | Description |
|---|---|---|---|
keywords | Array of strings | [] | Keywords to filter titles and descriptions (case-insensitive). |
cpvCodes | Array of strings | [] | Common Procurement Vocabulary codes (e.g. ["72000000"]). |
portals | Array of strings | ["find_a_tender", "contracts_finder"] | Procurement portals to search (find_a_tender, contracts_finder). |
stages | Array of strings | ["tender", "planning"] | Procurement stages (tender, planning, award). |
minValueGbp | Integer | null | Minimum contract value filter in GBP. |
maxValueGbp | Integer | null | Maximum contract value filter in GBP. |
daysBack | Integer | 7 | Number of days back to look for updated/published notices. |
onlyNewSinceLastRun | Boolean | false | When true, filters out tenders seen in previous runs. |
maxItems | Integer | 100 | Maximum number of notices to return and save to dataset. |
Sample INPUT.json
{"keywords": ["software", "cloud"],"cpvCodes": ["48000000"],"portals": ["find_a_tender", "contracts_finder"],"stages": ["tender"],"daysBack": 7,"maxItems": 10,"onlyNewSinceLastRun": false}
📊 Sample Output (Flattened Dataset Item)
{"ocid": "ocds-b5fd17-c8cd22a2-0eaa-4706-83c7-2cc7e56bf485","releaseId": "3d3f328e-bb59-4220-bd34-085bb4e72eef-921030","sourcePortal": "contracts_finder","title": "Joint Contract for Supply and support My Council Services Digital Transformation Platform for Waste & Environmental Services","description": "Joint Contract for Supply and support My Council Services Digital Transformation Platform for Waste & Environmental Services under G-Cloud 14 Framework Agreement (RM1557.14) Lots 1 & 3","buyerName": "Redditch Borough & Bromsgrove District Councils","cpvCodes": ["48000000"],"stage": "tender","valueAmount": null,"currency": "GBP","publishedDate": "2026-11-09T13:12:19Z","deadlineDate": "2025-03-28T12:00:00Z","noticeUrl": "https://www.contractsfinder.service.gov.uk/Notice/3d3f328e-bb59-4220-bd34-085bb4e72eef","documentPdfUrls": [],"awardedSuppliers": []}
🛠️ Architecture & Core Components
uk-procurement-unified-monitor/├── .actor/│ ├── actor.json # Standby mode, MCP path (/mcp), 256MB-512MB RAM│ ├── input_schema.json # Zod/JSON input schema specification│ ├── output_schema.json # Unified table view definition│ ├── dataset_schema.json # Dataset overview transformation│ └── pay_per_event.json # Pay-per-event pricing (mcp-lookup, tender-notice)├── src/│ ├── core/│ │ ├── lookup.js # Undici OCDS 1.1.5 client with 3-retry exponential backoff│ │ ├── normalize.js # Normalizer & in-memory keywords/CPV/value filter│ │ └── state.js # Key-Value Store deduplication (50,000 ID capacity)│ ├── mcp/│ │ └── server.js # Streamable HTTP MCP Server (/mcp) with Zod tool│ └── main.js # Standby MCP vs. Batch Runner router├── Dockerfile # Node 20-slim lean production container└── package.json # ESM project definition
🧪 Local Testing
Run Batch Mode with charging logs enabled:
$ACTOR_USE_CHARGING_LOG_DATASET=1 apify run --input-file=test-input.json
Run Standby MCP Server locally:
$STANDBY_MODE=1 node src/main.js
Then send a test JSON-RPC request to http://localhost:4321/mcp:
curl -X POST http://localhost:4321/mcp \-H "Content-Type: application/json" \-H "Accept: application/json, text/event-stream" \-d '{"jsonrpc": "2.0","id": 1,"method": "tools/call","params": {"name": "search_uk_tenders","arguments": {"keywords": ["software"],"daysBack": 7,"maxItems": 5}}}'
📄 License
ISC © Capitalist_Builder