# Standards Revision Monitor - Standards Watchtower (`leons0016/standards-revision-monitor`) Actor

Standards revision monitor for ISO designations (ISO only; IEC, CEN, BSI, DIN and ASTM are not covered): stage changes, amendments, superseded-by links and withdrawals, a dated register and CSV. Metadata only, from ISO Open Data (ODC-By). Plain HTTP, no browser.

- **URL**: https://apify.com/leons0016/standards-revision-monitor.md
- **Developed by:** [Leon s](https://apify.com/leons0016) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.20 / 1,000 designation checkeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Standards Revision Monitor - Standards Watchtower

**Standards revision monitor for the ISO standards on your watchlist.** Enter the designations you rely on (ISO 9001, ISO/IEC 27001, ISO 13485 ...). Every run looks each one up in ISO's own open metadata, compares its **stage** with the last run and tells you when a standard is **published, amended, superseded or withdrawn**, with the superseding document, the dates and a dated row per check for your quality file. Metadata only, never the text of a standard. Plain HTTP, no browser, no proxy, no login.

Actor page: `https://apify.com/leons0016/standards-revision-monitor`

### Read this first: narrow coverage

- **ISO only.** The Actor reads one source, ISO's own open metadata file. Designations of IEC, CEN/CENELEC, BSI, DIN and ASTM are **not covered**: such a line returns a `blocked` row with the reason and is not charged. It does not replace a subscription to a national body's own service.
- **Metadata only.** Designation, title, stage, dates and links between documents. Never the text of a standard.
- **Not real time.** ISO refreshes the open data file daily; a change is seen on the first run after that. The first run of a designation is a baseline and reports no change.
- **Not legal advice,** and not a substitute for the standards body's own record.

This work is based on the `iso_deliverables_metadata` dataset from ISO Open Data (https://www.iso.org/open-data.html), licensed under the ODC Attribution License (ODC-By) v1.0. Contains information from ISO Open Data. This Actor is not affiliated with or endorsed by ISO. It is an independent product of LeonS and is not affiliated with, endorsed by or sponsored by Apify Technologies, IEC, CEN/CENELEC, BSI, DIN, ASTM or any other third party whose name is mentioned. All product and company names are trademarks of their respective owners and are used only to identify the data source or the standards the Actor works with.

It is built for quality and regulatory-affairs teams (medical devices, automotive, aerospace, construction), notified bodies and standards librarians who need to know when a standard in their register has moved, without checking catalogue pages by hand.

### Use cases

- **Standards register upkeep.** One row per designation with the edition in force, its stage, publication date and what it supersedes or is superseded by. Export it as CSV.
- **Revision alerts.** Run weekly and send changes to Slack, email or a webhook with Apify integrations.
- **Early warning.** See the next edition in development (draft, enquiry, approval) before it is published, and the amendments and corrigenda issued against the edition you use.
- **Audit evidence.** Every check is a dated row. "On 30 Oct 2026 ISO 9001:2026 was in force (stage 60.60), ISO 9001:2015 withdrawn (95.99)".
- **Transition planning.** When an edition is withdrawn, the row names the document that replaces it.

### What you get

- **Stage transitions, not page diffs.** The Actor compares lifecycle stages (under development, published, amended, superseded, withdrawn, cancelled), not text. A re-worded web page is not a change.
- **Supersedes and superseded-by links** between editions, amendments and corrigenda.
- **Effective dates.** Publication date for every document. With the optional page read: the date the current stage was reached and the withdrawal date.
- **The next edition in development**, with its stage, kept apart from the edition in force.
- **A dated record per check.** `checkedAt`, `firstSeenOn`, `lastChangeOn`, `checkNumber` and a short `recordHash` on every row.
- **One row per watchlist line, always.** Every line gets exactly one row with the result `ok`, `not-found` or `blocked` and a sentence that says why. The run summary is the last row. A run is never empty.
- **CSV that opens in Excel.** `REGISTER.csv` (all rows, fixed columns) and `CHANGES.csv` in the run's key-value store.

### Which standards bodies are covered (and which are not)

| Body | Covered | Why |
|---|---|---|
| **ISO** (also ISO/IEC, ISO/ASTM, ISO/TS, ISO/TR, ISO/PAS, ISO Guides) | Yes | ISO publishes the metadata of all its deliverables as **ISO Open Data**, licence ODC-By 1.0, meant for use in automated systems. Updated daily. |
| IEC | No | The IEC Webstore terms prohibit "robots, scripts, or any other manual or automatic mechanism to data mine or scrape IEC Products" and require written permission for any use of the site material. |
| CEN / CENELEC | No | The robots.txt of the standards catalogue is `Disallow: /` for everyone. |
| BSI | No | No designation lookup without JavaScript, and no terms on the catalogue that allow automated access. |
| DIN | No | DIN Media's terms (clause 5.6) require written consent for "the automated extraction of content". |
| ASTM | No | No terms that allow automated access were found; the copyright page prohibits AI use; ASTM sells its own tracker. |

A watchlist line for a body that is not covered still gets its row: `blocked`, with the reason. For national adoptions such as `EN ISO 13485` the row suggests watching the international document `ISO 13485`. The decisions, with the exact terms sentences, are in the Actor's source check (`docs/SOURCES_CHECK.md`) and were taken on 30 October 2026. They are re-checked before any body is added.

Honest summary: **this Actor covers ISO only.** It does not replace a subscription to a national body's own service for IEC, EN, BS, DIN or ASTM documents.

### How to use

1. Open the Actor and enter your designations under **Designations**, one per line. `ISO 9001` follows the latest edition and the next one in development; `ISO 9001:2015` follows exactly that edition (withdrawal, replacement, amendments); `ISO/IEC 27001:2022/Amd 1:2024` follows one amendment.
2. Press **Start**. The first run records a baseline for each designation (no changes are reported yet).
3. Click **Save as new task** and add a **Schedule**, for example weekly. The last known stage of every designation is kept in a key-value store in your account under **Watchlist name**, which is how the next run finds changes.
4. Add Slack, Gmail or a webhook under **Integrations**, or fill the Slack and webhook fields.

Use one **Watchlist name** per list (for example per client). Two tasks with the same name share one baseline.

### Input

| Field | What it does |
|---|---|
| Designations | One per line, 1 to 500. Lines starting with `#` and duplicates are ignored. Default: 12 common management-system standards. |
| Watchlist name | Where the last known state is kept (letters, digits, hyphens). Default `default`. |
| Next edition in development | `milestones` (default: a new draft, and each move to the next phase), `every-stage` (each ballot and comment period), `off`. |
| Read the ISO page of changed standards | Off by default. On: for designations that changed, the Actor also reads the public ISO page (at most 25 per run, one every 5 seconds as ISO's robots.txt asks) to add `stageDate` and `withdrawalDate`. |
| Webhook URL, Slack incoming webhook | Optional, stored as secrets. |

### Output

One dataset row per watchlist line plus a run summary. Main fields: `designation`, `title`, `status`, `reason`, `lifecycle`, `stageCode`, `stageName`, `publicationDate`, `supersedes`, `supersededBy`, `amendments`, `pendingEdition`, `pendingStageCode`, `changeDetected`, `changeType`, `changes`, `previousStageCode`, `checkedAt`, `sourceUrl`. Views: Standards register, Changes, Not checked, Run summary.

Change types, in the order they win when several happen at once: `withdrawn`, `superseded`, `new_edition`, `published`, `cancelled`, `reinstated`, `amended`, `stage_changed` (for example 90.92 to be revised, 90.93 confirmed), `draft_started`, `draft_advanced`, `draft_ended`. The `changes` column lists all of them with `from -> to`.

### Pricing

Pay per event (Apify's model for new Actors). Platform usage is included in the event prices.

| Event | Price (USD) | When |
|---|---|---|
| `standard_checked` (primary) | 0.004 | once per designation that was looked up, found or not found, in every run |
| `stage_change` | 0.15 | once per designation whose lifecycle changed since the last run |

Blocked lines (a body that is not covered, an unreadable line, the source down, a limit) are never charged. Your bill per month is at most `designations x runs per month x 0.004` plus `0.15` per change. Examples: 200 designations weekly (4 runs) = 800 x 0.004 = 3.20; at 4.33 runs = 866 x 0.004 = 3.46; add 5 changes = 0.75. 500 designations daily (30 runs) = 15,000 x 0.004 = 60.00. The free Apify plan looks up 10 designations per run. Set a maximum charge per run in the run options if you want a hard limit; the Actor stops cleanly and every remaining line still gets a row.

### Limits

- **ISO only** (see the table above).
- **Metadata only.** Designation, title, stage, dates, committee, ICS codes, links between documents. No standard text, no abstracts.
- **Freshness.** ISO updates the open data file daily. A change is detected on the first run after ISO publishes it, not in real time.
- **Hidden projects.** ISO sometimes links a published standard to a revision project that is not public yet. That is not reported as a supersession; it appears when ISO makes the draft public (`draft_started`).
- **Amendments in progress** are listed only when they are public and not cancelled.
- **The first run is a baseline.** It reports no changes. State is kept 400 days after the last check of a designation.
- **Stage information is what ISO published**; it is not legal advice and does not replace ISO's own record.

### FAQ

**Why only ISO?** Because it is the only body in the planned six where plain HTTP works, robots.txt allows it and the terms allow automated metadata access. A product with one defensible source is better than one with six and a takedown. See `docs/SOURCES_CHECK.md`.

**Where does the data come from?** The ISO Open Data file `iso_deliverables_metadata` (https://www.iso.org/open-data.html), licensed under ODC Attribution License (ODC-By) v1.0. This work is based on that dataset. Standards Watchtower is not affiliated with or endorsed by ISO.

**Does it read the standards themselves?** No. It never reads or stores standard text, and the abstract (scope) in the open data file is ignored.

**What does a run cost in compute?** Measured locally: one 80 MB download and about 40 to 90 seconds with 256 MB of memory (peak about 90 MB), for 12 or for 500 designations.

Third-party licences and attributions: see `docs/THIRD_PARTY_NOTICES.txt` in the Actor source.

# Changelog

This Actor's version history is a separate document: https://apify.com/leons0016/standards-revision-monitor/changelog.md

# Actor input Schema

## `designations` (type: `array`):

One designation per line, for example ISO 9001 (the latest edition and the next edition in development), ISO 9001:2015 (exactly this edition), ISO/IEC 27001:2022/Amd 1:2024 (one amendment). ISO, ISO/IEC, ISO/TS, ISO/TR and ISO/ASTM documents are covered; lines for IEC, CEN/CENELEC, BSI, DIN and ASTM get a blocked row that says why. Lines starting with # are ignored.

## `watchlistName` (type: `string`):

Name of the watchlist. The last known stage of every designation is kept in a key-value store in your account under this name, which is how changes are found between runs. Use a different name for each list, for example per client. Letters, digits and hyphens.

## `draftTracking` (type: `string`):

When a newer edition is being developed, how closely to report it. Milestones is the quiet setting; every stage code reports each ballot and comment period (more stage_change events). Off ignores drafts.

## `fetchStageDates` (type: `boolean`):

Off by default. When on, the Actor also reads the public ISO page of each designation that changed (at most 25 per run, one page every 5 seconds as ISO's robots.txt asks) to add the date the current stage was reached and the withdrawal date. Without it the publication date from the open data file is still given.

## `webhookUrl` (type: `string`):

Optional https address that receives the run summary and the register of the run.

## `slackWebhookUrl` (type: `string`):

Optional. Slack gets up to 10 change lines and a link to the run.

## Actor input object example

```json
{
  "designations": [
    "ISO 9001",
    "ISO 14001",
    "ISO 45001",
    "ISO 13485",
    "ISO/IEC 27001",
    "ISO/IEC 27002",
    "ISO 26262-1",
    "ISO 10993-1",
    "ISO/IEC 17025",
    "ISO 50001",
    "ISO 22000",
    "ISO 31000"
  ],
  "watchlistName": "default",
  "draftTracking": "milestones",
  "fetchStageDates": false
}
```

# Actor output Schema

## `register` (type: `string`):

One row per designation: ok, not-found or blocked, with stage, dates and links.

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

Designations whose lifecycle changed since the last run.

## `notChecked` (type: `string`):

Not found, blocked and invalid lines with the reason.

## `runSummary` (type: `string`):

Counts, coverage, source and stopped reason.

## `report` (type: `string`):

One-page register.

## `registerCsv` (type: `string`):

All rows of this run, fixed columns, for the standards register.

## `changesCsv` (type: `string`):

Only the changes of this run.

# 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 = {
    "designations": [
        "ISO 9001",
        "ISO 14001",
        "ISO 45001",
        "ISO 13485",
        "ISO/IEC 27001",
        "ISO/IEC 27002",
        "ISO 26262-1",
        "ISO 10993-1",
        "ISO/IEC 17025",
        "ISO 50001",
        "ISO 22000",
        "ISO 31000"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leons0016/standards-revision-monitor").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 = { "designations": [
        "ISO 9001",
        "ISO 14001",
        "ISO 45001",
        "ISO 13485",
        "ISO/IEC 27001",
        "ISO/IEC 27002",
        "ISO 26262-1",
        "ISO 10993-1",
        "ISO/IEC 17025",
        "ISO 50001",
        "ISO 22000",
        "ISO 31000",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("leons0016/standards-revision-monitor").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 '{
  "designations": [
    "ISO 9001",
    "ISO 14001",
    "ISO 45001",
    "ISO 13485",
    "ISO/IEC 27001",
    "ISO/IEC 27002",
    "ISO 26262-1",
    "ISO 10993-1",
    "ISO/IEC 17025",
    "ISO 50001",
    "ISO 22000",
    "ISO 31000"
  ]
}' |
apify call leons0016/standards-revision-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leons0016/standards-revision-monitor"
        }
    }
}
```

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/PHzlYDUwa7xehi38t/builds/ZqOh6sY2z9Fq5gb1B/openapi.json
