API & agents

Every record on this site is open JSON with a stable ID, dates and an official source URL. You don't need a key. It's built for scripts, dashboards and AI agents.

Auth noneFormats JSON · Atom · RSS · textSpec OpenAPI 3.1MCP stdio + streamable HTTP

JSON API

Static, cacheable and predictable

Plain files on a CDN. Filter on the client, or let the MCP server do it.

curl -s https://adstackwatch.com/api/upcoming.json \
  | jq '.changes[0]'

OpenAPI

Drop it into any tool-calling stack

Typed schemas for changes, plans and price events: /openapi.json

curl -s https://adstackwatch.com/openapi.json \
  | jq '.paths | keys'

Structured data

schema.org on every page

Dataset, ItemList, TechArticle and WebPage JSON-LD.

Model Context Protocol

Install the MCP server

It's a single dependency-free Python file that reads the live JSON from this site. It works with Claude Desktop, Cursor and any MCP client.

1 · Download and run

curl -O https://adstackwatch.com/mcp/server.py
python3 server.py   # stdio, Python 3.9+

Or serve it over HTTP

python3 server.py --http --port 8765
# POST JSON-RPC to http://127.0.0.1:8765/mcp

2 · Add it to your client (claude_desktop_config.json or .cursor/mcp.json)

{
  "mcpServers": {
    "adstack-watch": {
      "command": "python3",
      "args": ["/path/to/server.py"],
      "env": { "ADSTACK_API_BASE": "https://adstackwatch.com" }
    }
  }
}

Tools

ToolArgumentsReturns
search_changesquery, platform, category, since, until, upcoming_only, limitKeyword search across all change records
get_upcoming_deprecationsdays=90, platform, category, limitWhat takes effect in the next N days, with days_until
get_changeidOne record by stable ID
list_platforms—Coverage and counts
get_tool_pricingtoolLatest plans, prices, units, credits
get_price_historytool, since, eventDated price/credit change events

Endpoints

ResourcePathNotes
Index/api/index.jsonAll endpoints
All changes/api/changes.jsonEvery change record
Upcoming/api/upcoming.jsonEffective on/after build date, soonest first
Platforms/api/platforms.jsonPlatforms + categories with counts
Per platform/api/changes/{platform}.jsongoogle-ads, meta, linkedin, tiktok, shopify, hubspot, salesforce
One change/api/change/{id}.jsonBy stable ID
Prices/api/prices.jsonLatest snapshot per tool
Per tool/api/prices/{tool_id}.jsonSnapshot + history
Price history/api/price-history.jsonfirst_seen · price_change · allowance_change · page_changed
Source status/api/sources.jsonCollector health per source
Digest/api/newsletter/latest.jsonLatest weekly digest
OpenAPI 3.1/openapi.jsonMachine-readable spec
llms.txt/llms.txtLLM index
llms-full.txt/llms-full.txtEverything as plain text
Atom / RSS/feed.xmlAlso /rss.xml

Change record

{
  "id": "google-ads-0429d0dff8",
  "platform": "google-ads",
  "title": "Google Ads API v30 sunset (November 2028) (planned, tentative)",
  "summary": "Google Ads API v30 is planned for release in October 2027; its list...",
  "categories": [
    "api_version_sunset"
  ],
  "tags": [
    "api-version",
    "planned-version",
    "tentative",
    "v30"
  ],
  "published_date": null,
  "effective_date": "2028-11",
  "effective_date_precision": "month",
  "source_url": "https://developers.google.com/google-ads/api/docs/sunset-dates",
  "source_name": "Google Ads API: Deprecation and sunset",
  "fetched_at": "2026-10-17T03:44:00+00:00",
  "api_version": "v30",
  "version_status": "planned",
  "release_date": "2027-10",
  "tentative": true,
  "optional_release": false,
  "collector": "google-ads/sunset-dates",
  "first_seen": "2026-10-17T01:05:46+00:00",
  "changed_at": "2026-10-17T03:23:23+00:00",
  "in_source": true,
  "last_seen_in_source": "2026-10-17T03:44:00+00:00",
  "upcoming": true,
  "url": "https://adstackwatch.com/changes/google-ads-0429d0dff8/"
}

Please cite source_url when you relay a fact. The data is compiled from public, official sources and provided as-is. The compilation is licensed CC BY 4.0, and source text stays under its owners' terms. Planned Google Ads versions carry "tentative": true. Records no longer listed by their source keep their ID and carry "in_source": false.