GitHub Repo API — Repo Info, README, Stars, Releases & Issues
Pricing
$0.30 / 1,000 repos
GitHub Repo API — Repo Info, README, Stars, Releases & Issues
Repo details, stars, forks, topics, license, languages, latest releases, README, contributor count and recent commits from GitHub's public API, by name, link or search. Unofficial GitHub API.
Pricing
$0.30 / 1,000 repos
Rating
0.0
(0)
Developer
yestrue
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Everything GitHub shows about a repository as one clean JSON record: description, homepage, stars, forks, watchers, open issues and pull requests, topics, license, main language and the bytes per language, default branch, created / updated / last-push dates, the latest release and the five most recent ones, the README as Markdown, the number of contributors and — when you want them — the ten most recent commits. Look repositories up by owner/name, by any github.com link or git address, or find them with GitHub's own repository search ("web scraping language:javascript stars:>500"). Built on GitHub's public REST API: no token needed, and a free token makes it 80 times faster.
Try it in 1 minute:
- Press Start — the prefilled input looks up two repositories:
apify/crawlee(by name) andexpressjs/express(by link). - Seconds later the Output tab shows both records with stars, forks, open issues, license, languages, topics, latest release, contributor count and the README.
- Download JSON, CSV or Excel, or add Search queries, switch Include recent commits on and paste a GitHub token for runs of hundreds of repositories.
Price: $0.30 per 1,000 repos (one repository = one record, with README, releases, languages, contributor count and commits included when you ask for them). Repositories that do not exist, queries without matches, invalid inputs and inputs stopped by GitHub's hourly limit are free.
Use it to:
- Track the open-source projects you depend on: stars, open issues, last push, latest release and license, on a schedule, as a table.
- Build a market or competitor report from a search — the 100 most-starred "vector database" or "LLM agent" repositories, with positions.
- Feed an AI assistant or a RAG pipeline the README and recent commits of a repository, without browsing GitHub.
- Enrich a list of GitHub links from your CRM, a spreadsheet or a job post with structured facts: language, size, license, activity, contributors.
- Check a dependency before adopting it: is it archived, a fork, unlicensed, abandoned (last push), a one-person project (contributor count)?
How it works
- Repositories:
owner/name, github.com links (any page of the repository — code, issues, a file — works),git@github.com:owner/name.gitandssh:///git://addresses are parsed and deduplicated (case-insensitively). Each is read withGET /repos/{owner}/{name}of GitHub's REST API v3. A renamed or moved repository follows GitHub's redirect and the record shows its current name. - Search queries go to
GET /search/repositorieswith GitHub's own query syntax and qualifiers (language:,stars:>,topic:,org:,pushed:>, …), ordered by stars, forks, last update or best match, one page of up to Max results (max 100) per query, each result with itsposition. A search result already is a full repository payload, so it costs no second request. - Extras, each one more request per repository and each switchable: the README (
/readmeas raw Markdown, cut at 200 KB), the 5 most recent releases (/releases), the languages (/languages), the contributor count (/contributors?per_page=1&anon=true— the count is read from the paging header, so no usernames are fetched) and the 10 most recent commits (/commits), delivered without author names or e-mail addresses. - Rate limits: GitHub allows 60 requests an hour per IP without a token (about 12 repositories an hour with all extras on) and 5,000 an hour with one. The Actor watches the
X-RateLimit-Remainingheader after every call; when fewer than 8 requests are left it stops fetching the extras and says so in each record'swarnings, so the repository facts keep coming; when the hour is used up and the reset is more than a minute away it does not block the run but delivers the remaining inputs as freeFAILEDrecords naming the reset time. A reset that is less than a minute away is simply waited for.
Requests go directly to api.github.com (no proxy, unless a connection drops); the token, when given, travels only in the request header and never appears in the results or the log. Phone numbers and e-mail addresses are removed from descriptions, READMEs and commit messages.
Input
| Field | What it does |
|---|---|
repos | Repositories to look up: owner/name, a github.com link or a git address, one per line. |
queries | GitHub repository searches, one per line, with GitHub's qualifiers (language:, stars:>500, topic:, org:). |
maxResults | Repositories per query — one search page, so up to 100 (default 10). |
sort | Search order: stars (default), forks, updated or best-match. |
githubToken | Optional personal access token (no scopes needed for public repositories): 5,000 requests an hour instead of 60. Stored as a secret. |
includeReadme | Add the README as Markdown, up to 200 KB (default on). |
includeReleases | Add the latest release and up to 5 recent ones (default on). |
includeLanguages | Add { language: bytes } (default on). |
includeContributorsCount | Add the number of contributors — a count only (default on). |
includeCommits | Add the 10 most recent commits without author data (default off). |
maxConcurrency | Repositories handled at the same time (default 2). |
proxyConfiguration | Used only to retry after a network error; the first try is direct. |
Output
One record per repository:
| Field | What it is |
|---|---|
repo, url, owner, ownerType | owner/name, its page, the owning account's login and whether it is a User or an Organization |
description, homepage, topics[], license | What it is; license is the SPDX id (MIT, Apache-2.0), Other for a custom one, null when none |
stars, forks, watchers, openIssues | Counts; openIssues is GitHub's open_issues_count, which includes open pull requests; watchers is null for search results (GitHub's search payload has no such field) |
isFork, isArchived, defaultBranch, language, languages{} | State, default branch, main language and bytes per language |
createdAt, updatedAt, pushedAt, size | ISO 8601 dates and the size in KB |
hasWiki, hasPages, hasDiscussions | Enabled features |
latestRelease, releases[] | { tag, name, publishedAt, url, assetsCount, isPrerelease } — the newest non-pre-release, and up to 5 recent releases newest first |
readme, readmeTruncated | The README as Markdown and whether it was cut at 200 KB |
contributorsCount | Number of contributors, anonymous ones included — no usernames |
commits[] | With Include recent commits on: { sha, message, date, url }, newest first, no author names or e-mails |
source, query, position | repos or search, the query and the 1-based position in its results |
warnings[], rateLimitRemaining | Extras that were skipped or failed and why; GitHub requests left in the current hour |
input, status, error, scrapedAt | What you gave, OK / NOT_FOUND / NO_RESULTS / INVALID_INPUT / FAILED, the reason, and when |
Example
{"input": "https://github.com/expressjs/express","source": "repos","query": null,"position": null,"repo": "expressjs/express","url": "https://github.com/expressjs/express","owner": "expressjs","ownerType": "Organization","description": "Fast, unopinionated, minimalist web framework for node.","homepage": "https://expressjs.com","stars": 67812,"forks": 19540,"watchers": 1710,"openIssues": 182,"isFork": false,"isArchived": false,"defaultBranch": "master","language": "JavaScript","languages": { "JavaScript": 598231 },"topics": ["express", "javascript", "nodejs", "server"],"license": "MIT","createdAt": "2009-06-26T18:56:01.000Z","updatedAt": "2026-10-19T07:41:12.000Z","pushedAt": "2026-10-17T14:02:55.000Z","size": 11874,"hasWiki": true,"hasPages": false,"hasDiscussions": true,"latestRelease": { "tag": "5.1.0", "name": "5.1.0", "publishedAt": "2026-09-30T16:20:04.000Z", "url": "https://github.com/expressjs/express/releases/tag/5.1.0", "assetsCount": 0, "isPrerelease": false },"releases": [{ "tag": "5.1.0", "name": "5.1.0", "publishedAt": "2026-09-30T16:20:04.000Z", "url": "https://github.com/expressjs/express/releases/tag/5.1.0", "assetsCount": 0, "isPrerelease": false },{ "tag": "5.0.1", "name": "5.0.1", "publishedAt": "2026-08-02T10:11:45.000Z", "url": "https://github.com/expressjs/express/releases/tag/5.0.1", "assetsCount": 0, "isPrerelease": false }],"readme": "[](http://expressjs.com/)\n\nFast, unopinionated, minimalist web framework for Node.js.\n\n```js\nconst express = require('express')\n…","readmeTruncated": false,"contributorsCount": 311,"commits": [{ "sha": "9f1c2e7d3b4a5c6d7e8f9a0b1c2d3e4f5a6b7c8d", "message": "fix: handle trailing slash in router (#6210)", "date": "2026-10-17T14:02:55.000Z", "url": "https://github.com/expressjs/express/commit/9f1c2e7d3b4a5c6d7e8f9a0b1c2d3e4f5a6b7c8d" }],"warnings": [],"rateLimitRemaining": 4987,"status": "OK","error": null,"scrapedAt": "2026-10-19T12:00:00.000Z"}
FAQ
Is this an official API? No, it's an unofficial API built on public pages and endpoints — GitHub's public REST API v3, which needs no key for public repositories. The data is what github.com itself shows; this Actor only collects the six endpoints of a repository into one stable JSON record and handles GitHub's rate limits for you.
Do I need a GitHub token? Not for a handful of repositories: GitHub allows 60 requests an hour per IP, and a repository with all extras costs 5 of them. For more, create a personal access token (Settings → Developer settings → Personal access tokens; no scopes or permissions are needed for public data) and paste it into GitHub token: 5,000 requests an hour, about 1,000 repositories. The token is stored as a secret and only ever sent to api.github.com.
What happens when the rate limit hits? Nothing is lost silently. With fewer than 8 requests left, the extras are skipped and listed in warnings so the repository facts still arrive. When the hour is used up, the remaining inputs come back as free FAILED records with the reset time; run them again after it, or with a token.
Why is openIssues higher than the Issues tab? GitHub's API counts open issues and open pull requests together in open_issues_count; the Issues tab shows issues only.
Why is a repository NOT_FOUND? It is private, was deleted or renamed, or the spelling is off. GitHub's API answers 404 for private repositories even when they exist. A repository taken down for legal reasons (HTTP 451) is also reported as NOT_FOUND with the reason.
Like it? A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.
Related Actors
- GitHub Trending Scraper — trending repos by language and period
- Hacker News Scraper — stories, comments and search
- Web Fetch API — any URL as HTML, text, Markdown or JSON
- Article Extractor API — title, author, date and full text of any article
- Website Tech Stack Detector — CMS, frameworks and analytics of any site