🔥Github Profile Scraper avatar

🔥Github Profile Scraper

Pricing

from $0.75 / 1,000 results

Go to Apify Store
🔥Github Profile Scraper

🔥Github Profile Scraper

Extract public GitHub user, organization, and bot profiles from usernames or URLs. Collect account types, bios, avatars, repository counts, followers, timestamps, and organization verification in structured results.

Pricing

from $0.75 / 1,000 results

Rating

0.0

(0)

Developer

AimScrape

AimScrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Categories

Share

What does GitHub Profile Scraper do?

GitHub Profile Scraper collects public profile metadata for GitHub users, organizations, and bots from usernames or profile URLs. It returns account identity, profile type, biography, avatar, public repository and gist counts, followers, timestamps, and organization verification in a structured Dataset you can download or access through the Apify API.

The Actor collects publicly available GitHub profile information without requiring sign-in or accessing private data.

How to scrape GitHub profiles

  1. Open the Input tab and add GitHub usernames or profile URLs.
  2. Start the Actor. Use a few targets for the first run to inspect the available public fields.
  3. Follow progress in the run log, then open Profiles in the Output tab.
  4. Download the Dataset as JSON, CSV, Excel, or another format supported by Apify, or retrieve it through the API.

Use Apify schedules for recurring collection. Each run captures the public values returned by GitHub at collection time, so separate runs can be compared to monitor profile changes.

Why use GitHub Profile Scraper?

  • Developer and organization research: collect consistent identity, biography, location, website, and account-type data.
  • Public profile directories: normalize usernames and profile URLs into one stable record format.
  • Account monitoring: track public repository, gist, follower, and following counts over time.
  • Organization verification: identify organization profiles and collect GitHub's public verification and archive state when available.
  • Automation: run through Apify Console, schedules, API calls, integrations, and monitoring without maintaining custom scraping infrastructure.

Input

{
"usernames": [
"octocat",
"https://github.com/github"
],
"skipInvalidInputs": true
}

usernames is required and accepts between 1 and 100,000 entries. You can mix these formats in one run:

FormatExample
Usernameoctocat
Username with an @ prefix@octocat
HTTPS profile URLhttps://github.com/octocat

The input form first checks only that each entry has the basic shape of a bare username, an @username, or a supported profile URL. This broad check permits letters, digits, periods, underscores, and hyphens without imposing a username length or first/last character rule, so one malformed entry does not prevent valid entries in the same list from running. Before queueing, the Actor applies GitHub's exact rule: 1–39 characters, with an alphanumeric first and last character. Profile URLs must use github.com or www.github.com and contain one profile path segment.

By default, skipInvalidInputs is true, so values rejected by the strict runtime check are omitted from the Dataset without making a network request. Set it to false to store one invalid_input row per distinct invalid entry; valid entries continue normally. Recognizable credentials in invalid strings are redacted before output. Repository URLs, query parameters, fragments, embedded credentials, and non-GitHub hosts remain invalid.

Inputs are normalized to lowercase and equivalent targets are collected once per run. For example, GitHub, @github, and https://github.com/GitHub/ identify the same requested profile.

What data can GitHub Profile Scraper extract?

All output properties use lower camelCase.

FieldTypeMeaning
statusstringok, not_found, or invalid_input.
idstring or nullGitHub numeric account ID serialized as text.
usernamestringNormalized requested username used for queue and recovery identity; for invalid_input, the redacted submitted string.
canonicalUsernamestring or nullCanonical login returned by GitHub.
profileTypestring or nullGitHub account type, such as User, Organization, or Bot.
isVerifiedboolean or nullGitHub organization verification when available.
archivedAtstring or nullOrganization archive timestamp when available.
url, apiUrlstring / string or nullPublic profile URL and final public API URL.
avatarUrl, name, biostring or nullPublic avatar, display name, and biography or organization description.
company, blog, location, emailstring or nullPublic profile values returned by GitHub. Location is not inferred.
hireable, siteAdminboolean or nullPublic account flags when returned.
twitterUsernamestring or nullPublic Twitter/X username when returned.
publicRepoCount, publicGistCountinteger or nullPublic repository and gist counts.
followerCount, followingCountinteger or nullPublic follower and following counts.
createdAt, updatedAtstring or nullGitHub account timestamps.
crawledAtstringUTC collection timestamp in ISO 8601 format.

Every row contains the complete field set. Missing optional values are explicit null; real zero counts and false flags remain unchanged.

An invalid_input row contains the redacted submitted value in username, its collection time in crawledAt, and explicit null for profile metadata, including url.

Output example

The following is synthetic example data, not a captured live account:

{
"status": "ok",
"id": "9919",
"username": "example-org",
"canonicalUsername": "example-org",
"profileType": "Organization",
"isVerified": true,
"archivedAt": null,
"url": "https://github.com/example-org",
"apiUrl": "https://api.github.com/orgs/example-org",
"avatarUrl": "https://avatars.githubusercontent.com/u/9919?v=4",
"name": "Example Organization",
"company": "Example, Inc.",
"blog": "https://example.com",
"location": "Singapore",
"email": null,
"hireable": null,
"bio": "Building useful open-source software.",
"twitterUsername": "example",
"siteAdmin": false,
"publicRepoCount": 42,
"publicGistCount": 0,
"followerCount": 12500,
"followingCount": 0,
"createdAt": "2011-01-25T18:44:36Z",
"updatedAt": "2026-10-20T08:00:00Z",
"crawledAt": "2026-10-29T09:00:00Z"
}

How profile results are classified

The Actor validates each target and records a profile only when GitHub returns a matching public account:

  • ok means the public profile was collected successfully.
  • not_found means GitHub did not expose a matching public user or organization during the run. It does not prove that the username is available to register.
  • invalid_input means the submitted value was not a supported username or profile URL. These rows are stored only when skipInvalidInputs is false.
  • Temporary access, network, and response errors are retried and are never recorded as not_found.
  • If optional organization information is unavailable, the Actor keeps the valid base profile and returns null for the unavailable fields.

How much does it cost to scrape GitHub profiles?

Check the Actor's Pricing tab for current rates and review the run's charge limit before starting. On pay-per-event runs, each stored Dataset row is a result, including not_found and any invalid_input rows not omitted with skipInvalidInputs.

If the result or charge budget is reached, the Actor stops with partial results and a status message. Increase the applicable budget and resurrect the same run with the same normalized target set to continue its unfinished queue. When skipInvalidInputs is false, keep the same invalid input strings as well. Reordering the same targets or changing run memory does not change their saved identities.

Limitations

  • The Actor returns public profile metadata only.
  • It does not collect private emails, private organization settings, private repositories, repository content, commits, contribution graphs, members, follower lists, stars, or events.
  • Public fields can be null when a profile does not publish them or GitHub does not make them publicly available.
  • Counts and timestamps reflect GitHub's response at collection time and can change independently between requests.
  • GitHub Enterprise Server and custom GitHub hosts are not supported.

More Actors by AimScrape

Explore other public-data tools from AimScrape:

ActorBest for
Snapchat Profile ScraperCollecting public Snapchat profile metadata, subscriber counts, verification, and Snapcodes.
Fast TikTok Profile Scraper 🚀Collecting public TikTok profile details, audience counts, likes, and verification.
Fast YouTube Channel ScraperCollecting public YouTube channel metadata, counts, verification, and external links.
Fast YouTube Channel Video Scraper 🚀Exporting public video metadata from a YouTube channel's Videos tab.
YouTube Advanced Search ScraperFinding YouTube videos by keyword with channel and engagement metadata.

Responsible use and support

Use collected public data lawfully and for a legitimate purpose. Profile fields can contain personal data supplied by GitHub users; review the laws and policies that apply to your use case. This Actor is an independent third-party tool and is not affiliated with or endorsed by GitHub.

For run-specific troubleshooting, include the run ID and non-sensitive log details when contacting the Actor's support channel. Never include proxy credentials or access tokens in support messages.