GitHub Profile Scraper (Cheap)
Pricing
from $3.99 / 1,000 results
GitHub Profile Scraper (Cheap)
GitHub Profile Scraper that pulls followers, repos, bio, location, and contact info from any public GitHub account, so recruiters and researchers can build prospect lists without clicking through profiles one by one.
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
Data API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
GitHub Profile Scraper

Every developer on GitHub has a public profile, but reading them one by one in a browser does not scale. When you are sourcing engineers, mapping an open-source community, or building a contributor database, you want that data as rows, not browser tabs. Give this scraper a GitHub handle (or a whole list of them) and it returns each profile as one clean record: display name, bio, location, company, follower and following counts, public repo and gist totals, the combined stars and forks across every public repo, linked social accounts, and the public email when the user chose to show one. Run a single handle or thousands in one go.
What you get
Each handle becomes exactly one record with a consistent shape. Fields the user left blank come back as null rather than disappearing, so your columns stay predictable when you load the data into a sheet or database. The fields fall into a few natural groups:
- Identity —
handle,displayName,profileBio,basedIn,affiliation,avatarLink,profileLink - Reach —
followerCount,followingCount,repoCount,gistCount,starCount,forkCount - Contact and links —
contactEmail,siteUrl,twitterHandle,linkedAccounts - Account meta —
openToWork,accountKind,joinedAt,lastActiveAt,collectedAt,errorMessage
starCount and forkCount are summed across all of the user's public repositories, so you get a single reputation signal without paging through repo lists yourself.
Quick start
- Click Try for free and open the input form.
- Type one handle into GitHub handle, or paste a list into GitHub handles (batch) for a bulk run.
- Set a Results limit if you want to cap the run, and adjust Timeout (seconds) for slower connections.
- Press Start, then export your results as JSON, CSV, Excel, or XML when the run finishes.

Use cases
- Technical recruiting — turn a shortlist of GitHub handles into a sourcing sheet with location, company, follower count, and contact links
- Developer relations — measure reach and activity across the contributors in your ecosystem
- Open-source research — profile the maintainers behind a set of repositories and track how their following grows
- Community building — enrich a list of members with bios, websites, and linked social accounts
- Sales and lead research — qualify developer accounts by company, location, and public footprint
- Talent market analysis — aggregate stars, forks, and repo counts to gauge skill density in a region or stack
Input
| Field | Type | Required | Description |
|---|---|---|---|
profileHandle | string | One of profileHandle or profileHandles | A single GitHub username to look up. A leading @ is removed automatically. Example sindresorhus. |
profileHandles | array of strings | One of profileHandle or profileHandles | Several handles for a batch run, one per line. Duplicates are skipped. |
resultsLimit | integer | No | How many profiles to process per run, capped at 1000. Default 50. |
timeoutSeconds | integer | No | Seconds to wait on each request before giving up. Default 45; raise it on slow connections. |
Example input
{"profileHandle": "sindresorhus","profileHandles": ["sindresorhus", "yyx990803"],"resultsLimit": 50,"timeoutSeconds": 45}
Output
Every handle produces one record, and every field is always present — values the profile does not expose come back as null so your dataset stays rectangular.
Example output
{"handle": "sindresorhus","displayName": "Sindre Sorhus","profileBio": "Full-Time Open-Sourcerer","basedIn": "Thailand","affiliation": "@sindresorhus","siteUrl": "https://sindresorhus.com","twitterHandle": "sindresorhus","linkedAccounts": [{"provider": "mastodon", "url": "https://mastodon.social/@sindresorhus"}],"contactEmail": null,"followerCount": 71240,"followingCount": 12,"repoCount": 1180,"gistCount": 42,"starCount": 528430,"forkCount": 21870,"openToWork": null,"accountKind": "User","avatarLink": "https://avatars.githubusercontent.com/u/170270?v=4","profileLink": "https://github.com/sindresorhus","joinedAt": "2009-12-20T01:54:50Z","lastActiveAt": "2026-06-28T09:14:33Z","collectedAt": "2026-06-29T12:00:00.000000+00:00","errorMessage": null}
Output fields
| Field | Type | Description |
|---|---|---|
handle | string | The GitHub username that was looked up |
displayName | string | The name shown on the profile |
profileBio | string | The user's bio text |
basedIn | string | Self-reported location |
affiliation | string | Company or organization listed on the profile |
siteUrl | string | Personal or project website linked from the profile |
twitterHandle | string | Linked Twitter / X username |
linkedAccounts | array | Social accounts the user connected, each with a provider and URL |
contactEmail | string | Public email, when the user chose to show one |
followerCount | integer | Number of followers |
followingCount | integer | Number of accounts the user follows |
repoCount | integer | Count of public repositories |
gistCount | integer | Count of public gists |
starCount | integer | Stars summed across all public repositories |
forkCount | integer | Forks summed across all public repositories |
openToWork | boolean | Whether the user flagged themselves as hireable |
accountKind | string | Account type, such as User or Organization |
avatarLink | string | URL of the profile avatar image |
profileLink | string | Link to the GitHub profile page |
joinedAt | string | ISO 8601 date the account was created |
lastActiveAt | string | ISO 8601 date the profile was last updated |
collectedAt | string | ISO 8601 timestamp of when the record was captured |
errorMessage | string | Reason a handle failed; null on success |
Tips for best results
- Test with a few handles first. Run three or four before a large batch so you can confirm the output fits your pipeline.
- Use the batch field for volume. Drop your full list into
profileHandlesand setresultsLimitto match — the run dedupes handles for you. - Star and fork totals scan up to 1000 repos. For accounts with more public repositories, the totals reflect the most recently updated 1000.
- Raise
timeoutSecondson slow links. If you see timeout errors, lift it toward90and retry. - Failed handles are not lost. A handle that cannot be resolved still returns a row with
errorMessagefilled in, so nothing silently drops out of your dataset.
How can I use GitHub profile data?
How can I use the GitHub Profile Scraper to source developer talent?
Paste a list of handles into profileHandles and the scraper returns each developer's display name, location, company, follower count, and contact links as one row. Sort by followerCount or starCount to prioritize, and use siteUrl and linkedAccounts for outreach — a ready-made sourcing sheet built from a list of usernames.
How can I look up a GitHub user's followers, repos, and bio in bulk?
Feed one handle or thousands. For each, you get followerCount, followingCount, repoCount, gistCount, and the aggregate starCount and forkCount across all public repos, plus the bio and location. Everything that normally means paging through the GitHub UI by hand comes back as a single flat record per user.
How can I export GitHub profile data to CSV or Excel for research? Run the scraper on your handles and download the dataset as JSON, CSV, Excel, or XML straight from the run. Because every field is always present, the file opens as a clean rectangular table you can pivot, filter, or join against other developer data without cleanup.
Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
Support
Questions, feature requests, or a field you'd like added? Reach out at data.apify@proton.me and we'll get back to you.