GitHub Profile Scraper avatar

GitHub Profile Scraper

Pricing

from $0.04 / 1,000 result extracteds

Go to Apify Store
GitHub Profile Scraper

GitHub Profile Scraper

Extract public GitHub developer profiles from usernames, profile URLs, or user-search queries. Export names, bios, companies, locations, contact links, followers, and optional repository metrics for recruiting, DevRel, sales, and market research.

Pricing

from $0.04 / 1,000 result extracteds

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Share

Extract public GitHub developer profiles from usernames, profile URLs, and GitHub user-search queries.

Use this actor to turn GitHub handles into structured recruiting, developer-relations, sales, VC, and open-source intelligence data.

What does GitHub Profile Scraper do?

GitHub Profile Scraper collects public profile information from GitHub user pages and public GitHub API resources.

It accepts direct usernames, profile URLs, or GitHub user-search queries.

It returns one structured dataset row per GitHub profile.

You can use it to enrich a spreadsheet of handles, build a prospect list, or monitor developer communities.

The actor is designed for public data only.

It does not require a GitHub login for small runs.

You can optionally provide a GitHub token when you need higher GitHub API rate limits.

Who is it for?

Recruiters use it to enrich candidate lists with public GitHub profile signals.

Developer relations teams use it to identify active developers in a language, city, or ecosystem.

Sales and lead-generation teams use it to find technical contacts and public portfolio links.

VC and startup research teams use it to map builders, founders, and maintainers.

Open-source program offices use it to understand contributors and community members.

Security and compliance teams use it to review public account metadata for approved investigations.

Why use this actor?

  • πŸ‘€ Scrape direct GitHub usernames or full profile URLs.
  • πŸ”Ž Use GitHub user-search syntax such as location:Berlin language:Python followers:>50.
  • πŸ“§ Capture public email, website, and Twitter/X fields when users publish them.
  • πŸ“Š Get followers, following, public repositories, gists, account age, and developer tier signals.
  • ⭐ Optionally scan public repositories for total stars, forks, languages, and most-starred repository.
  • βœ… Receive not-found rows for missing usernames so your input list stays auditable.
  • πŸ’Έ Pay per saved profile result, not a large flat fee.

Input settings

SettingJSON keyType / defaultDescription
GitHub usernames or profile URLsusernamesarray, default ["torvalds","gaearon"]Enter GitHub handles such as torvalds or public profile URLs such as https://github.com/gaearon.
GitHub user search queriessearchQueriesarray, default ["location:Berlin language:Python followers:>50"]Optional GitHub user-search queries, for example location:Berlin language:Python followers:>50. Results are deduplicated with direct usernames.
Maximum profiles per search querymaxResultsPerQueryinteger, default 5How many user-search results to hydrate per query. Keep low for quick test runs.
Include repository summaryincludeRepositoriesboolean, default falseWhen enabled, scans each user's public repositories to calculate total stars, total forks, top languages, and most-starred repository.
Maximum repositories per usermaxRepositoriesPerUserinteger, default 20Repository scan cap used only when repository enrichment is enabled.

Output fields

JSON keyLabelTypeDescription
loginLoginstringOutput field for login.
nameNamestring / nullOutput field for name.
bioBiostring / nullOutput field for bio.
companyCompanystring / nullOutput field for company.
blogBlogstring / nullOutput field for blog.
locationLocationstring / nullOutput field for location.
emailEmailstring / nullOutput field for email.
twitterUsernameTwitterUsernamestring / nullOutput field for twitterusername.
hireableHireableboolean / nullOutput field for hireable.
typeTypestring / nullOutput field for type.
avatarUrlAvatarUrlstring / nullOutput field for avatarurl.
profileUrlProfileUrlstringOutput field for profileurl.
apiUrlApiUrlstring / nullOutput field for apiurl.
publicReposPublicReposinteger / nullOutput field for publicrepos.
publicGistsPublicGistsinteger / nullOutput field for publicgists.
followersFollowersinteger / nullOutput field for followers.
followingFollowinginteger / nullOutput field for following.
createdAtCreatedAtstring / nullOutput field for createdat.
updatedAtUpdatedAtstring / nullOutput field for updatedat.
accountAgeYearsAccountAgeYearsnumber / nullOutput field for accountageyears.
accountAgeTierAccountAgeTierstring / nullOutput field for accountagetier.
developerTierDeveloperTierstring / nullOutput field for developertier.
bestContactBestContactstring / nullOutput field for bestcontact.
totalStarsTotalStarsinteger / nullOutput field for totalstars.
totalForksTotalForksinteger / nullOutput field for totalforks.
topLanguagesTopLanguagesarrayOutput field for toplanguages.
mostStarredRepoNameMostStarredRepoNamestring / nullOutput field for moststarredreponame.
mostStarredRepoUrlMostStarredRepoUrlstring / nullOutput field for moststarredrepourl.
mostStarredRepoStarsMostStarredRepoStarsinteger / nullOutput field for moststarredrepostars.
repositoriesScannedRepositoriesScannedinteger / nullOutput field for repositoriesscanned.
sourceTypeSourceTypestringOutput field for sourcetype.
sourceQuerySourceQuerystringOutput field for sourcequery.
statusStatusstringOutput field for status.
errorErrorstring / nullOutput field for error.
scrapedAtScrapedAtstringOutput field for scrapedat.

Pricing

This Actor uses Apify pay-per-event pricing. The prices below come from the current Actor pricing configuration. Apify public plans map to Store discount tiers, so the table shows both the user-facing plan context and the pricing tier name. The final price shown in Apify depends on the user account plan and any custom agreement.

EventWhat is chargedPrice
startOne-time fee charged when a run starts. Covers fixed startup cost (init, proxy warmup, first HTTP setup).$0.005
EventWhat is chargedFree / no discountStarter / BronzeScale / SilverBusiness / GoldCustom / PlatinumCustom / Diamond
resultCharged per result extracted.$0.07297 / 1,000$0.06345 / 1,000$0.04949 / 1,000$0.03807 / 1,000$0.02538 / 1,000$0.01777 / 1,000

Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.

Input options

GitHub usernames or profile URLs

Use usernames for exact handles or profile URLs.

Examples:

["torvalds", "gaearon", "https://github.com/sindresorhus"]

The actor normalizes URLs into GitHub logins.

Invalid usernames are skipped with a warning.

GitHub user-search queries

Use searchQueries for public GitHub user search.

Examples:

["location:Berlin language:Python followers:>50"]

You can use GitHub search qualifiers such as location, language, followers, repos, and creation date.

Search results are deduplicated against direct username inputs.

Maximum profiles per search query

Use maxResultsPerQuery to control the number of search hits hydrated per query.

Start with 5 to 20 for testing.

Increase it when you are confident the query returns the type of profiles you need.

Repository enrichment

Enable includeRepositories when you need star, fork, language, and most-starred repository signals.

Set maxRepositoriesPerUser to control how many public repositories are scanned per profile.

Repository enrichment is useful for ranking developer influence.

It is not required for basic contact enrichment.

Optional GitHub token

Use githubToken only if you need higher rate limits.

The token is treated as a secret input.

Small public-data runs can work without a token.

Ready-to-run examples

View all ready-to-run examples

Example input

{
"usernames": ["torvalds", "gaearon"],
"searchQueries": ["location:Berlin language:Python followers:>50"],
"maxResultsPerQuery": 5,
"includeRepositories": false,
"maxRepositoriesPerUser": 30
}

Example output

{
"login": "torvalds",
"name": "Linus Torvalds",
"bio": null,
"company": "Linux Foundation",
"location": "Portland, OR",
"email": null,
"blog": null,
"twitterUsername": null,
"followers": 200000,
"following": 0,
"publicRepos": 8,
"accountAgeYears": 14.1,
"accountAgeTier": "veteran",
"developerTier": "mega",
"bestContact": "https://github.com/torvalds",
"profileUrl": "https://github.com/torvalds",
"sourceType": "username",
"sourceQuery": "torvalds",
"status": "ok",
"error": null,
"scrapedAt": "2026-07-03T00:00:00.000Z"
}

How to run it

  1. Open the actor on Apify.
  2. Add GitHub usernames, profile URLs, or search queries.
  3. Keep the first run small.
  4. Decide whether you need repository enrichment.
  5. Click Start.
  6. Export the dataset as JSON, CSV, Excel, or via API.

API usage

Run GitHub Profile Scraper from your own code with the Apify API.

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const input = {
"usernames": [
"torvalds",
"gaearon"
],
"searchQueries": [
"location:Berlin language:Python followers:>50"
],
"maxResultsPerQuery": 5,
"includeRepositories": false,
"maxRepositoriesPerUser": 20
};
const run = await client.actor('fetch_cat/github-profile-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("fetch_cat/github-profile-scraper").call(run_input={
"usernames": [
"torvalds",
"gaearon"
],
"searchQueries": [
"location:Berlin language:Python followers:>50"
],
"maxResultsPerQuery": 5,
"includeRepositories": false,
"maxRepositoriesPerUser": 20
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

cURL

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~github-profile-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"usernames":["torvalds","gaearon"],"searchQueries":["location:Berlin language:Python followers:>50"],"maxResultsPerQuery":5,"includeRepositories":false,"maxRepositoriesPerUser":20}'

Common workflows

Recruiting shortlist enrichment

Upload a list of GitHub handles from applications or referrals.

Export public profile, contact, and repository signals.

Sort by location, followers, languages, and developer tier.

Developer-relations prospecting

Search for developers by language and location.

Use repository enrichment to prioritize builders with public project traction.

Create outreach segments by ecosystem.

OSS community mapping

Enrich maintainers, stargazers, or contributor handles collected elsewhere.

Use account age and public metrics to understand community composition.

Sales and lead generation

Find technical buyers, founders, and engineers who publish public contact links.

Use bestContact to route email, website, or Twitter/X outreach workflows.

Integrations

Export CSV for spreadsheets and enrichment tools.

Send dataset items to a CRM with Apify integrations.

Use webhooks to trigger follow-up jobs when a run finishes.

Connect results to Clay, Airtable, Google Sheets, or a data warehouse.

Use Apify API clients from Node.js, Python, or cURL.

Use with AI agents via MCP

GitHub Profile Scraper can be used by AI assistants through the hosted Apify MCP server.

Claude Code setup

$claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/github-profile-scraper"

Claude Desktop, Cursor, or VS Code JSON config

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=fetch_cat/github-profile-scraper"
}
}
}

Example prompts

  • "Run GitHub Profile Scraper with this input JSON and summarize the dataset."
  • "Export the latest GitHub Profile Scraper results to a table I can review."
  • "Schedule this Actor for monitoring and tell me what changed between runs."

Limits and caveats

GitHub controls public API rate limits.

Very large unauthenticated runs may hit rate limits.

A GitHub token can improve rate capacity.

Some users do not publish email, website, company, or location fields.

Repository enrichment scans public repositories and can take longer on accounts with many repos.

The actor does not bypass private profiles, deleted users, or authentication-only data.

FAQ

Does this actor need a GitHub account?

No. Small public-data runs work without a GitHub account or token.

For higher-volume runs, add an optional GitHub token to increase public API rate limits.

Does it return private emails?

No. It returns only public email and contact fields exposed by GitHub users.

Can I search by programming language and city?

Yes. Use GitHub user-search syntax such as location:Berlin language:Python followers:>50.

Troubleshooting

Why did I get no email for a profile?

GitHub users often hide their email address.

The actor returns email only when it is public on the GitHub profile/API.

Check bestContact for a website, Twitter/X URL, or profile URL fallback.

Why did a search query return fewer users than expected?

GitHub search ranking and rate limits can affect public search results.

Make your query more specific, reduce the requested result count, or provide a GitHub token.

Why is repository enrichment slower?

Repository enrichment fetches public repositories for each profile.

Disable it when you only need contact and account-level profile fields.

Legality and responsible use

This actor extracts publicly available GitHub profile data.

Use the data in accordance with GitHub's terms, Apify's terms, and applicable privacy laws.

Do not use scraped contact information for spam.

Honor opt-out requests and maintain suppression lists for outreach.

Avoid collecting more data than your use case requires.

Dataset quality notes

The actor writes error rows for failed or missing profiles.

This keeps your exports aligned with your input list.

Successful rows have status set to ok.

Not-found rows have status set to not_found and are not charged as profile results.

Privacy notes

Only public profile fields are returned.

Secret inputs such as githubToken are not written to the dataset.

The actor does not attempt to infer private emails.

Version notes

Version 0.1 focuses on profile enrichment from usernames, profile URLs, and GitHub user-search queries.

Future versions may add additional public GitHub lead sources if they remain reliable and useful.

Support

Report bugs, wrong output, blocked runs, or missing fields from the Actor page. Include the Apify run ID or run URL, your input JSON, what you expected, what the Actor returned, and one reproducible public URL so the issue can be tested quickly.