Changelog & Release Notes Scraper
Pricing
from $0.84 / 1,000 results
Changelog & Release Notes Scraper
Tracks release notes, changelogs and status incidents across 59 curated sources — AWS, Google Cloud, Azure, Cloudflare, GitHub, Anthropic, Stripe and more — plus any GitHub repo, npm/PyPI/crates package, or RSS/Atom feed. Every vendor lands in one normalised row shape with one UTC date column.
Pricing
from $0.84 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Track what shipped — across your whole stack, in one dataset.
This actor pulls release notes, changelogs, product updates and status incidents from 59 curated sources (AWS, Google Cloud, Azure, Cloudflare, GitHub, Anthropic, Stripe, Shopify, Kubernetes, Linear, Postgres, Chrome…), plus any GitHub repository, package registry or feed you point it at.
Public data only. No account, no API key, no login, and nothing to configure to get started.
Why use this actor
- 59 vendors, one row shape. An AWS bulletin, a GitHub release, an npm version bump and a status incident all come back with the same fields and the same UTC date column — so you can sort, diff and alert across vendors without writing per-vendor glue.
- Not limited to the catalog. Any public GitHub repo (
github:redis/redis), any package (npm:react,pypi:django,crates:serde,gem:rails,nuget:…,packagist:…), any RSS/Atom/JSON feed URL — mixed freely in one run. - Pick a stack in one word.
preset: "cloud-providers"or"ai-platforms"or"databases"instead of listing sources by hand. - Filter where it's cheap. By date (
sinceDate), by keyword across title and body, and by count per source. - Every source reports back. Each one gets a summary row saying how many entries it carried, how many survived your filters, and why — and a source that fails produces an error row rather than vanishing.
- Version-aware. Releases carry a parsed
versionand anisPrereleaseflag that understands semver (1.0.0-rc1), Python/PEP 440 (1.4.0a2) and vendor tags (1.17.0-alpha20260827).
How it works
- You name the sources you want — catalog keys, a preset, GitHub repos, packages, or plain feed URLs.
- The actor fetches each one and reads whichever format that vendor publishes.
- Entries are normalised to one shape, filtered by your date/keyword rules, and written to your dataset newest-first.
You don't manage credentials, scrapers, or browsers.
Input
{"preset": "","sources": ["aws", "cloudflare", "github", "anthropic", "github:redis/redis"],"maxItemsPerSource": 50,"sinceDate": "2026-08-01","keywords": [],"includeContent": true,"maxConcurrency": 8}
| Field | Type | Description |
|---|---|---|
preset | string | Select a whole family at once: all, cloud-providers, ai-platforms, devtools, databases, languages, browsers-mobile, status-pages, saas, security. Combines with sources. |
sources | array | Catalog key (aws), github:owner/repo, npm:react / pypi:django / crates:serde / gem:rails / nuget:Pkg / packagist:vendor/name / hashicorp:vault / eol:nodejs, or any feed URL. |
maxItemsPerSource | integer | Newest entries per source. 0 = everything. Default 50. |
sinceDate | string | Keep entries on or after this date (YYYY-MM-DD or ISO 8601). Undated entries are kept. |
keywords | array | Keep only entries mentioning one of these (case-insensitive) in title, body, version or categories. |
includeContent | boolean | Include full body and the untouched upstream object. Turn off for a compact index. Default true. |
githubToken | string | Optional. Unlocks full release history for github: sources (see below). |
maxConcurrency | integer | Requests in flight at once. Default 8. |
minRequestInterval | number | Seconds between request starts. Default 0. |
About githubToken
Without a token, github: sources read the repo's public releases feed: no
credentials needed, but it serves the 10 most recent releases and cannot
page further. With a read-only token they switch to the full API — complete
release history, plus draft/pre-release flags and asset lists — and the hourly
request allowance rises from 60 to 5,000. Optional, and only affects github:
sources.
Output
Two record types share the dataset, told apart by recordType.
ENTRY — one row per release / changelog post / incident
{"_input": "cloudflare","_source": "S1-feed","_scrapedAt": "2026-08-31T16:16:17Z","recordType": "ENTRY","sourceKey": "cloudflare","sourceName": "Cloudflare changelog","vendor": "Cloudflare","adapter": "feed","entryRank": 1,"title": "Browser Run - Crawl endpoint now respects the Content Signals `use` directive","url": "https://developers.cloudflare.com/changelog/post/2026-08-31-crawl-content-use/","publishedAt": "2026-08-31T00:00:00Z","author": null,"summary": "The /crawl endpoint now respects the use directive of the Content Signals standard ...","contentHtml": "<p>The <a href=\"...\"><code>/crawl</code></a> endpoint now respects ... truncated","contentText": "The /crawl endpoint now respects the use directive ... truncated","categories": ["Browser Run"],"version": null,"isPrerelease": false,"raw": { "...": "the upstream item, preserved verbatim" }}
A GitHub release row from the same run:
{"_input": "github:redis/redis","_source": "S1-github-atom","recordType": "ENTRY","sourceName": "redis/redis releases","vendor": "redis","adapter": "github","title": "8.10.1","url": "https://github.com/redis/redis/releases/tag/8.10.1","publishedAt": "2026-08-17T16:46:02Z","author": "YaacovHazan","summary": "Update urgency: SECURITY: There are security fixes in the release. Security fixes (CVE-2026-62356) ...","version": "8.10.1","isPrerelease": false}
| Field | Type | Description |
|---|---|---|
sourceKey / sourceName / vendor | string | Which source this came from. |
adapter | string | How it was read: feed, github, registry, markdown. |
title | string | Entry headline, or the version/date for release feeds. |
url | string | Link to the entry. |
publishedAt / updatedAt | string | UTC ISO 8601. Normalised from every upstream date format. |
author | string | Where the source provides one. |
summary | string | Short plain-text summary; falls back to the opening of the body. |
contentHtml / contentText | string | Full body, when includeContent is on. |
categories | array | Upstream tags/labels. |
version | string | Parsed version. Authoritative for releases and packages; best-effort for prose titles. |
isPrerelease | boolean | Alpha/beta/rc/experimental. |
entryRank | integer | Position within this source, newest first. |
raw | object | The upstream item verbatim, so nothing is lost. |
SOURCE_SUMMARY — one row per source
{"recordType": "SOURCE_SUMMARY","sourceKey": "cloudflare","feedKind": "rss","feedTitle": "Cloudflare changelogs","entriesAvailable": 1186,"entriesReturned": 2,"requestsMade": 1,"newestEntry": "2026-08-31T00:00:00Z","oldestEntry": "2026-08-30T00:00:00Z","filtersApplied": { "sinceDate": null, "keywords": [], "maxItemsPerSource": 2 },"notes": ["truncated_to_2: 1186 entries matched; raise `maxItemsPerSource` for the rest."]}
notes is the honesty channel — it tells you why a count is what it is
(truncated, filtered, or a known upstream limitation) instead of leaving you to
guess.
ERROR — one row per source that failed
Every source you ask for produces at least one row, so a source going missing is visible in the data rather than as an absence:
{"_input": "totally-bogus-source","_source": "none","recordType": "ERROR","_error": "unknown_source","_errorDetail": "'totally-bogus-source' is not a catalog key, not a `github:owner/repo`, not a `<registry>:<package>` token and not a URL."}
Known limits
- GitHub without a token gives 10 releases per repo. The public feed offers
no pagination. Set
githubTokenfor full history. Flagged innotes. - NuGet publishes no dates. Its version index is a bare list, so
publishedAtis empty for those rows andsinceDatecan't filter them. Flagged innotesrather than silently returning nothing. versionon prose entries is a guess. For releases and packages it comes from the actual tag; for a headline like "Announcing 2.0" it is parsed from text and may be absent or approximate.- Some feeds are large. Oracle Cloud carries 2,960 entries, Vercel 1,532,
npm packages several thousand versions.
preset: "all"withmaxItemsPerSource: 0produces a very big dataset — keep the per-source cap on. - Catalog sources can move. Vendors relocate feeds without redirects; that
surfaces as a
not_founderror row naming the URL, not a silent empty result.