GitHub Release Notes & Changelog Scraper avatar

GitHub Release Notes & Changelog Scraper

Pricing

from $2.99 / 1,000 release notes

Go to Apify Store
GitHub Release Notes & Changelog Scraper

GitHub Release Notes & Changelog Scraper

Pricing

from $2.99 / 1,000 release notes

Rating

0.0

(0)

Developer

w3crawler

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Collect public GitHub release records for one or more repositories. The Actor reads the public releases listing, follows the next-page link for bounded pagination, and can enrich selected rows with the corresponding public release-detail page. It does not require a GitHub token and does not access private repositories, authenticated pages, CAPTCHA-protected pages, or undocumented APIs.

What it extracts

Each normal dataset row represents one published GitHub release and can include the repository, release title and URL, tag, author, source timestamps, release notes, structured note sections, tag commit, compare information, commit messages with repository-scoped pull-request metadata, security-advisory links, release assets, and source-page provenance. The Atom feed remains a bounded compatibility fallback when a public releases listing cannot be parsed. The normal output contract intentionally avoids internal record labels, transport flags, retry counters, and other instrumentation fields.

When a listing or feed request fails, the run summary in the OUTPUT_SUMMARY key-value record keeps the operational outcome. Set includeDiagnostics to true only when a minimal diagnostic row is useful; such rows contain url, error, errorCode, and scrapedAt, and never masquerade as release records. Detail-page failures keep the listing row and are counted in detailFailures.

Input

The default input targets nodejs/node, collects up to 20 releases across two listing pages, enriches up to 20 detail pages, includes commits and assets, and keeps GitHub's newest-first source order. repositories accepts up to 50 public owner/name values or public GitHub repository URLs. maxItems is the final row bound. maxPages is the per-repository listing-page bound, while maxDetailItems, maxCommits, and maxAssets bound enrichment work. Set includeDetails to false for a listing-only run. Set sortBy to oldest to sort the selected rows by public release timestamps. requestDelayMs, maxRequestRetries, and requestTimeoutSecs provide bounded request pacing and timeout controls.

All limits are enforced locally: maxItems 1–1000, maxPages 1–20, detail pages 0–1000, commits 0–200 per release, assets 0–100 per release, retries 0–4, and timeouts 5–120 seconds. Input keys outside the schema are rejected. A fixtureFile is an explicit repository-relative test fixture and is never used as a silent live fallback.

Minimal input

{
"repositories": ["nodejs/node"],
"maxItems": 20
}

Multi-repository pagination input

{
"repositories": ["nodejs/node", "python/cpython"],
"maxItems": 40,
"maxPages": 4,
"maxDetailItems": 12,
"requestDelayMs": 250
}

Listing-only input

{
"repositories": ["example/project"],
"maxItems": 10,
"includeDetails": false,
"includeCommits": false,
"includeAssets": false
}

Synthetic fixture input

{
"repositories": ["example/sample"],
"maxItems": 2,
"includeDetails": false,
"fixtureFile": "fixtures/sample.xml"
}

The fixture is synthetic and exists for deterministic local validation; live runs use GitHub's public web pages. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Output examples

Release row

{
"repository": "nodejs/node",
"repositoryUrl": "https://github.com/nodejs/node",
"releaseId": "release-v26.8.1",
"releaseTitle": "Version 26.8.1",
"releaseUrl": "https://github.com/nodejs/node/releases/tag/v26.8.1",
"tagName": "v26.8.1",
"releaseStatus": "latest",
"publishedAt": "2026-08-26T22:10:37Z",
"author": { "login": "aduh95", "url": "https://github.com/aduh95" },
"releaseNotes": "Notable Changes ...",
"commits": [{
"sha": "7be6d3a",
"url": "https://github.com/nodejs/node/commit/7be6d3a",
"message": "src: improve release handling",
"pullRequestNumber": 65568,
"pullRequestUrl": "https://github.com/nodejs/node/pull/65568"
}],
"sourceUrl": "https://github.com/nodejs/node/releases",
"pageNumber": 1,
"scrapedAt": "2026-08-28T10:00:00.000Z"
}

Optional diagnostic row

{
"url": "https://github.com/example/project/releases",
"error": "GitHub returned HTTP 429",
"errorCode": "RATE_LIMITED_OR_BLOCKED",
"scrapedAt": "2026-08-28T10:00:00.000Z"
}

Run summary

OUTPUT_SUMMARY contains status, source, repositories, item counts, whether normal data was available, pages and requests processed, detail failures, fallback usage, error count, and start/completion timestamps. This is the right place to inspect operational coverage without adding debug fields to every dataset row.

Responsible use

Use the Actor only for public GitHub content and respect GitHub's terms, robots guidance, and request limits. Keep pagination and detail bounds reasonable, use request pacing for larger runs, and do not attempt to bypass access controls. The Actor reports blocked or rate-limited sources honestly instead of fabricating release data.