# API Change Monitor (`mambalabs/api-change-monitor`) Actor

Watch the APIs you depend on and get only what changed since your last run: new changelog entries tagged as deprecations or breaking changes, sunset dates, status incidents, OpenAPI operations added, removed, or deprecated, and Sunset or Deprecation headers. 14 vendor presets or any URL.

- **URL**: https://apify.com/mambalabs/api-change-monitor.md
- **Developed by:** [Mamba Labs](https://apify.com/mambalabs) (community)
- **Categories:** Developer tools, Automation, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.98 / 1,000 change rows

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

## API Change Monitor

Watch the third party APIs your product depends on and get back only what changed since your last run. Pick a vendor from 14 presets or give any changelog, deprecation page, status page, or OpenAPI document. Each run returns new changelog entries, tagged when they announce a deprecation, a sunset date, or a breaking change; new and resolved status incidents; OpenAPI operations added, removed, or deprecated; and Sunset or Deprecation headers that appear on an endpoint. The first run of a source records a baseline; every later run with the same state key compares against it. Rows are flat, so they export to CSV, post to Slack through an Apify integration, or drop into a table.

### Features

- **Only the changes.** One row per source per run with the number of changes found, and one row per change. A source where nothing moved returns a free `no_change` row.
- **Deprecations flagged.** Every changelog entry is read for deprecation, sunset, end of life, retirement, and removal wording, and for breaking change and required migration wording. `is_deprecation`, `is_breaking`, and the first `sunset_date` named after the wording are on every row. Turn on `only_deprecations_and_breaking` to get nothing else.
- **Vendor presets.** `github`, `stripe`, `shopify`, `hubspot`, `openai`, `anthropic`, `google-ads`, `twilio`, `slack`, `notion`, `atlassian`, `cloudflare`, `vercel`, `plaid`. Each preset is the vendor's own public changelog feed or page, deprecation or sunset page, status history feed, and OpenAPI document where one is published.
- **Any URL.** A changelog page, an RSS or Atom feed, a sunset dates table, a Statuspage site, or an OpenAPI or Swagger JSON document. The kind is detected from what the URL returns.
- **Status incidents.** New incidents and status changes (investigating, identified, monitoring, resolved) from the vendor's status history.
- **OpenAPI diffs.** Operations added, removed, or marked deprecated, and the API version, from the published OpenAPI JSON.
- **Sunset and Deprecation headers.** API endpoints you list are called without credentials and their response headers are read for `Sunset` (RFC 8594), `Deprecation` (RFC 9745), and the `deprecation`, `sunset`, and `successor-version` link relations.
- **Schedules.** Save the input as a task with a `state_key`, schedule it daily, and each run returns only the new changes.

### How it reads sources

Every source is a public page, feed, or file, fetched directly, and robots.txt is read for every host and checked before every request; a URL robots.txt disallows is never requested. Status pages are read through their public history feed. A host that refuses a direct request is retried through the Apify proxy. No login, no API key, and no other developer's actor. Endpoint checks send one GET with no credentials. The saved state lives in a key-value store in your own Apify account.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `vendors` | array | | Vendor presets: `github`, `stripe`, `shopify`, `hubspot`, `openai`, `anthropic`, `google-ads`, `twilio`, `slack`, `notion`, `atlassian`, `cloudflare`, `vercel`, `plaid` |
| `sources` | array | | Any other changelog, feed, deprecation page, status page, or OpenAPI JSON URL |
| `endpoint_urls` | array | | API endpoints whose response headers are read for Sunset and Deprecation |
| `watch` | array | all but `openapi` | For presets, any of `changelog`, `deprecations`, `status`, `headers`, `openapi` |
| `keywords` | array | | Return only change rows that contain one of these words |
| `only_deprecations_and_breaking` | string | `false` | `true` returns only deprecations, breaking changes, removed or deprecated operations, and header changes |
| `max_changes_per_source` | string | `100` | Change rows per source per run, up to 1000 |
| `include_snapshot` | string | `false` | `true` also returns the current entries of a source on its first check |
| `state_key` | string | | Names the saved state, so separate schedules keep separate baselines |
| `reset_state` | string | `false` | `true` records a new baseline for every source |
| `max_charge_usd` | string | | The run stops before it would charge more than this |
| `proxy_mode` | string | `auto` | `auto` or `direct` |

Every scalar input is accepted as a string, which is what Clay and most HTTP tools send.

### Output

One row layout for every row type, so no column is lost between them. Key fields:

| Field | Rows | Example |
|---|---|---|
| `row_type` | all | `source_baseline`, `source_check`, `change`, `snapshot`, `source_error`, `error` |
| `vendor`, `source_label`, `source_url`, `source_kind` | all | `hubspot`, `HubSpot developer changelog`, `feed` |
| `change_type` | change | `changelog_entry`, `deprecation_notice`, `breaking_change`, `incident_new`, `incident_update`, `incident_resolved`, `openapi_operation_added`, `openapi_operation_removed`, `openapi_operation_deprecated`, `openapi_version_change`, `sunset_header`, `deprecation_header` |
| `title`, `entry_url`, `entry_date`, `summary`, `categories` | changes | `Upcoming Sunset: End of Developer CLI Support of Node.js 20`, `2026-10-19` |
| `is_deprecation`, `is_breaking`, `sunset_date` | changes | `true`, `false`, `2026-04-29` |
| `incident_status` | status changes | `resolved` |
| `operation` | OpenAPI changes | `DELETE /v1/accounts/{account}` |
| `old_value`, `new_value` | status, version, and header changes | `investigating`, `resolved` |
| `header_sunset`, `header_deprecation`, `header_link` | endpoint source rows | |
| `entries_tracked`, `changes_found`, `previous_check_at` | source rows | `50`, `2` |
| `row_status`, `error_reason`, `billable_events_json` | all | `ok`, `null`, `{"change-row":1}` |

The run summary (key-value store record `RUN_SUMMARY`) lists baselines, changes by type, unreadable sources, and requests.

### Pricing

Pay per event. You pay only these events; the Apify platform and proxy costs of your run are paid by Mamba Labs.

| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
| Change row (`change-row`), one change since the last run | $0.0035 | $0.003325 | $0.00315 | $0.002975 |
| Source check (`source-check`), the first check of a source and any later check that finds a change | $0.003 | $0.00285 | $0.0027 | $0.00255 |
| Snapshot row (`snapshot-row`), only with `include_snapshot` on | $0.001 | $0.00095 | $0.0009 | $0.00085 |
| Actor start (`apify-actor-start`), once per run | $0.001 | $0.001 | $0.001 | $0.001 |

Free rows: `no_change` rows for a source where nothing moved since the last run, `source_error` rows for a source that could not be read, and the row a refused input returns. On the Apify free plan the actor stops at 1.50 USD of evaluation a month (about 429 change rows); any paid Apify plan removes that cap.

Example: a daily run over 10 sources where 3 sources changed, with 5 changes in all, costs 3 source checks ($0.009) plus 5 change rows ($0.0175), $0.0275 with the actor start. The 7 unchanged sources are free.

### Usage examples

#### Apify Console or API

```json
{ "vendors": ["github", "openai"], "state_key": "api-watch-daily" }
```

```json
{ "vendors": ["stripe", "github"], "watch": ["openapi", "status"], "only_deprecations_and_breaking": "true", "state_key": "payments-stack" }
```

```json
{ "sources": ["https://developers.hubspot.com/changelog/rss.xml", "https://www.githubstatus.com"], "endpoint_urls": ["https://api.example.com/v1/status"], "keywords": ["webhook", "oauth"] }
```

#### Scheduled monitoring

Save the input as an Apify task with a `state_key` and schedule it daily. Connect the task to Slack or email with an Apify integration to get the change rows as they come.

#### MCP

The MCP server `@mambalabsdev/mcp-api-change-monitor` exposes this actor as a tool for Claude and other MCP clients.

### Error handling

| Situation | What you get |
|---|---|
| The input has no vendor, source, or endpoint, names an unknown vendor, or cannot be read | One free row, `row_status` `error`, `error_reason` starting with `input_invalid:`. The run ends successfully and nothing is charged by this actor beyond the actor start |
| A source refuses every route, or robots.txt disallows it | One free `source_error` row with `row_status` `blocked` and the reason |
| A page with no dated entries, or a YAML OpenAPI document | One free `source_error` row saying why and what to give instead |
| A source changes its layout, so most entries read as new | Recorded as a new baseline with a note, not as dozens of false changes |
| The state store cannot be opened | Every source reads as a first check, and the run summary says so |
| Max charge reached | The run stops before the next billable row; the source's state is not saved, so its changes come back on the next run |

### Limitations

- A change is only seen if it is still on the source when the actor runs. A changelog that lists only its newest 10 entries can drop an entry between two widely spaced runs.
- Changelog pages drawn by scripts after the page loads give no entries; use the vendor's feed when it has one.
- Deprecation and breaking change tags come from the wording of the entry. An entry that announces a removal in other words is a plain `changelog_entry`.
- Entries are matched by title on pages and by feed ID on feeds. A page entry whose title is edited reads as a new entry.
- OpenAPI documents are read as JSON; a YAML document returns a `source_error` asking for the JSON version.
- You are responsible for how you use the data and for the terms of the sites you watch.

### More from Mamba Labs

| Actor | Actor ID |
|---|---|
| [Account Hiring Watch](https://apify.com/mambalabs/account-hiring-watch?fpr=mamba) | `gRAZA5WBi1r6L0gy7` |
| [Agent Accessibility Auditor](https://apify.com/mambalabs/agent-accessibility-auditor?fpr=mamba) | `anxbRv0lKrpQ1pnua` |
| [Agent to Brokerage Resolver](https://apify.com/mambalabs/agent-brokerage-resolver?fpr=mamba) | `ePRRGLxOGyaVHO4dI` |
| [AI Tooling Detector](https://apify.com/mambalabs/ai-tooling-detector?fpr=mamba) | `EwkHhmqiuJgRoVEbE` |
| [B2B Reddit Conversation Monitor](https://apify.com/mambalabs/b2b-reddit-conversation-monitor?fpr=mamba) | `SoDryzzsjmY3SsiyG` |
| [Bluesky Brand Presence Mapper](https://apify.com/mambalabs/bluesky-brand-presence-mapper?fpr=mamba) | `eLpxzP4IuXznlFVND` |
| [Career Change Signal Engine](https://apify.com/mambalabs/career-change-signal-engine?fpr=mamba) | `vX2Yga1a6wGaXaP14` |
| [Company Change Event Feed](https://apify.com/mambalabs/company-change-event-feed?fpr=mamba) | `oX44rS0fkEJ3rXLWe` |
| [Company Contact Details Extractor](https://apify.com/mambalabs/company-contact-details-extractor?fpr=mamba) | `4mMncKaJykiq94grz` |
| [Company Discovery List Builder](https://apify.com/mambalabs/company-discovery-list-builder?fpr=mamba) | `jch0HdaZnpbMqlcGS` |
| [Company Firmographic Enricher](https://apify.com/mambalabs/company-firmographic-enricher?fpr=mamba) | `YlUtLWjfPpqykmB8g` |
| [Company Funding Record](https://apify.com/mambalabs/funding-investor-record?fpr=mamba) | `OFS4Mt1gyYNtGfUbE` |
| [Company Headcount Estimator](https://apify.com/mambalabs/company-headcount-estimator?fpr=mamba) | `aHC4GROnNt6kfZe5r` |
| [Company Identity Resolver](https://apify.com/mambalabs/company-identity-resolver?fpr=mamba) | `lr8fTRAmZCBZmuwwh` |
| [Company Social Presence Mapper](https://apify.com/mambalabs/company-social-presence-mapper?fpr=mamba) | `4k6CCemkgBDz18m2h` |
| [Competitor Price, Stock, and Changelog Monitor](https://apify.com/mambalabs/competitor-price-stock-changelog-monitor?fpr=mamba) | `yxdgCbUQ4PYQWwRNU` |
| [Contact Classifier](https://apify.com/mambalabs/contact-classifier?fpr=mamba) | `0lGSeYJmniXhGANnO` |
| [Contractor License Lookup](https://apify.com/mambalabs/contractor-license-lookup?fpr=mamba) | `WBYK3CPI2kdeq4bP1` |
| [Cookie Consent Audit](https://apify.com/mambalabs/cookie-consent-audit?fpr=mamba) | `TrKyOS0KBoGC35nbr` |
| [Domain Deliverability Checker](https://apify.com/mambalabs/domain-deliverability-checker?fpr=mamba) | `0tVgxI7A6o9jMlxmc` |
| [Domain to LinkedIn URL Resolver](https://apify.com/mambalabs/domain-to-linkedin-url-resolver?fpr=mamba) | `3HtnSaqPHOg1Qg5gx` |
| [Ecommerce Platform Profiler](https://apify.com/mambalabs/ecommerce-platform-profiler?fpr=mamba) | `5G2NeYjBbQTjaTn9L` |
| [Ecommerce Store Discovery](https://apify.com/mambalabs/ecommerce-store-discovery?fpr=mamba) | `PeHu4sLyFvQHXUUrX` |
| [Event Presence Index](https://apify.com/mambalabs/event-presence-index?fpr=mamba) | `WLhMy8fMDgsxdYxv5` |
| [Expert Witness Directory](https://apify.com/mambalabs/expert-witness-directory?fpr=mamba) | `LIpwlgfE3LaQBaXd4` |
| [Funding and Press Signal Scanner](https://apify.com/mambalabs/funding-press-signal-scanner?fpr=mamba) | `FS13X6dhQVgX3XOM6` |
| [GitHub Organization Signal Scanner](https://apify.com/mambalabs/github-organization-signal-scanner?fpr=mamba) | `ahF8RRpv5mzPao5CN` |
| [Google Ads Transparency Monitor](https://apify.com/mambalabs/google-ads-transparency-monitor?fpr=mamba) | `1eOwxhBVxzvOXAm4s` |
| [Government Contract Award Monitor](https://apify.com/mambalabs/public-award-monitor?fpr=mamba) | `zhEtllASykOcx9hJ8` |
| [GTM Hiring Signal Scraper](https://apify.com/mambalabs/gtm-hiring-signal-scraper?fpr=mamba) | `D7O1SA2EqwHGsGr1P` |
| [GTM Signals Aggregator](https://apify.com/mambalabs/b2b-buying-signals-hiring-tech-stack-intent-for-clay?fpr=mamba) | `xKdRfnfFNkdMpFuNs` |
| [ICP Fit Scorer](https://apify.com/mambalabs/icp-account-lead-scoring-fit-scorer-0-100-for-clay?fpr=mamba) | `W161DT8W4kW55dMFh` |
| [Influencer Change Monitor](https://apify.com/mambalabs/creator-change-monitor?fpr=mamba) | `d2VVgahNL6UmcLkhg` |
| [Influencer Finder](https://apify.com/mambalabs/creator-finder?fpr=mamba) | `tpkedmloIIWtXx6sg` |
| [Influencer Lead List Builder](https://apify.com/mambalabs/creator-lead-list-all-in-one?fpr=mamba) | `KnmByszcv135yM30G` |
| [Influencer Profile Scraper](https://apify.com/mambalabs/creator-profile-reader?fpr=mamba) | `EqEnklDVMIcB1V499` |
| [Influencer Talent Agency Lookup](https://apify.com/mambalabs/talent-agency-lookup?fpr=mamba) | `zCuX4Mgyg6JvXgGzd` |
| [Instagram Facebook Brand Presence Mapper](https://apify.com/mambalabs/meta-brand-presence-mapper?fpr=mamba) | `HXh65I0JBjPsunbY8` |
| [Integration and Marketplace Presence Mapper](https://apify.com/mambalabs/integration-marketplace-presence-mapper?fpr=mamba) | `V0guNuvM85Q61f2gj` |
| [Job Board Keyword Signal Scanner](https://apify.com/mambalabs/job-board-keyword-signal-scanner?fpr=mamba) | `4DvqpvhMR74NLcDDY` |
| [Job Change Tracker](https://apify.com/mambalabs/job-change-tracker?fpr=mamba) | `L8UbEmMJC1XYPSZOb` |
| [Job Posting Monitor](https://apify.com/mambalabs/gtm-job-discovery?fpr=mamba) | `QCfICD9kOPiOdj5iI` |
| [Legal Entity Resolver](https://apify.com/mambalabs/legal-entity-resolver?fpr=mamba) | `KHFyPCDIx7CyqULYm` |
| [Link in Bio Scraper and Newsletter Detector](https://apify.com/mambalabs/link-in-bio-newsletter-checker?fpr=mamba) | `OorucdheTIgu7RFzK` |
| [LinkedIn Company Page Mapper](https://apify.com/mambalabs/linkedin-company-presence-mapper?fpr=mamba) | `zOPm6A9JEhUGcIdFW` |
| [LinkedIn Post Tracker](https://apify.com/mambalabs/linkedin-post-engager-capture?fpr=mamba) | `oiGLNPuaf5BRaz9K5` |
| [Local Business Lead Builder](https://apify.com/mambalabs/local-business-lead-builder?fpr=mamba) | `qMN97aoHhsAS5bznV` |
| [Local Rank and Map Pack Tracker](https://apify.com/mambalabs/local-rank-map-pack-tracker?fpr=mamba) | `gv0kyHGDIg8XscclB` |
| [Lookalike Company Finder](https://apify.com/mambalabs/lookalike-company-finder?fpr=mamba) | `e2O426WBAbLLQL4Z2` |
| [Manufacturer and Supplier Finder](https://apify.com/mambalabs/manufacturer-supplier-finder?fpr=mamba) | `Qcsdmd0lUfPzVkonh` |
| [Meta Ad Library Monitor](https://apify.com/mambalabs/meta-ad-library-monitor?fpr=mamba) | `J1GWlSXfSGU3u8Wng` |
| [Mobile Phone Waterfall](https://apify.com/mambalabs/mobile-phone-waterfall-orchestrator?fpr=mamba) | `6OOgPktf7RIa5XCOP` |
| [New Company Registrations Feed](https://apify.com/mambalabs/new-company-registrations-feed?fpr=mamba) | `g2WfZhWvCtc57g2Jo` |
| [New Hire Finder](https://apify.com/mambalabs/new-hire-finder?fpr=mamba) | `cKuc38p4nYHNF3IW8` |
| [Newsletter Sponsor Tracker](https://apify.com/mambalabs/newsletter-sponsor-tracker?fpr=mamba) | `qSwpqxD1TiPZpLQHv` |
| [Open Tender and RFP Finder](https://apify.com/mambalabs/open-tender-rfp-finder?fpr=mamba) | `kPTGz6t6TFoUUyfaO` |
| [Outbound Stack Detector](https://apify.com/mambalabs/outbound-infrastructure-fingerprint?fpr=mamba) | `v43UJC8r7qW7cBSTG` |
| [Page Finder and Extractor](https://apify.com/mambalabs/page-finder-extractor?fpr=mamba) | `TpurgcOZbVnknlaiC` |
| [Partner and Member Directory Extractor](https://apify.com/mambalabs/partner-member-directory-extractor?fpr=mamba) | `ZX0XJPPUvnFJxeC1a` |
| [People Finder & Email Verifier](https://apify.com/mambalabs/people-finder?fpr=mamba) | `LEgloG7tWgQl4o6TD` |
| [Person LinkedIn URL Resolver](https://apify.com/mambalabs/person-linkedin-url-resolver?fpr=mamba) | `ssuyPV8LnEsL8qbnb` |
| [Person Social Footprint Mapper](https://apify.com/mambalabs/person-social-footprint-mapper?fpr=mamba) | `jfQXa2zW9FHCJot9K` |
| [Personal Email to Company Resolver](https://apify.com/mambalabs/personal-email-to-company-resolver?fpr=mamba) | `AefT5Ye6YNPFQwJBf` |
| [Pinterest Brand Presence Mapper](https://apify.com/mambalabs/pinterest-brand-presence-mapper?fpr=mamba) | `d1HvjZfKhgvWsoEwn` |
| [Podcast Guest and Host Finder](https://apify.com/mambalabs/podcast-guest-host-finder?fpr=mamba) | `o2MGSvgbSLeeXOsIo` |
| [Prospect Engine](https://apify.com/mambalabs/b2b-prospect-engine?fpr=mamba) | `q9rT6v64nUJdPexOQ` |
| [Public Feature Board and Roadmap Monitor](https://apify.com/mambalabs/public-feature-board-roadmap-monitor?fpr=mamba) | `rcHF5gj5r2Vqnry35` |
| [Publishing Frequency Tracker](https://apify.com/mambalabs/blog-publishing-frequency?fpr=mamba) | `TbLwaUUATdYb6wp4N` |
| [Reddit Brand Presence Mapper](https://apify.com/mambalabs/reddit-brand-presence-mapper?fpr=mamba) | `pKQZmDaT70SEb54bZ` |
| [Reporting Window Finder](https://apify.com/mambalabs/public-company-reporting-window-finder?fpr=mamba) | `uINxR7a1IW8qUTRUX` |
| [Sequencer Event Poller](https://apify.com/mambalabs/sequencer-event-poller?fpr=mamba) | `S6s8Rjd61tGdrMRk4` |
| [Sequencer Lead Push](https://apify.com/mambalabs/clay-to-instantly-smartlead-push?fpr=mamba) | `0Jv27VeWM5tSZQs9x` |
| [Team Page People Extractor](https://apify.com/mambalabs/team-page-people-extractor?fpr=mamba) | `j8a9zX0k4mNbvDbWK` |
| [Tech Stack Signal Detector](https://apify.com/mambalabs/gtm-tech-stack-signal-scraper?fpr=mamba) | `qyd7nNyqFPelQViBx` |
| [TikTok Brand Presence Mapper](https://apify.com/mambalabs/tiktok-brand-presence-mapper?fpr=mamba) | `fco8FvoJcSafbeyd1` |
| [Trustpilot Reputation Enricher](https://apify.com/mambalabs/review-platform-reputation-enricher?fpr=mamba) | `3lIqfCt61j4hqE1xz` |
| [VC and Accelerator Portfolio List Builder](https://apify.com/mambalabs/vc-accelerator-portfolio-list-builder?fpr=mamba) | `chH8hrfuoqqolW06m` |
| [WCAG Accessibility Audit](https://apify.com/mambalabs/wcag-accessibility-audit?fpr=mamba) | `P3jBj3FRghKEhX52z` |
| [Website Phrase and Business Model Classifier](https://apify.com/mambalabs/website-phrase-business-model-classifier?fpr=mamba) | `CBuZ9k7sRwBeiKiCS` |
| [Website Traffic Rank Estimator](https://apify.com/mambalabs/website-traffic-rank-estimator?fpr=mamba) | `GnOFUzlNVIoXgeJjH` |
| [Work Email Waterfall](https://apify.com/mambalabs/email-waterfall-orchestrator?fpr=mamba) | `OT6xqTFThC0Rjf7Zj` |
| [Workplace Program Detector](https://apify.com/mambalabs/workplace-program-detector?fpr=mamba) | `Li6pPDhqbdzFz3h7G` |
| [X Brand Presence Mapper](https://apify.com/mambalabs/x-brand-presence-mapper?fpr=mamba) | `oLOgadhHUkNAyDA3w` |
| [YouTube Channel Stats Extractor](https://apify.com/mambalabs/youtube-channel-transcript-extractor?fpr=mamba) | `6hSpD3kd2s2IQ4VSs` |

Built by [Mamba Labs](https://apify.com/mambalabs?fpr=mamba).

# Actor input Schema

## `vendors` (type: `array`):

API vendors to watch, one per line. Each expands to the public sources read for it: changelog, deprecation page, status history, and OpenAPI document where one is published. Available: github, stripe, shopify, hubspot, openai, anthropic, google-ads, twilio, slack, notion, atlassian, cloudflare, vercel, plaid.

## `sources` (type: `array`):

Any other public URLs to watch, one per line: a changelog or release notes page, an RSS or Atom feed, a deprecation or sunset dates page, a Statuspage site or its history.rss feed, or an OpenAPI or Swagger JSON document. The kind is detected from what the URL returns.

## `endpoint_urls` (type: `array`):

API endpoints to call without credentials, one per line. The response headers are read for Sunset (RFC 8594), Deprecation (RFC 9745), and Link relations deprecation, sunset, and successor-version. Only GET requests are sent.

## `watch` (type: `array`):

For vendor presets, any of: changelog, deprecations, status, headers, openapi. Empty means changelog, deprecations, status, and headers. openapi reads the vendor's OpenAPI document (up to 14 MB) and reports operations added, removed, or deprecated. Without changelog, changelog sources return only deprecations and breaking changes. URLs you list in Source URLs are always read.

## `keywords` (type: `array`):

Return only change rows whose title, summary, categories, or operation contains one of these words. Every change still updates the saved state.

## `only_deprecations_and_breaking` (type: `string`):

true to return only change rows tagged as a deprecation or breaking change, OpenAPI operations removed or deprecated, and header changes. Incidents and plain changelog entries are left out.

## `max_changes_per_source` (type: `string`):

Change rows returned per source per run, 1 to 1000. The rest are counted in changes_found.

## `include_snapshot` (type: `string`):

true to also return the current entries, incidents, or operations of a source on its first check, up to Max change rows per source. Each snapshot row is billed as a snapshot row.

## `state_key` (type: `string`):

Names the saved state, so separate schedules keep separate baselines. Runs with the same state key and source compare against each other.

## `reset_state` (type: `string`):

true to ignore the saved state and record a new baseline for every source.

## `max_charge_usd` (type: `string`):

Optional. The run stops before it would charge more than this.

## `proxy_mode` (type: `string`):

How sources are fetched.

## `source_tag` (type: `string`):

Internal attribution tag. Leave empty.

## Actor input object example

```json
{
  "vendors": [
    "github",
    "openai"
  ],
  "only_deprecations_and_breaking": "false",
  "max_changes_per_source": "100",
  "include_snapshot": "false",
  "state_key": "api-watch-daily",
  "reset_state": "false",
  "proxy_mode": "auto"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `run_summary` (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 = {
    "vendors": [
        "github",
        "openai"
    ],
    "state_key": "api-watch-daily"
};

// Run the Actor and wait for it to finish
const run = await client.actor("mambalabs/api-change-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 = {
    "vendors": [
        "github",
        "openai",
    ],
    "state_key": "api-watch-daily",
}

# Run the Actor and wait for it to finish
run = client.actor("mambalabs/api-change-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 '{
  "vendors": [
    "github",
    "openai"
  ],
  "state_key": "api-watch-daily"
}' |
apify call mambalabs/api-change-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mambalabs/api-change-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/pHsbS3xXUK8Jqutz5/builds/ePO7qC5tpiBPlwxce/openapi.json
