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
3
Total users
2
Monthly active users
7 days ago
Last modified
Categories
Security
Limited permissionsShare
Collect public GitHub profiles, bounded public repository lists, and public organization memberships for one or more accounts through the GitHub REST API. Each dataset row is typed as profile, repository, or organization and preserves stable identity, access status, extraction method, source URLs, and timestamps. The Actor does not access private areas or invent missing fields.
Get started
- Open the Actor Store page and select Try for free or open the Input tab.
- Add public logins or
github.comprofile URLs toaccounts. Theusernames,username,login, andurlsfields are accepted as compatibility aliases. - Keep
maxAccountssmall and decide whether you need repositories and organizations. Pinned repositories are opt-in and require a token. - Start the Actor, open the dataset, and export the rows as JSON, CSV, or Excel. Open Run summary (
OUTPUT) to check profile, repository, organization, and failure counts.
Input
All fields are optional; the defaults below are ready to use. Unsupported field names and out-of-range values are rejected before requests start.
| Field | Type | Required? | Default | Meaning |
|---|---|---|---|---|
accounts | string array | Optional | ["octocat"] | Public GitHub logins or github.com profile URLs, up to 10 entries. |
usernames | string array | Optional | Not supplied | Compatibility alias for accounts, up to 10 entries. |
username | string | Optional | Not supplied | Compatibility alias for one public login, up to 200 characters. |
login | string | Optional | Not supplied | Compatibility alias for one public user or organization login. |
urls | string array | Optional | Not supplied | Compatibility alias for public github.com profile URLs, up to 10 entries. |
maxAccounts | integer | Optional | 5 | Maximum unique accounts to process, 1–10. |
includeRepositories | boolean | Optional | true | Emit a bounded public repository list for each account. |
maxRepositories | integer | Optional | 10 | Maximum repository rows per account, 1–50. |
includeOrganizations | boolean | Optional | true | Emit public organizations exposed by each user profile. |
maxOrganizations | integer | Optional | 20 | Maximum organization rows per user account, 1–50. |
includePinnedRepositories | boolean | Optional | false | Use the public GraphQL endpoint for pinned repositories. Requires githubToken; without one the run records a diagnostic and emits no pinned rows. |
githubToken | string | Optional | Not supplied | Optional caller-supplied token for higher REST limits and pinned repositories. Never included in output. |
requestDelayMs | integer | Optional | 100 | Delay between account workflows, 0–2,000 ms. |
maxRetries | integer | Optional | 2 | Attempts for transient public API failures, 1–4. |
timeoutSecs | integer | Optional | 30 | Timeout per public API request, 5–120 seconds. |
Full default input:
{"accounts": ["octocat"],"maxAccounts": 5,"includeRepositories": true,"maxRepositories": 10,"includeOrganizations": true,"maxOrganizations": 20,"includePinnedRepositories": false,"requestDelayMs": 100,"maxRetries": 2,"timeoutSecs": 30}
The Actor reads public GitHub data only. An optional token is used for the official public API route and is never written to dataset rows or logs.
Output
The dataset contains one row per profile, repository, or organization. Use recordType to distinguish row shapes. Optional fields are omitted when the public source does not publish them or the related enrichment is disabled; no diagnostic rows are written.
| Field | Type | Availability | Meaning |
|---|---|---|---|
recordType | string enum | Always | Row discriminator: profile, repository, or organization. |
recordId | string | Always | Stable identity scoped to this Actor and the record type. |
dataAvailable | boolean | Always | Whether the row contains source-backed public data. |
accessStatus | string enum | Always | Access classification: public or unavailable. |
extractionMethod | string enum | Always | Public API route used: github_rest_api or github_graphql_public. |
account | string | Always | Normalized input account associated with the row. |
login | string | Always | Public login associated with the row. |
accountType | string enum | Always | Account type: User or Organization. |
ownerAccountType | string enum | When a repository row is emitted | Owner type: User or Organization. |
userId | integer | When a profile row is emitted and published | Public numeric user ID. |
name | string | Always | Display name for a profile, repository name for a repository row, or organization name. |
type | string | When a profile row is emitted and published | GitHub account type, normally User or Bot. |
avatarUrl | string | When a profile row is emitted and published | Public avatar URL. |
profileUrl | string | Always | Public GitHub profile URL for the account. |
apiUrl | string | When a profile row is emitted and published | Public API URL for the account. |
bio | string | When a profile row publishes it | Public profile bio. |
description | string | When a repository or organization row publishes it | Repository or organization description. |
company | string | When a profile row publishes it | Public company field. |
location | string | When a profile row publishes it | Public location field. |
blog | string | When a profile row publishes it | Public blog or website field. |
publicEmail | string | When a profile row publishes it | Publicly listed email, if any. |
followers | integer | When a profile row is emitted and published | Follower count. |
following | integer | When a profile row is emitted and published | Following count. |
publicRepos | integer | When a profile row is emitted and published | Public repository count. |
publicGists | integer | When a profile row is emitted and published | Public gist count. |
publicMembers | integer | When an organization row is emitted and published | Public member count. |
siteAdmin | boolean | When a profile row is emitted and published | Whether the account is a site administrator. |
createdAt | string | Always | Account, repository, or organization creation time in ISO UTC. |
updatedAt | string | Always | Last public metadata update in ISO UTC. |
repositoryId | integer | When a repository row is emitted | Public numeric repository ID. |
repositoryName | string | When a repository row is emitted | Repository name without the owner. |
fullName | string | When a repository row is emitted | owner/name repository identifier. |
repositoryUrl | string | When a repository row is emitted | Public repository page URL. |
cloneUrl | string | When a repository row is emitted | Public HTTPS clone URL. |
sshUrl | string | When a repository row is emitted | Public SSH clone URL. |
language | string | When a repository row publishes it | Primary repository language. |
languagesUrl | string | When a repository row is emitted | Public languages API URL. |
topics | string array | When a repository row publishes them | Repository topics. |
stargazersCount | integer | When a repository row is emitted | Stargazer count. |
watchersCount | integer | When a repository row is emitted | Watcher count. |
forksCount | integer | When a repository row is emitted | Fork count. |
openIssuesCount | integer | When a repository row is emitted | Open issue count. |
defaultBranch | string | When a repository row is emitted | Default branch name. |
visibility | string | When a repository row is emitted | Repository visibility. |
isFork | boolean | When a repository row is emitted | Whether the repository is a fork. |
isArchived | boolean | When a repository row is emitted | Whether the repository is archived. |
isPinned | boolean | When a pinned-repository query returns the row | Whether the repository was returned as pinned. |
licenseName | string | When a repository row publishes a license | License name. |
pushedAt | string | When a repository row is emitted | Last push time in ISO UTC. |
organizationId | integer | When an organization row is emitted | Public numeric organization ID. |
organizationLogin | string | When an organization row is emitted | Organization login. |
organizationUrl | string | When an organization row is emitted | Public organization API URL. |
organizationDescription | string | When an organization row publishes it | Organization description. |
sourceUrl | string | Always | Exact public API endpoint that supplied the row. |
scrapedAt | string | Always | Time the row was saved, in ISO UTC. |
The example below is a real saved repository row from the 2026-10-25 run, shortened to representative fields. The same run also emitted one profile row and seven other repository rows.
{"recordType": "repository","recordId": "github-user:repository:octocat%2Flinguist","dataAvailable": true,"accessStatus": "public","extractionMethod": "github_rest_api","account": "octocat","login": "octocat","accountType": "User","ownerAccountType": "User","name": "linguist","profileUrl": "https://github.com/octocat","description": "Language Savant. If your repository's language is being reported incorrectly, send us a pull request!","scrapedAt": "2026-10-25T21:09:21.812Z","sourceUrl": "https://api.github.com/users/octocat/repos?type=owner&sort=updated&direction=desc&per_page=10"}
Run summary
Run summary is stored separately from the dataset in the run's key-value store under OUTPUT.
| Field | Meaning |
|---|---|
status | Actor outcome: SUCCEEDED or FAILED. |
runStatus | Canonical run status; matches status. |
dataStatus | Completeness of saved rows: COMPLETE, PARTIAL, NO_RESULTS, or FAILED. |
dataAvailable | Whether normal public records were emitted. |
accounts | Normalized accounts processed. |
profileCount | Profile rows emitted. |
repositoryCount | Repository rows emitted. |
organizationCount | Organization rows emitted. |
pinnedRepositoryCount | Repository rows returned by the public pinned-repository query. |
diagnosticCount | Failed or unavailable source requests; no diagnostic rows are emitted. |
httpRequests | Public API requests made. |
recordsPushed | All dataset rows emitted. |
normalCount | Non-diagnostic rows emitted. |
itemCount | Records saved to the dataset. |
includeRepositories | Whether repository enrichment was requested. |
includeOrganizations | Whether organization enrichment was requested. |
includePinnedRepositories | Whether pinned repositories were requested. |
authenticated | Whether a caller token was used. |
rateLimitSamples | Sanitized public API rate-limit samples. |
durationMs | Run duration in milliseconds. |
completedAt | Run completion time in ISO UTC. |
sourceBaseUrl | Public API base URL. |
| Status | Data status | Meaning |
|---|---|---|
SUCCEEDED | COMPLETE | Eligible accounts and related rows were saved without an extraction problem. |
SUCCEEDED | PARTIAL | Some rows were saved, but a later account or enrichment request failed. |
SUCCEEDED | NO_RESULTS | The public API completed cleanly without usable account data. |
FAILED | FAILED | A fatal error occurred before any usable row was saved. |
Example OUTPUT from the saved run:
{"status": "SUCCEEDED","runStatus": "SUCCEEDED","dataStatus": "COMPLETE","dataAvailable": true,"accounts": ["octocat"],"profileCount": 1,"repositoryCount": 8,"organizationCount": 0,"pinnedRepositoryCount": 0,"diagnosticCount": 0,"httpRequests": 3,"recordsPushed": 9,"normalCount": 9,"itemCount": 9,"includeRepositories": true,"includeOrganizations": true,"includePinnedRepositories": false,"authenticated": false,"rateLimitSamples": [{ "remaining": 59, "reset": 1792966161 },{ "remaining": 58, "reset": 1792966161 },{ "remaining": 57, "reset": 1792966161 }],"durationMs": 938,"completedAt": "2026-10-25T21:09:22.750Z","sourceBaseUrl": "https://api.github.com"}
Coverage and limitations
The Actor reads public GitHub REST data for user profiles, repository lists, and organization memberships. It does not log in, use a proxy, access private repositories or profiles, or bypass rate limits and other access controls. Organization rows appear only when the public profile exposes memberships; an empty list is a valid result. Repository rows are bounded by maxRepositories, and organization rows by maxOrganizations.
Pinned repositories are opt-in and use the public GraphQL endpoint, which requires a caller-supplied githubToken. Without a token, pinned enrichment records a diagnostic and no repository is mislabeled as pinned. Public profiles can omit name, bio, company, location, blog, email, or counts; those fields are left out rather than guessed. Counts, repositories, and organization memberships are point-in-time and can change after the run.
Usage and support
Cost depends on Apify compute, the number of accounts, and how many repository and organization requests are enabled. Start with one account, includeOrganizations: false, and a small maxRepositories to validate the output shape; then enable the enrichments you need. requestDelayMs, maxRetries, and timeoutSecs control pacing and failure tolerance. See the Actor's Pricing tab for current account rates.
Use the Actor Issues page to report a problem. Include the run ID, the input used, and the run summary; do not include tokens, cookies, or private data. This Actor is not affiliated with, endorsed by, or sponsored by GitHub. Use it only for public data and in accordance with GitHub's terms, robots guidance, and applicable law. Public profiles can contain personal information; use the output only for lawful purposes.