GitHub User Scraper — Profiles, Repos & Orgs avatar

GitHub User Scraper — Profiles, Repos & Orgs

Pricing

from $2.99 / 1,000 users, repositories & organizations

Go to Apify Store
GitHub User Scraper — Profiles, Repos & Orgs

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

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

7 days ago

Last modified

Categories

Security

Limited permissions

Share

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

  1. Open the Actor Store page and select Try for free or open the Input tab.
  2. Add public logins or github.com profile URLs to accounts. The usernames, username, login, and urls fields are accepted as compatibility aliases.
  3. Keep maxAccounts small and decide whether you need repositories and organizations. Pinned repositories are opt-in and require a token.
  4. 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.

FieldTypeRequired?DefaultMeaning
accountsstring arrayOptional["octocat"]Public GitHub logins or github.com profile URLs, up to 10 entries.
usernamesstring arrayOptionalNot suppliedCompatibility alias for accounts, up to 10 entries.
usernamestringOptionalNot suppliedCompatibility alias for one public login, up to 200 characters.
loginstringOptionalNot suppliedCompatibility alias for one public user or organization login.
urlsstring arrayOptionalNot suppliedCompatibility alias for public github.com profile URLs, up to 10 entries.
maxAccountsintegerOptional5Maximum unique accounts to process, 1–10.
includeRepositoriesbooleanOptionaltrueEmit a bounded public repository list for each account.
maxRepositoriesintegerOptional10Maximum repository rows per account, 1–50.
includeOrganizationsbooleanOptionaltrueEmit public organizations exposed by each user profile.
maxOrganizationsintegerOptional20Maximum organization rows per user account, 1–50.
includePinnedRepositoriesbooleanOptionalfalseUse the public GraphQL endpoint for pinned repositories. Requires githubToken; without one the run records a diagnostic and emits no pinned rows.
githubTokenstringOptionalNot suppliedOptional caller-supplied token for higher REST limits and pinned repositories. Never included in output.
requestDelayMsintegerOptional100Delay between account workflows, 0–2,000 ms.
maxRetriesintegerOptional2Attempts for transient public API failures, 1–4.
timeoutSecsintegerOptional30Timeout 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.

FieldTypeAvailabilityMeaning
recordTypestring enumAlwaysRow discriminator: profile, repository, or organization.
recordIdstringAlwaysStable identity scoped to this Actor and the record type.
dataAvailablebooleanAlwaysWhether the row contains source-backed public data.
accessStatusstring enumAlwaysAccess classification: public or unavailable.
extractionMethodstring enumAlwaysPublic API route used: github_rest_api or github_graphql_public.
accountstringAlwaysNormalized input account associated with the row.
loginstringAlwaysPublic login associated with the row.
accountTypestring enumAlwaysAccount type: User or Organization.
ownerAccountTypestring enumWhen a repository row is emittedOwner type: User or Organization.
userIdintegerWhen a profile row is emitted and publishedPublic numeric user ID.
namestringAlwaysDisplay name for a profile, repository name for a repository row, or organization name.
typestringWhen a profile row is emitted and publishedGitHub account type, normally User or Bot.
avatarUrlstringWhen a profile row is emitted and publishedPublic avatar URL.
profileUrlstringAlwaysPublic GitHub profile URL for the account.
apiUrlstringWhen a profile row is emitted and publishedPublic API URL for the account.
biostringWhen a profile row publishes itPublic profile bio.
descriptionstringWhen a repository or organization row publishes itRepository or organization description.
companystringWhen a profile row publishes itPublic company field.
locationstringWhen a profile row publishes itPublic location field.
blogstringWhen a profile row publishes itPublic blog or website field.
publicEmailstringWhen a profile row publishes itPublicly listed email, if any.
followersintegerWhen a profile row is emitted and publishedFollower count.
followingintegerWhen a profile row is emitted and publishedFollowing count.
publicReposintegerWhen a profile row is emitted and publishedPublic repository count.
publicGistsintegerWhen a profile row is emitted and publishedPublic gist count.
publicMembersintegerWhen an organization row is emitted and publishedPublic member count.
siteAdminbooleanWhen a profile row is emitted and publishedWhether the account is a site administrator.
createdAtstringAlwaysAccount, repository, or organization creation time in ISO UTC.
updatedAtstringAlwaysLast public metadata update in ISO UTC.
repositoryIdintegerWhen a repository row is emittedPublic numeric repository ID.
repositoryNamestringWhen a repository row is emittedRepository name without the owner.
fullNamestringWhen a repository row is emittedowner/name repository identifier.
repositoryUrlstringWhen a repository row is emittedPublic repository page URL.
cloneUrlstringWhen a repository row is emittedPublic HTTPS clone URL.
sshUrlstringWhen a repository row is emittedPublic SSH clone URL.
languagestringWhen a repository row publishes itPrimary repository language.
languagesUrlstringWhen a repository row is emittedPublic languages API URL.
topicsstring arrayWhen a repository row publishes themRepository topics.
stargazersCountintegerWhen a repository row is emittedStargazer count.
watchersCountintegerWhen a repository row is emittedWatcher count.
forksCountintegerWhen a repository row is emittedFork count.
openIssuesCountintegerWhen a repository row is emittedOpen issue count.
defaultBranchstringWhen a repository row is emittedDefault branch name.
visibilitystringWhen a repository row is emittedRepository visibility.
isForkbooleanWhen a repository row is emittedWhether the repository is a fork.
isArchivedbooleanWhen a repository row is emittedWhether the repository is archived.
isPinnedbooleanWhen a pinned-repository query returns the rowWhether the repository was returned as pinned.
licenseNamestringWhen a repository row publishes a licenseLicense name.
pushedAtstringWhen a repository row is emittedLast push time in ISO UTC.
organizationIdintegerWhen an organization row is emittedPublic numeric organization ID.
organizationLoginstringWhen an organization row is emittedOrganization login.
organizationUrlstringWhen an organization row is emittedPublic organization API URL.
organizationDescriptionstringWhen an organization row publishes itOrganization description.
sourceUrlstringAlwaysExact public API endpoint that supplied the row.
scrapedAtstringAlwaysTime 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.

FieldMeaning
statusActor outcome: SUCCEEDED or FAILED.
runStatusCanonical run status; matches status.
dataStatusCompleteness of saved rows: COMPLETE, PARTIAL, NO_RESULTS, or FAILED.
dataAvailableWhether normal public records were emitted.
accountsNormalized accounts processed.
profileCountProfile rows emitted.
repositoryCountRepository rows emitted.
organizationCountOrganization rows emitted.
pinnedRepositoryCountRepository rows returned by the public pinned-repository query.
diagnosticCountFailed or unavailable source requests; no diagnostic rows are emitted.
httpRequestsPublic API requests made.
recordsPushedAll dataset rows emitted.
normalCountNon-diagnostic rows emitted.
itemCountRecords saved to the dataset.
includeRepositoriesWhether repository enrichment was requested.
includeOrganizationsWhether organization enrichment was requested.
includePinnedRepositoriesWhether pinned repositories were requested.
authenticatedWhether a caller token was used.
rateLimitSamplesSanitized public API rate-limit samples.
durationMsRun duration in milliseconds.
completedAtRun completion time in ISO UTC.
sourceBaseUrlPublic API base URL.
StatusData statusMeaning
SUCCEEDEDCOMPLETEEligible accounts and related rows were saved without an extraction problem.
SUCCEEDEDPARTIALSome rows were saved, but a later account or enrichment request failed.
SUCCEEDEDNO_RESULTSThe public API completed cleanly without usable account data.
FAILEDFAILEDA 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.