# UK Tender Deadline & Cancellation Changes (`usta/procurement-amendment-deadline-deltas`) Actor

For bid teams: compare official Find a Tender notice histories for your procurement watchlist. Get changed deadlines and statuses with old/new values and source links. Pay only for delivered changed-notice rows.

- **URL**: https://apify.com/usta/procurement-amendment-deadline-deltas.md
- **Developed by:** [US Tech Automations](https://apify.com/usta) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$20.00 / 1,000 changed notices

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## UK Tender Deadline & Cancellation Changes

See which published deadlines or statuses changed before updating your bid calendar. This Actor compares official UK Find a Tender notice histories for a procurement watchlist and returns one evidence row per changed notice.

**Start with the prefilled historical example**, then replace the procurement ID and change window with your own. You receive the old value, new value, publication time, exact source links and source hashes. A deadline changing from16 October 2026 at 12:00 BST to30 October 2026 at 12:00 GMT is a real example in the supplied history; it is not a fabricated demo or a promise of future results.

### Price and output

**0.02 USD per delivered changed-notice row. No Actor start fee.** An unchanged notice, invalid input or unavailable source produces no new paid row. One notice with both a deadline and status change is one row. maxEvents limits row count;100 rows cost at most 2 USD in Actor event charges. Apify account and platform terms apply. This is payment for automated comparison and structured output; the underlying government data is free.

Use the Changes output for the dataset. Read the Status output before relying on a run: CHANGES, NO\_NEW\_CHANGES, PARTIAL, INVALID\_INPUT, UNKNOWN and DELIVERY\_UNKNOWN have different meanings. A successful container exit alone does not mean source coverage was established. If any requested history cannot be fetched or interpreted, no new rows are pushed for the watchlist. A delivery error can be ambiguous: inspect the dataset before retrying.

### Inputs and repeated runs

Supply 1–100 `ocds-h6vhtk-xxxxxx` identifiers from Find a Tender and a timezone-aware `publishedAfter` timestamp. Only changes published strictly after that time are eligible. The API history supplies earlier values for comparison.

Copy `nextSeenEventIds` from OUTPUT into `seenEventIds` on the next run, keeping the same change window while retrieving remaining rows. This suppresses repeat charges for those delivered events. **Separate runs do not automatically share history.** Omitting previously delivered IDs may charge for the same historical change again. Keep at most4,500 seen IDs; archive a completed window before advancing it. A capped or partial batch does not justify advancing the timestamp past undelivered events.

### What the comparison means

- Timezone-equivalent instants do not produce a deadline change. Small published corrections remain small deltas, not urgency claims.
- Date-only deadlines keep their original precision. Switching between a date and a timestamp is marked PRECISION\_CHANGED, without an invented time difference.
- Omitted fields retain the last explicit observation. An explicit null breaks that comparison chain and is flagged as uncertain.
- Cancelled or withdrawn status changes are reported as published. The Actor does not infer that a tender is open, that a bid is eligible, or that a deadline can safely be relied on without checking the official notice.

The watchlist is limited to this official source, 1,000 releases and 10 MiB per procurement, 20 MiB per run and a 65-second retrieval budget. Oversized, incomplete or contradictory histories produce UNKNOWN. No attachments, amendment PDFs, bid submission, notifications, buyer-account login or arbitrary-site scraping are included. Native portal alerts may be sufficient if you do not need structured old/new values across a watchlist.

### Source and support

Source: [UK Find a Tender API](https://www.find-tender.service.gov.uk/Developer/Documentation). Contains public sector information licensed under the [Open Government Licence v3.0](https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/). This product is independent of the Cabinet Office.

Use the Actor's Issues tab for reproducible errors. Include the run ID and procurement ID; do not post credentials or confidential bid material. No uptime, response-time, tender-win or business-outcome guarantee is made.

# Actor input Schema

## `procurementIds` (type: `array`):

1–100 OCDS procurement identifiers from official notice pages. Other sites and arbitrary URLs are not supported.

## `publishedAfter` (type: `string`):

Exclusive timestamp with timezone, for example 2026-09-15T00:00:00Z. Historical example is intentional; choose your monitoring window.

## `seenEventIds` (type: `array`):

Copy nextSeenEventIds from the previous OUTPUT. Without them a new run can return and charge for the same historical changes. At most 4,500 IDs.

## `maxEvents` (type: `integer`):

At 0.02 USD per delivered row, 100 rows cost at most 2 USD in Actor event charges. Apify account terms apply. Failed source reads and unchanged notices produce no paid rows.

## Actor input object example

```json
{
  "procurementIds": [
    "ocds-h6vhtk-06f401"
  ],
  "publishedAfter": "2026-09-15T00:00:00Z",
  "seenEventIds": [],
  "maxEvents": 10
}
```

# Actor output Schema

## `changes` (type: `string`):

No description

## `status` (type: `string`):

No description

# 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 = {
    "procurementIds": [
        "ocds-h6vhtk-06f401"
    ],
    "publishedAfter": "2026-09-15T00:00:00Z",
    "maxEvents": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("usta/procurement-amendment-deadline-deltas").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 = {
    "procurementIds": ["ocds-h6vhtk-06f401"],
    "publishedAfter": "2026-09-15T00:00:00Z",
    "maxEvents": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("usta/procurement-amendment-deadline-deltas").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "procurementIds": [
    "ocds-h6vhtk-06f401"
  ],
  "publishedAfter": "2026-09-15T00:00:00Z",
  "maxEvents": 10
}' |
apify call usta/procurement-amendment-deadline-deltas --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,usta/procurement-amendment-deadline-deltas"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/D83hliRHidc7HEGRW/builds/RqjaT9tKhg01hpNyF/openapi.json
