Changelog & Release Notes Scraper avatar

Changelog & Release Notes Scraper

Pricing

from $0.84 / 1,000 results

Go to Apify Store
Changelog & Release Notes Scraper

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

Ibnu Adzim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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 version and an isPrerelease flag that understands semver (1.0.0-rc1), Python/PEP 440 (1.4.0a2) and vendor tags (1.17.0-alpha20260827).

How it works

  1. You name the sources you want — catalog keys, a preset, GitHub repos, packages, or plain feed URLs.
  2. The actor fetches each one and reads whichever format that vendor publishes.
  3. 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
}
FieldTypeDescription
presetstringSelect a whole family at once: all, cloud-providers, ai-platforms, devtools, databases, languages, browsers-mobile, status-pages, saas, security. Combines with sources.
sourcesarrayCatalog 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.
maxItemsPerSourceintegerNewest entries per source. 0 = everything. Default 50.
sinceDatestringKeep entries on or after this date (YYYY-MM-DD or ISO 8601). Undated entries are kept.
keywordsarrayKeep only entries mentioning one of these (case-insensitive) in title, body, version or categories.
includeContentbooleanInclude full body and the untouched upstream object. Turn off for a compact index. Default true.
githubTokenstringOptional. Unlocks full release history for github: sources (see below).
maxConcurrencyintegerRequests in flight at once. Default 8.
minRequestIntervalnumberSeconds 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
}
FieldTypeDescription
sourceKey / sourceName / vendorstringWhich source this came from.
adapterstringHow it was read: feed, github, registry, markdown.
titlestringEntry headline, or the version/date for release feeds.
urlstringLink to the entry.
publishedAt / updatedAtstringUTC ISO 8601. Normalised from every upstream date format.
authorstringWhere the source provides one.
summarystringShort plain-text summary; falls back to the opening of the body.
contentHtml / contentTextstringFull body, when includeContent is on.
categoriesarrayUpstream tags/labels.
versionstringParsed version. Authoritative for releases and packages; best-effort for prose titles.
isPrereleasebooleanAlpha/beta/rc/experimental.
entryRankintegerPosition within this source, newest first.
rawobjectThe 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 githubToken for full history. Flagged in notes.
  • NuGet publishes no dates. Its version index is a bare list, so publishedAt is empty for those rows and sinceDate can't filter them. Flagged in notes rather than silently returning nothing.
  • version on 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" with maxItemsPerSource: 0 produces a very big dataset — keep the per-source cap on.
  • Catalog sources can move. Vendors relocate feeds without redirects; that surfaces as a not_found error row naming the URL, not a silent empty result.