UK Public Procurement Monitor (Find a Tender+Contracts Finder) avatar

UK Public Procurement Monitor (Find a Tender+Contracts Finder)

Pricing

from $5.00 / 1,000 procurement notice delivereds

Go to Apify Store
UK Public Procurement Monitor (Find a Tender+Contracts Finder)

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

Harsh

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 hours ago

Last modified

Features

Limited permissionsSingle-tenantServer interface

Share

UK Public Procurement Monitor (Find a Tender + Contracts Finder)

Apify Actor Node.js OCDS Standard Model Context Protocol

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 thresholds
  • daysBack: Number of lookback days (default 7)
  • 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 undici and zod. 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 onlyNewSinceLastRun mode 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-lookup flat query fee and tender-notice per delivered notice) with immediate budget-cap enforcement.

🎯 High-Value Use Cases

  1. B2B GovTech & SaaS Sales Prospecting: Identify commercial tender opportunities for software, cloud hosting, AI solutions, and managed IT services the minute they are published.
  2. Consulting & Defense Bidding Alerts: Track frameworks, engineering tenders, and advisory RFPs across local councils, the NHS, and central ministries.
  3. Automated Pipeline Integrations: Run on scheduled cron intervals (hourly or daily) with onlyNewSinceLastRun=true and push newly announced tenders directly to Slack, Teams, or your CRM via webhooks.
  4. Competitor & Award Analysis: Inspect awardedSuppliers and historical contract values to monitor vendor incumbency and government spending patterns.

📋 Input Configuration

ParameterTypeDefaultDescription
keywordsArray of strings[]Keywords to filter titles and descriptions (case-insensitive).
cpvCodesArray of strings[]Common Procurement Vocabulary codes (e.g. ["72000000"]).
portalsArray of strings["find_a_tender", "contracts_finder"]Procurement portals to search (find_a_tender, contracts_finder).
stagesArray of strings["tender", "planning"]Procurement stages (tender, planning, award).
minValueGbpIntegernullMinimum contract value filter in GBP.
maxValueGbpIntegernullMaximum contract value filter in GBP.
daysBackInteger7Number of days back to look for updated/published notices.
onlyNewSinceLastRunBooleanfalseWhen true, filters out tenders seen in previous runs.
maxItemsInteger100Maximum 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