GitHub User & Org Scraper avatar

GitHub User & Org Scraper

Pricing

Pay per event

Go to Apify Store
GitHub User & Org Scraper

GitHub User & Org Scraper

Fetch GitHub user or organisation metadata — name, bio, company, location, blog, public repo count, follower count, and (optionally) the user's pinned/public repositories. Free GitHub REST API, optional token for higher rate limits.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share


🎯 What this scrapes

GitHub exposes every user and org profile via its REST API. This Actor takes a list of usernames or org slugs, fans them out in parallel, and writes one row per profile with hireable status, bio, public repo count, followers/following, account creation date, and (optionally) the full list of their public repos.

🔥 What we handle for you

  • 🛡️ Browser fingerprint rotationcurl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python.
  • 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts per page, Retry-After honoured.
  • 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

💡 Use cases

  • B2B lead gen — pull GitHub orgs in a given location, filter by public_repos > N, enrich with company website.
  • Recruiting — find devs whose bio mentions a target framework and whose hireable flag is true.
  • Influencer mapping — rank developers by follower count within a topic via combination with the repo Actor.
  • ATS enrichment — pipe candidate GitHub URLs through this Actor to enrich your applicant tracker.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
usernamesarrayyes['torvalds', 'apify']GitHub usernames or organisation slugs, one per line. Profile URLs are also accepted — we strip the host.
githubTokenstringno'—'Personal access token. Without one you get 60 requests/hour; with one, 5 000/hour.
includeReposbooleannoFalseAdds a repos array (up to 100 most-recently-updated public repos with name + stars). One extra API call per user.
maxReposPerUserintegerno30Cap on repos returned per user when includeRepos=true. Hard ceiling 100.
concurrencyintegerno6Parallel API requests.
proxyConfigurationobjectno{'useApifyProxy': False}Apify Proxy optional — GitHub's REST API does not IP-block at reasonable volumes.

Example input

{
"usernames": [
"apify"
],
"includeRepos": false,
"concurrency": 4,
"proxyConfiguration": {
"useApifyProxy": false
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
loginstringGitHub username or org slug.
typestringUser or Organization.
name['string', 'null']Display name.
company['string', 'null']Self-declared company.
blog['string', 'null']Profile blog/homepage URL.
location['string', 'null']Self-declared location.
email['string', 'null']Public email — null when the user keeps it private.
bio['string', 'null']Profile bio.
twitter_username['string', 'null']Linked X (Twitter) handle.
public_reposintegerPublic repository count.
public_gistsintegerPublic gist count.
followersintegerFollower count.
followingintegerFollowing count.
html_urlstringProfile URL.
avatar_urlstringAvatar image URL.
hireable['boolean', 'null']Self-declared hireable flag.
created_atstringAccount creation timestamp.
updated_atstringLast profile update timestamp.
repos['array', 'null']Public repos summary (when includeRepos=true).
scraped_atstringWhen this row was recorded.

Example output

{
"login": "apify",
"type": "Organization",
"name": "Apify",
"blog": "https://apify.com",
"location": "Prague, Czechia",
"public_repos": 412,
"followers": 856,
"html_url": "https://github.com/apify"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.005One-off warm-up charge per run
result$0.003Per dataset item

Example: 1 000 results at the rates above ≈ $3.00. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

We hit only the /users/{login} endpoint. Contribution graphs, sponsor lists, and starred repos are not in scope. Private-org membership requires authentication and is also out of scope.

❓ FAQ

Why is email empty?

GitHub hides email by default. We surface whatever the public API returns; we don't probe commit metadata or noreply addresses.

Are organisations supported?

Yes — the API returns Organization type for orgs and User for personal accounts. Same dataset shape.

Does this respect GDPR?

We only fetch fields GitHub publishes publicly. Don't ingest output into outreach systems without your own legal sign-off.

Can I get a user's contribution graph?

Not via this Actor — GitHub's public REST API doesn't expose it. Use a graph-specific Actor.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.