GitHub Releases & Package Release Notes avatar

GitHub Releases & Package Release Notes

Pricing

from $1.80 / 1,000 releases

Go to Apify Store
GitHub Releases & Package Release Notes

GitHub Releases & Package Release Notes

Get releases from GitHub, npm, PyPI, crates.io, feeds and changelog pages in one format. Batch targets and filter versions. Pay per returned release.

Pricing

from $1.80 / 1,000 releases

Rating

0.0

(0)

Developer

mia.cx

mia.cx

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Security

Limited permissions

Share

Give an agent releases from several projects in one format, with optional date or version filters. Read GitHub, npm, PyPI, crates.io, RSS/Atom feeds and changelog pages. Registry releases and GitHub tags contain version metadata without note bodies. Each delivered release costs $0.0018, plus $0.00005 per run start at default memory.

Try it

{"targets":["npm:ky"],"limit":1}

Empty input {} requests up to three releases each for npm:ky, pypi:requests and crates:serde. No upstream key is required. An optional caller-supplied githubToken enables authenticated GitHub requests.

Use from an agent

Add https://mcp.apify.com?tools=miacx/github-releases-package-release-notes to your MCP client and sign in to Apify. Call the dedicated Actor tool, then use get-dataset-items to read the completed run's dataset. Or set APIFY_TOKEN to your Apify API token and call the API:

curl --fail-with-body 'https://api.apify.com/v2/actors/miacx~github-releases-package-release-notes/run-sync-get-dataset-items' \
-H "Authorization: Bearer $APIFY_TOKEN" -H 'Content-Type: application/json' \
-d '{"targets":["npm:ky"],"limit":1}'

What you get

The dataset contains one row per delivered release, plus unbilled failed-target and zero-release status rows. Read status first. An ok row with releases: 0 is a target summary, not a delivered release. One failed target does not stop the rest of the batch.

This row comes from replaying the recorded npm fixture through the Actor adapter with a fixed test clock:

{
"target": "npm:ky",
"status": "ok",
"version": "2.2.0",
"date": "2026-10-09T06:32:47.556Z",
"title": "ky 2.2.0",
"body": null,
"url": "https://www.npmjs.com/package/ky/v/2.2.0",
"breaking": false,
"source": "https://registry.npmjs.org/ky",
"fetchedAt": "1970-01-01T00:00:00.000Z"
}

version is null when the source supplies no detectable version. Leading v is removed. date is a UTC timestamp or YYYY-MM-DD for sources that supply only a day; undated releases have null dates. body is source Markdown or converted feed/changelog text. It is null for registries, tags and sources without notes. url is null when unavailable. Changelog releases link to the page, without heading anchors.

breaking is a heuristic based on note markers or versions starting a new caret compatibility line. It flags X.0.0, 0.Y.0, 0.0.Z and their prereleases, including a project's first release. It can miss unmarked breaking changes. It does not establish upgrade compatibility.

The key-value store's OUTPUT record reports each target, including errors and targets with no releases. Successful summaries include delivered releases, budget withheld, truncated and sinceSkipped counts. chargeLimitReached reports whether any releases were withheld. truncated means more matches may exist; sinceSkipped counts entries whose date or version cannot be compared.

Input

FieldDefaultAccepted input
targets["npm:ky","pypi:requests","crates:serde"]1–500 strings or objects from the target table below. An empty array is invalid.
sinceDate""Keep releases strictly after a date or timestamp. Empty means no filter.
limit31–100 releases per target after filtering.
githubTokenOmittedOptional caller-supplied token sent only to api.github.com. Empty means unauthenticated access.
Target kindValueReturned source data
githubowner/repoReleases, excluding drafts; first page only, up to 100 entries.
github-tagsowner/repoTags ordered by SemVer, without dates or notes.
npmPackage name, including scopesRegistry versions and publication dates.
pypiProject nameVersions and publication dates, excluding fully yanked releases.
cratesCrate nameVersions and publication dates, excluding yanked releases.
feedPublic HTTPS URLRSS 2.0, RSS 1.0 or Atom entries.
changelogPublic HTTPS URLVersion headings in HTML, Markdown or plain text.

Strings use kind:value, such as github:sindresorhus/ky. Objects contain exactly one kind key and optional sinceDate, sinceVersion or selector:

{
"targets": [
{"pypi":"django","sinceVersion":"5.0"},
{"changelog":"https://www.sqlite.org/changes.html","sinceDate":"2026-01-01"}
],
"limit": 5
}

Per-target sinceDate or sinceVersion overrides the batch date. Supplying both fails that target. A bare date means after that whole UTC day. Date-times require Z or a timezone offset. A day-only release that straddles a timestamp boundary is excluded and counted in sinceSkipped. Undated entries also count in sinceSkipped; use sinceVersion for GitHub tags.

sinceVersion accepts up to 100 characters and compares strictly greater versions. PyPI uses PEP 440; other kinds use strict SemVer 2.0. Unorderable release versions count in sinceSkipped. selector accepts up to 200 characters and scopes HTML changelogs only. Caller URLs allow up to 2,048 characters and must use public HTTPS on port 443 without embedded credentials. See the .actor/input_schema.json for the Actor contract.

Pricing

One Release costs $0.0018 and counts one delivered release row, including cached output. Failed targets, zero-release summaries and withheld releases incur no Release events.

Identical normalized targets with identical options merge within one run. Different filters or selectors are separate targets and can return and charge the same release again.

One thousand Release events cost $1.80, plus $0.00005 per run start at default memory. The one-release example costs $0.00185 including startup. The default nine-release example costs up to $0.01625. Default memory is 128 MB. Apify counts one start event per GB of memory, with a minimum of one event. The $0.00005 run start at default memory applies even with no billable releases.

The Actor uses remaining charge capacity to select rows before delivery. Read OUTPUT for withheld counts; raise the budget to receive more matches.

Limits and data freshness

  • A run accepts 500 targets, fetches eight concurrently and gives each target a 20-second upstream budget.
  • GitHub reads at most 100 entries from one page. Feeds expose a window and always report truncated.
  • Response limits are 5 MiB for caller URLs, 10 MiB for GitHub and 24 MiB for registries.
  • Changelog extraction needs version headings; dates must appear as YYYY-MM-DD in the heading. Atom XHTML content is not read.
  • Feed and changelog requests honor robots.txt, block private addresses and recheck up to three redirects. No browser or runtime LLM runs.

Parsed public snapshots are fresh for five minutes, then revalidated when requested. fetchedAt marks the last upstream fetch or HTTP 304 confirmation; cache hits retain that time. The named store release-watch-cache persists across runs without automatic pruning. Responses fetched with githubToken are never cached.

The synchronous API waits up to 300 seconds. For larger batches, use asynchronous runs.

If a row fails

StatusNext step
invalid_target, invalid_sinceCorrect the target kind, object options or date/version format.
not_found, forbiddenCheck the project or URL and public access.
rate_limitedHonor error.retryAfter seconds when present; retry later.
unsafe_url, robots_disallowed, robots_unavailableUse an accessible public HTTPS source that permits retrieval. GitHub Atom feeds may require the github kind instead.
selector_not_found, no_releases_detected, unsupported_contentCheck the HTML selector, version headings and content format.
response_too_large, parse_errorRead error.message; the source exceeds limits or has an unsupported response shape.
timeout, network_error, upstream_errorRetry later or split the batch.
internal_errorReport the target and error message.

Explicit empty targets, a non-object input or an invalid batch limit fail the run before target processing.