GitHub User Scraper — Profiles, Repos & Orgs
Pricing
from $2.99 / 1,000 users, repositories & organizations
GitHub User Scraper — Profiles, Repos & Orgs
Fetch public GitHub user or organization metadata, bounded public repositories, public organizations, and explicit diagnostics.
Pricing
from $2.99 / 1,000 users, repositories & organizations
Rating
0.0
(0)
Developer
w3crawler
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
What does GitHub User Scraper do?
GitHub User Scraper collects public GitHub profiles, bounded public repository lists, and public organizations using the GitHub REST API for one or more accounts. It preserves source URLs, record type, stable identity, access status, and timestamps; it does not access private areas or invent missing fields.
Why use GitHub User Scraper?
Use this Actor for an auditable public profile export, lightweight repository and organization enrichment, or scheduled monitoring of accounts you are authorized to analyze. Profile, repository, organization, and diagnostic rows are explicitly discriminated, so downstream workflows can consume them safely. Apify provides run history, API access, scheduling, integrations, and monitoring around the extraction. Repository and organization counts are bounded per account, and the Actor uses documented public endpoints only. Pinned repositories are opt-in and require a caller-supplied GitHub token for the public GraphQL endpoint; ordinary REST repository results are never mislabeled as pinned. Proxy rotation is not used.
What data can GitHub User Scraper extract?
| Record | Useful fields | Description |
|---|---|---|
profile | login, accountType, name, bio, location, followers, publicRepos, profileUrl | Public user or organization profile data. |
repository | repositoryName, fullName, repositoryUrl, language, topics, stargazersCount, isPinned | Bounded public repositories for each processed account. |
organization | organizationLogin, organizationUrl, description, publicRepos, publicMembers | Organizations exposed by a public user profile. |
| Any row | recordType, recordId, dataAvailable, accessStatus, extractionMethod, sourceUrl, scrapedAt | Stable contract and provenance fields. |
diagnostic | url, error, errorCode | Minimal source failure details without fabricated data. |
How to scrape GitHub users and repositories
- Open the Actor in Apify Console and add account logins or
github.comprofile URLs to the Input tab. - Choose whether to include repositories, organizations, or token-backed pinned repositories, and set their per-account limits.
- Start the run, review the dataset and
OUTPUTsummary, then connect the dataset through the API, an integration, or a schedule.
How much will it cost to scrape GitHub users?
Apify billing follows the selected Actor pricing and compute used by each run; no fixed price is promised here. Each account can trigger profile, repository, organization, and optional GraphQL requests. More accounts, larger per-account limits, retries, and long timeouts increase request volume or run time. Use small limits for smoke tests and respect GitHub’s public rate limits.
Input
See the input tab for the complete configuration. accounts, usernames, and urls are string arrays; username and login are single-value compatibility aliases. All supplied accounts are combined in that order, trimmed, validated, restricted to a one-segment public GitHub profile, deduplicated case-insensitively, and capped globally by maxAccounts (1–10, default 5). With no account, the default is octocat. Invalid values are rejected; the Actor does not silently fall back to the default after a malformed value.
includeRepositories and includeOrganizations default to true, with maxRepositories 1–50 (default 10) and maxOrganizations 1–50 (default 20) per account. includePinnedRepositories defaults to false; enabling it without githubToken produces a diagnostic. githubToken may also come from the GITHUB_TOKEN environment secret, is sent only as authorization, and is never written to output. Developer controls are requestDelayMs 0–2000 (default 100), maxRetries 1–4 (default 2), and timeoutSecs 5–120 (default 30). This Actor does not accept startUrls, browser settings, or proxy configuration.
Minimal run
{}
Multiple accounts with enrichment
{"accounts": ["octocat", "github", "torvalds"],"maxAccounts": 3,"includeRepositories": true,"maxRepositories": 3,"includeOrganizations": true,"maxOrganizations": 5,"requestDelayMs": 250}
Public pinned repositories with developer controls
{"accounts": ["octocat"],"includeRepositories": false,"includeOrganizations": false,"includePinnedRepositories": true,"githubToken": "<stored-in-console-secret>","requestDelayMs": 0,"maxRetries": 1,"timeoutSecs": 30}
Output
Every row has a recordType and stable recordId. Normal rows are source-backed public data with dataAvailable: true; diagnostics use dataAvailable: false, accessStatus: "unavailable", and only bounded failure metadata. Missing optional source fields are omitted. Repository limits are per account and the dataset is not a paginated global search; organization requests are user-only, while pinned repositories are user-only GraphQL results.
Profile row
{"recordType": "profile","recordId": "github-user:profile:octocat","dataAvailable": true,"accessStatus": "public","extractionMethod": "github_rest_api","account": "octocat","login": "octocat","accountType": "User","profileUrl": "https://github.com/octocat","sourceUrl": "https://api.github.com/users/octocat","scrapedAt": "2026-09-08T00:00:00.000Z"}
Diagnostic row and run summary
{"recordType": "diagnostic","recordId": "github-user:diagnostic:account_request_failed:https%3A%2F%2Fapi.github.com%2Fusers%2Fmissing-user","dataAvailable": false,"accessStatus": "unavailable","extractionMethod": "github_rest_api","url": "https://api.github.com/users/missing-user","error": "Not Found","errorCode": "ACCOUNT_REQUEST_FAILED","scrapedAt": "2026-09-08T00:00:00.000Z"}
OUTPUT summarizes status, normalized accounts, profile/repository/organization/diagnostic counts, request totals, optional pinned counts, sanitized rate-limit samples, configuration flags, duration, and completion time. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Tips and advanced options
Start with one account and small per-account limits. Increase requestDelayMs or reduce concurrency pressure when public rate limits are low. maxRetries retries transient HTTP failures only; a source failure is retained as a diagnostic and does not become a fake profile or repository. Keep tokens in Apify secret input storage and do not paste them into shared examples or downstream logs.
FAQ, support, and responsible use
If output contains diagnostics, inspect the row’s errorCode, url, and OUTPUT counts. GitHub may change public fields or rate limits between runs. Report bugs in the Actor’s Issues tab with the run ID, input, summary, and affected public URL. Use only information account owners made public, follow GitHub’s terms and rate limits, respect privacy and applicable law, and obtain legal advice for personal-data processing. This Actor is not affiliated with or endorsed by GitHub.
Local verification
npm cinpm testnpm run checkapify validate-schemaapify run --purge --input-file test/inputs/live-smoke.jsonnpm run validate