Developer tools · Live on Apify

GitHub Releases Monitor and Scraper for Public Repos

Add up to 10 public repositories and get their releases as rows. Each row has notes, dates and asset details. Give an old snapshot to see what is new or changed.

About $2.75 for 1,000 releases$0.0027 per release + $0.05 per run. Apify bills you, not us.One release in a run of its own: about $0.05.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

repositorycli/cli
ownercli
repositoryNamecli

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: cli/cli in Public repositories. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Read published releases from known public GitHub repositories. Get release notes in Markdown, dates, stable release IDs and asset metadata. Compare your own previous snapshot to find new or changed releases.

Who uses it

Developers

Watch the tools and libraries your project depends on.

DevOps teams

Check asset names, sizes and download links of new builds.

Product and docs teams

Build a report of release notes with dates.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.05Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more.
Published release saved$0.0027One published release row saved in the default Dataset. Includes notes and retained asset metadata.

Examples

  • One release: about $0.05.
  • 1,000 releases: about $2.75.
  • Every day 100 releases, for 30 days: about $9.60 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 1,800 releases.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Do I need a GitHub token?

No. It works without one. A token can help when the shared limit is used up.

Can it read private repos?

No. It reads only public repositories.

Does it download release files?

No. It saves file details and links, not the files.

Are tags without a release included?

No. Only published GitHub Releases are returned.

Can I scrape private repositories with my token?

No. The Actor first checks that the repository is anonymously accessible. A 404 cannot distinguish a missing repository from a private one.

Does latest include prereleases or find the highest version?

No. It uses GitHub's stable latest endpoint. List mode can include prereleases. The Actor does not sort semantic versions.

Does an unchanged run return zero rows?

Only if you pass a matching previousSnapshot and set onlyChanges=true. With the default onlyChanges=false, you still get current release rows with change=unchanged.

Does a missing release mean it was removed?

Only when both scans have a complete and comparable full list history. Bounded windows and latest mode do not prove deletion. The baseline must be your real previous snapshot.

Do download counts trigger a changed release?

No. Counts are returned as current metadata but excluded from the fingerprint. Notes, names, dates and retained asset metadata can trigger a change.

Details

Step by step on Apify
  1. Open Input in Apify Console.
  2. Keep the form example: repositories is ["cli/cli"], mode is list, and both release limits are 2.
  3. Leave githubToken empty and onlyChanges off.
  4. Click Start. Use the default build and 256 MB memory.
  5. Open the Dataset. Check repository, releaseId, tagName and assets. Open RUN_SUMMARY to check coverage.
Use cases
TaskInputUseful output
Watch dependenciesYour known repositories; list or latesttagName, publishedAt, body, releaseUrl
Check an asset catalogueA CLI or desktop application's repoAsset name, content type, size and download URL
Build a release-note reportSmall list windows across several reposMarkdown notes, stable IDs and dates
Track release editsMatching previousSnapshotchange, diff IDs and the current snapshot
Tips for better results
  • Start without a token. Add one only if you hit the GitHub rate limit.
  • Use latest mode to get only the current stable release of each repo.
  • Keep each run's snapshot. Use it next time to see what changed.
Limits and good to know
  • Up to 10 repository inputs, 500 raw releases per repository, 1,000 saved rows and 1,000 snapshot entries per run. A successful Cloud scan returned 1,000 real releases; smaller repositories can return fewer
  • Hard process deadline of 300 seconds; sequential requests; up to 30 attempts, two retries per request, 8 MiB per response and 32 MiB response bodies per run. No IP or proxy rotation to bypass GitHub quota
  • Anonymous GitHub REST requests are limited to 60 per hour per IP. Shared Cloud egress can use this quota before your run. Existing authenticated tokens often have higher limits, but secondary limits still apply. See GitHub rate limits
  • Source order is kept. No promise of all history, highest semantic version, every asset beyond the returned API array, or a consistent database snapshot while GitHub changes between pages
  • No private repositories, drafts, bare tags, issues, commit scraping, binary downloads, source mutations or repository search
  • A partial scan keeps useful saved rows. Reasons include repository_limit, result_limit, snapshot_limit, request_limit, byte_limit, deadline, cancelled and charge_limit. Check each repository outcome
  • No proxy is used. Rate-limit headers and Retry-After are respected. If the reset is outside the deadline, the run reports the rate limit instead of waiting for an hour

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "id": "cli/cli:399674740",
  "repository": "cli/cli",
  "owner": "cli",
  "repositoryName": "cli",
  "repositoryUrl": "https://github.com/cli/cli",
  "releaseId": 399674740,
  "tagName": "v2.102.0",
  "name": "GitHub CLI 2.102.0",
  "body": "## Security\n\nFour security vulnerabilities have been identified, and fixed, in this release. Users are advised to update gh to version `v2.102.0` as soon as possible.\n\n`gh release download`, `gh run download`, `gh repo read-file --output`, and `gh attestation download` could write remote content to an unintended local file when the destination contained symbolic links.\n\nSee https://github.com/cli/cli/security/advisories/GHSA-39wj-f2f4-978v for mo",
  "notesFormat": "markdown",
  "createdAt": "2026-09-30T02:18:02Z",
  "publishedAt": "2026-09-30T02:40:02Z",
  "prerelease": false,
  "releaseUrl": "https://github.com/cli/cli/releases/tag/v2.102.0",
  "author": {
    "login": "github-actions[bot]",
    "url": "https://github.com/apps/github-actions"
  },
  "assets": [
    {
      "id": 599854636,
      "name": "gh_2.102.0_checksums.txt",
      "contentType": "text/plain; charset=utf-8",
      "size": 1971,
      "downloadCount": 54188,
      "downloadUrl": "https://github.com/cli/cli/releases/download/v2.102.0/gh_2.102.0_checksums.txt"
    }
  ],
  "notesTruncated": false,
  "assetsTruncated": false,
  "retrievedAt": "2026-10-07T01:30:15.660Z",
  "change": "initial"
}

Use it from code

Actor ID: cliqtomedia/github-releases-monitor-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/github-releases-monitor-scraper").call(run_input={
    "repositories": [
        "cli/cli"
    ],
    "mode": "list"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~github-releases-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"repositories": ["cli/cli"], "mode": "list"}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/github-releases-monitor-scraper")
result = tool.invoke({"run_input": {"repositories": ["cli/cli"], "mode": "list"}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (20)
FieldType
idstring
repositorystring
ownerstring
repositoryNamestring
repositoryUrlstring
releaseIdinteger
tagNamestring
namestring
bodystring
notesFormatstring
createdAtstring
publishedAtstring
prereleaseboolean
releaseUrlstring
authorobject
assetsarray
notesTruncatedboolean
assetsTruncatedboolean
retrievedAtstring
changestring
Input settings (11)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Public repositories requiredrepositoriesarray["cli/cli"]
Release modemodestring"list"
Include prereleasesincludePrereleasesbooleantrue
Releases examined per repositorymaxReleasesPerRepositoryinteger2
Maximum saved releasesmaxResultsinteger2
Return only changesonlyChangesbooleanfalse
Previous snapshotpreviousSnapshotobject
Optional GitHub tokengithubTokenstring
Maximum request attemptsmaxRequestsinteger20
Request timeout in secondsrequestTimeoutSecsinteger20
Scan deadline in secondsdeadlineSecsinteger120

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure