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.

Data fields

FieldTypeDescription
loginstringValue exported as login.
namestring | nullValue exported as name.
biostring | nullValue exported as bio.
companystring | nullValue exported as company.
blogstring | nullValue exported as blog.
locationstring | nullValue exported as location.
emailstring | nullValue exported as email.
twitterUsernamestring | nullValue exported as twitterUsername.

Input preview

usernamesGitHub usernames or profile URLs
searchQueriesGitHub user search queries
maxResultsPerQueryMaximum profiles per search query
includeRepositoriesInclude repository summary
maxRepositoriesPerUserMaximum repositories per user
githubTokenGitHub token (optional)

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

Ready-to-run examples

Open a saved Apify example, adjust the input, and run the actor in your own Apify account.

View all examples

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

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

Setting JSON key Type / default Description
GitHub usernames or profile URLs usernames array, default ["torvalds","gaearon"] Enter GitHub handles such as torvalds or public profile URLs such as https://github.com/gaearon.
GitHub user search queries searchQueries array, 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 query maxResultsPerQuery integer, default 5 How many user-search results to hydrate per query. Keep low for quick test runs.
Include repository summary includeRepositories boolean, default false When enabled, scans each user's public repositories to calculate total stars, total forks, top languages, and most-starred repository.
Maximum repositories per user maxRepositoriesPerUser integer, default 20 Repository scan cap used only when repository enrichment is enabled.

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.

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.

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.

Common questions

Questions and answers reused from the canonical actor README.

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.