GitHub Scraper: Repos, Owners, Issues & Contributors avatar

GitHub Scraper: Repos, Owners, Issues & Contributors

Pricing

from $0.75 / 1,000 rows

Go to Apify Store
GitHub Scraper: Repos, Owners, Issues & Contributors

GitHub Scraper: Repos, Owners, Issues & Contributors

Search GitHub repositories with the full search syntax, or pull specific repos, whole organisations and user profiles. Returns stars, forks, language, topics, license, activity dates, plus optional contributors and issues. Official GitHub API: a token is optional, not required.

Pricing

from $0.75 / 1,000 rows

Rating

0.0

(0)

Developer

Daniel Meshulam

Daniel Meshulam

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Search GitHub the way GitHub search works, and get structured rows back.

{ "searchQueries": ["topic:web-scraping stars:>500"], "sortBy": "stars" }

No token required. Give it one and it goes faster, see below.

Four ways in

InputWhat you get
searchQueriesfull GitHub search syntax: language:rust stars:>1000, org:apify archived:false, topic:mcp pushed:>2026-01-01
repositoriesspecific repos as owner/name
ownersevery public repo of a user or an organisation, you do not have to know which
usersprofile details: name, company, location, followers, public email if published

Turn on includeContributors or includeIssues and every repo in repositories also returns its contributors ranked by commits, or its issues and pull requests newest-activity-first.

The rate limit, stated plainly

Unauthenticated GitHub allows 60 requests per hour per IP. Every Actor in this niche hits it; most just fail and blame the network.

Two things are done about it here:

  1. Proxy rotation on exhaustion. GitHub answers with 403 and x-ratelimit-remaining: 0. That triggers a new IP, and a new IP has a fresh 60. A run keeps going instead of dying at request 61.
  2. Pages of 100. Every list request asks for GitHub's maximum page size, so one request returns 100 rows instead of the default 30. Three times fewer requests against the same limit.

When it genuinely runs out, you get one error row that says so and names the fix, not a silent empty dataset.

With a token (githubToken) the limit becomes 5,000 requests per hour. Create one at Settings → Developer settings → Personal access tokens; no scopes are needed for public data. It is sent to api.github.com and nowhere else, is marked secret in the input schema, and never appears in a result row.

Output

Every row carries recordType, so a mixed run stays sortable:

  • repo, full name, owner, description, language, stars, forks, watchers, open issues, topics, license, size, createdAt / updatedAt / pushedAt, archived and fork flags
  • user, login, name, company, location, blog, bio, followers, following, public repo count, hireable
  • contributor, login, commit count, profile URL
  • issue / pull_request, number, title, state, author, labels, comment count, body

Use cases

  • Developer lead generation: find maintainers of repos using your competitor's SDK
  • Competitive and OSS research, who is building in your space, and is it still maintained (pushedAt, isArchived)
  • Dependency and supply-chain review: license, activity and contributor concentration per repo
  • Hiring: search by language and topic, then pull profiles
  • AI agents: clean JSON over the API, no HTML parsing

Pricing

Charged per row returned. A repo that does not exist, a query GitHub rejects, or an exhausted rate limit produces an error row and costs $0.00.

Notes

  • Only public data. email appears solely when the user has chosen to publish it on their profile; nothing is inferred, guessed or assembled from commits.
  • GitHub caps any single search at 1,000 results regardless of maxResultsPerQuery. Narrow the query, by language, by star range, by date, to go past it.
  • owners tries the organisation endpoint first and falls back to the user one, so it works either way without you knowing which the login is.

FAQ

Do I need a GitHub token?

No. It works unauthenticated. GitHub's unauthenticated limit is 60 requests per hour per IP, which this handles by rotating proxy IPs on exhaustion and asking for 100-row pages. Supplying githubToken raises the limit to 5,000 requests per hour and is worth it for large runs.

What scopes does the token need?

None. A classic personal access token with no scopes ticked is enough for public data. Create one at Settings → Developer settings → Personal access tokens. It is sent to api.github.com and nowhere else, is marked secret in the input schema, and never appears in a result row.

Yes, that is the point of searchQueries. language:rust stars:>1000, topic:mcp pushed:>2026-01-01, org:apify archived:false all work exactly as they do on github.com.

Why do I get fewer than 1,000 results?

GitHub caps any single search at 1,000 results no matter what you set maxResultsPerQuery to. Split the query by language, by star range or by push date to get past it. That is a GitHub limit, not an Actor one.

Do I have to know whether a login is a user or an organisation?

No. owners tries the organisation endpoint first and falls back to the user endpoint, so it returns every public repo either way.

Can I get contributor email addresses?

email appears only when the user has chosen to publish it on their public profile. Nothing is inferred, guessed, or assembled out of commit metadata.

How do I tell whether a project is still maintained?

pushedAt and isArchived on every repo row. pushedAt is the last push to any branch, which is a far better liveness signal than updatedAt, which moves when someone merely stars the repo.