GitHub Email Scraper & Tech Stack Extractor (Patch & MX) avatar

GitHub Email Scraper & Tech Stack Extractor (Patch & MX)

Pricing

$4.50 / 1,000 results

Go to Apify Store
GitHub Email Scraper & Tech Stack Extractor (Patch & MX)

GitHub Email Scraper & Tech Stack Extractor (Patch & MX)

GitHub Email Scraper & Lead Generation Actor. Extract verified developer emails (.patch commits, DCO Sign-off, Events API) & tech stacks from repo contributors, stargazers, or usernames. Built-in DNS MX deliverability check (<2% bounce). 100% HTTP, 256MB RAM.

Pricing

$4.50 / 1,000 results

Rating

0.0

(0)

Developer

Xavier Richard

Xavier Richard

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

GitHub Developer Email & Tech Stack Extractor (Commit Patch & MX Verified)

GitHub Email Scraper & Developer Lead Generation Actor — Extract verified developer emails, full profiles, and inferred tech stacks from GitHub repository contributors, GitHub stargazers, or direct username lists.

Unlike basic GitHub profile scrapers that fail when a developer hides their public profile email, this Actor inspects public Git commit headers (.patch), DCO sign-off trailers (Signed-off-by:), GitHub Events API (PushEvent), and Profile README.md repositories, then validates every extracted email through a native DNS MX deliverability engine (node:dns/promises) to guarantee a < 2% bounce rate.


Why Use This GitHub Email Extractor? (Value Proposition)

  • Bypasses Hidden Profile Emails Legitimately: Over 80% of developers hide their email on their main GitHub profile page, yet expose their real corporate or personal email inside Git commit metadata (.patch headers and Signed-off-by trailers).
  • Competitor Stargazer & Contributor Poaching (stargazers & contributors): Target any open-source repository (e.g., langchain-ai/langchain, rust-lang/rust, vercel/next.js) to extract developers actively using or contributing to a specific technology or competitor DevTool.
  • Built-In DNS MX Verification (< 2% Bounce Rate): Every extracted email is checked against live DNS MX records (resolveMx), rejecting dead domains, RFC 7505 Null MX records, 250+ disposable email providers (tempmail, guerrillamail, mailinator, yopmail), and GitHub privacy masks (@users.noreply.github.com).
  • MX Provider Fingerprinting: Automatically identifies whether the developer uses Google Workspace, Microsoft 365, Proton Mail, OVHcloud, Zoho Mail, Fastmail, Cloudflare Email Routing, or a custom corporate mail server.
  • Anti-False-Positive PR Merge Filter: Intelligently cross-references commit author metadata against the target developer's identity so a maintainer merging an external contributor's Pull Request is never assigned the wrong email.
  • Ultra-Low Compute Cost (100% HTTP, 256 MB RAM): Powered by got-scraping without headless browsers (no Playwright/Puppeteer). Costs less than $0.001 per 100 profiles in Apify platform compute.

Top Use Cases (Tech Recruiting, DevTools GTM & OSINT)

  1. Technical Recruiting & Executive Sourcing: Find senior Rust, AI/LLM, Go, TypeScript, or Kubernetes engineers contributing to top open-source projects, filtered by location (locationFilter: "France", "Germany", "United States", "Remote").
  2. DevTools & B2B SaaS Growth (Stargazer Lead Gen): Extract developers who recently starred your repository or a competitor's repository (targetMode: "stargazers") and enrich them with verified work emails and company names.
  3. AI Agent & Clay / n8n / Make Workflows: Connect directly as an MCP tool, Clay enrichment column, or n8n HTTP/Apify node to turn a list of GitHub URLs (targetMode: "direct_users") into MX-verified emails and tech stacks.

4-Stage Extraction & Qualification Pipeline

  1. Stage 1 — Target Profile Collection:
    • Contributors Mode (contributors): GET https://api.github.com/repos/{owner}/{repo}/contributors
    • Stargazers Mode (stargazers): GET https://api.github.com/repos/{owner}/{repo}/stargazers (with Accept: application/vnd.github.v3.star+json to capture starred_at timestamps)
    • Direct Users Mode (direct_users): Accepts raw GitHub usernames (torvalds) or profile URLs (https://github.com/torvalds). Automatically excludes [bot] accounts (dependabot, renovate, github-actions).
  2. Stage 2 — Multi-Vector Commit & Patch Email Extraction:
    • Step 2A (GitHub Public Events API): Scans GET https://api.github.com/users/{username}/events/public for PushEvent payloads (payload.commits[*].author.email).
    • Step 2B (Commit .patch & DCO Fallback): Fetches raw Git commit patches (GET https://github.com/{owner}/{repo}/commit/{sha}.patch) on the source repository and the developer's most recently pushed repositories. Extracts emails via /^From: .* <(.*@.*)>$/m as well as Signed-off-by: and Co-authored-by: trailers.
    • Step 2C (Zero-API-Quota Profile README Fallback): If all commits use noreply, inspects https://raw.githubusercontent.com/{username}/{username}/HEAD/README.md (costs 0 GitHub REST API quota).
  3. Stage 3 — Strict Filtering & Lead Prioritization:
    • Strips *@users.noreply.github.com, *@noreply.github.com, placeholder emails (test@test.com, user@localhost, example@domain.com), local hostnames, and 250+ disposable domains.
    • Prioritizes custom corporate domains (john.doe@company.com) over consumer webmail (gmail.com) and flags shared role accounts (info@, security@, support@) as "risky".
  4. Stage 4 — Native DNS MX Deliverability Verification:
    • Executes dns.resolveMx(domain) with in-memory domain caching, timeout protection, and mxProvider deduction.

Input Parameters (input_schema.json)

ParameterTypeDefaultDescription
targetsstring[]["langchain-ai/langchain", "rust-lang/rust"]List of GitHub repositories (owner/repo or full GitHub URLs) or developer usernames/profile URLs.
targetModestring"contributors""contributors", "stargazers", or "direct_users".
maxUsersPerTargetinteger50Maximum number of developers to analyze per target repository (1 – 1000).
githubTokensstring[][]Optional pool of GitHub Personal Access Tokens (ghp_... / github_pat_...) to scale from 60 req/h to 5,000 req/h per token with automatic rotation and ETag (304 Not Modified) caching.
onlyWithEmailbooleantrueOnly output profiles in the Dataset when a real, non-noreply, MX-verified email address is found.
locationFilterstring""Optional geographic filter (e.g. "France", "Germany", "London", "Remote"). Includes smart country-to-city matching ("France" matches "Paris", "Lyon", "Nantes", etc.).
maxConcurrencyinteger5Number of developer profiles processed in parallel (1 – 20).

Input Example

{
"targets": ["langchain-ai/langchain", "rust-lang/rust"],
"targetMode": "contributors",
"maxUsersPerTarget": 50,
"githubTokens": [],
"onlyWithEmail": true,
"locationFilter": "France",
"maxConcurrency": 5
}

Output Dataset Example

Each item in the Apify Dataset is normalized with the following JSON schema:

{
"username": "johndoe",
"fullName": "John Doe",
"email": "john.doe@company.com",
"deliverability": "valid",
"mxProvider": "Google Workspace",
"company": "Acme Corp",
"location": "Paris, France",
"bio": "Building scalable Rust backends and AI agents.",
"blog": "https://johndoe.dev",
"twitter": "johndoe_dev",
"publicReposCount": 42,
"followersCount": 180,
"techStack": ["Rust", "Python", "LangChain", "AI / LLM"],
"sourceRepo": "rust-lang/rust",
"sourceRole": "contributor",
"commitProofUrl": "https://github.com/rust-lang/rust/commit/a1b2c3d4e5.patch",
"scrapedAt": "2026-10-20T01:00:00.000Z"
}

In addition, the Actor writes a comprehensive RUN_SUMMARY record into the default Key-Value Store containing extraction telemetry, MX provider distribution, tech stack frequency, and rate-limit statistics.


Frequently Asked Questions (FAQ)

Do I need a GitHub Personal Access Token (githubTokens)?

For small runs (up to ~15–20 developers), the Actor works without any token using unauthenticated GitHub requests (60 REST API req/h + unlimited .patch requests). For larger runs (50 to 1,000 developers per target), adding one free GitHub PAT (ghp_... with no special permissions required) unlocks 5,000 requests/hour per token.

How does .patch email extraction work?

Every public commit on GitHub can be viewed in raw Git patch format by appending .patch to the commit URL (https://github.com/{owner}/{repo}/commit/{sha}.patch). This header contains the author's From: Name <email@domain.com> and optional Signed-off-by: lines configured in their local .gitconfig.

Can I use this Actor with Clay, n8n, Make, or MCP AI Agents?

Yes. Set targetMode: "direct_users" and pass a list of GitHub usernames or profile URLs in targets to enrich existing candidate or prospect tables in Clay, n8n, or Make, or pass competitor repositories with targetMode: "stargazers" to automate weekly GTM lead generation.