# UK Tender Pipeline Monitor

Track official Find a Tender procedures, deadlines, values and award changes. Export one compiled record per OCID with source links and optional saved comparisons.

Canonical product page: https://mayd-it.com/data-tools/actors/uk-tender-pipeline-monitor/
Public Actor: https://apify.com/maydit/uk-tender-pipeline-monitor

## Example input

```json
{
  "maxResults": 3,
  "maxSourcePages": 1
}
```

## Full guide

![UK Tender Pipeline Monitor - procurement change intelligence](https://api.apify.com/v2/key-value-stores/cCyrofyNNh9lwffXB/records/uk-tender-pipeline-monitor-933c5e9297b9.png?signature=1GZJupKsPDFrhhCYl9pcl)

# Keep a UK bid pipeline current

Turn official Find a Tender notices into **one current procurement observation per OCID**. Watch deadlines, published values, buyer details, lots, awards and document links, then compare the fields with your last saved observation.

Built for bid teams, procurement analysts and suppliers maintaining a shortlist. The Actor discovers a bounded window of recent notices and resolves each procedure through the official **compiled OCDS record**, so repeated notices do not become duplicate pipeline entries.

[Run in Apify Console](https://console.apify.com/actors?search=uk-tender-pipeline-monitor) · [Output](#what-you-receive) · [Watchlist](#watch-a-named-procedure) · [Coverage](#coverage-and-boundaries)

## Start with three procedures

```json
{
  "maxResults": 3,
  "maxSourcePages": 1
}
```

Run the Actor, open **Dataset** for observations, and open **Run report** for checked procedures, failures and limits. The default inspects up to 20 recent official releases and saves at most three matching procedures. It requires no account or API key for the source.

## What you receive

| Fields | Use in your workflow |
| --- | --- |
| `ocid`, `title`, `buyerId`, `buyerName` | Stable procedure identity and CRM label |
| `tenderStatus`, `tenderDeadline`, `enquiryDeadline` | Review published status and submission dates |
| `value`, `cpvCodes`, `deliveryRegions` | Published amount/currency and sector/geographic screening |
| `lots`, `awards`, `documents` | Structured lot/award summaries and links to procurement documents |
| `noticeIds`, `latestReleaseDate`, `sourceUrl` | Trace the compiled record back to the official source |
| `contentHash`, `comparisonStatus`, `changedFields` | Route new or changed observations |
| `previous`, `previousObservedAt`, `observedAt` | Explain a change using the previous saved snapshot |

For example, retained official source evidence from **15 October 2026** contains procedure `ocds-h6vhtk-0784ad`, Sevenoaks District Council's sports-hall roof replacement, with GBP 120,000 excluding tax and a published tender deadline of 6 November 2026. This dated example is not a promise that the opportunity is still open.

## Watch a named procedure

```json
{
  "ocids": ["ocds-h6vhtk-0784ad"],
  "maxResults": 3,
  "comparePrevious": true,
  "snapshotName": "roof-procurement-demo"
}
```

1. Save your exact OCIDs in a private Apify task.
2. Use a dedicated `snapshotName`; the first comparison emits `new` and establishes history after each row is saved.
3. On later runs, route `changed` rows to review. `changedFields` identifies top-level fields; `previous` lets your integration inspect the old deadline or amount.
4. Set `onlyChanges: true` when you want unchanged observations counted in `SUMMARY` without additional dataset rows. Empty output can therefore be a successful no-change check.
5. Upsert into your own spreadsheet or CRM by `ocid`. Check the run's own summary before treating missing output as meaningful.

Use **one writer per snapshot namespace and filter scope**. A concurrent history change prevents overwrite and makes the run partial; it is not a distributed lock. Only confirmed saved rows advance history. No missing procedure becomes a deletion signal.

## Inspect recent award procedures

```json
{
  "stages": ["award"],
  "maxResults": 3,
  "maxSourcePages": 1
}
```

`stages` selects notices during discovery. The compiled record represents the current procedure and can include later changes. Optional `keywords` match title, description or buyer; `cpvPrefixes` match published item codes. OR applies within each filter list, AND between keyword and CPV lists. Filtering a small window can correctly return no matches.

## Pricing and controls

The base result price is **$0.005 per saved procurement observation**, plus the Actor's published start event. Your Apify plan may apply its displayed discount. A no-change row skipped by `onlyChanges`, a failed source request, or a filtered record is not a paid result.

- `maxResults`: 1-100 confirmed rows, default 3.
- `maxSourcePages`: 1-5 discovery pages of up to 20 releases each, default 1.
- `ocids`: up to 50 exact procedures; bypasses discovery.
- `maxRunSeconds`: default 240, also constrained by the platform timeout with a 25-second reserve.
- Set a platform spending limit appropriate for your task. A spending stop is explicit in `SUMMARY`; check saved counts before downstream actions.

## Coverage and boundaries

**Source:** Find a Tender only. This does not aggregate Contracts Finder, devolved portals or all UK purchasing. The source exports OCDS records under the Open Government Licence.

The Actor reads current compiled records, not an as-of reconstruction. `updatedFrom` and `updatedTo` filter the source's release last-update window in its documented timezone-less `YYYY-MM-DDTHH:MM:SS` format. They do not filter deadlines or freeze the compiled record at that date. Date and stage discovery filters cannot be combined with an explicit watchlist.

Published dates, amounts and labels are preserved. Missing optional fields remain `null` or empty arrays; they are not estimated. This is a selected metadata projection, not every OCDS field: it does not download attachments, collect contact details, submit bids or assess eligibility. Supplier organization names in awards remain public procurement evidence.

`status: "ok"` means the configured bounded work succeeded. Read `coverageComplete`, `discoveryComplete`, `stoppedOnSourcePageLimit`, `sourcesNotReached` and `stoppedOnMaxResults` to understand its extent. Reaching a configured sample cap is distinct from a failed source. Partial source failures and time/spending stops are explicit; an all-failed run fails instead of emitting error rows.

## Source references and support

- [Official Find a Tender developer documentation](https://www.find-tender.service.gov.uk/Developer/Documentation)
- [Release package API and discovery parameters](https://www.find-tender.service.gov.uk/apidocumentation/1.0/GET-ocdsReleasePackages)
- [Record package API and compiled records](https://www.find-tender.service.gov.uk/apidocumentation/1.0/GET-ocdsRecordPackages)

For source changes, support or data correction requests, use this Actor's **Issues** tab or **bmay@mayd-it.com**. Include a run URL and OCID; do not send credentials or private bid documents.
