GitHub Contributors Email Scraper avatar

GitHub Contributors Email Scraper

Pricing

$0.01 / 1,000 contributors

Go to Apify Store
GitHub Contributors Email Scraper

GitHub Contributors Email Scraper

Find contributors in public GitHub repositories or a public organization. Get contribution counts and ranks, public account details including emails when GitHub exposes them, repository context, and optional profile or commit evidence in an Apify dataset.

Pricing

$0.01 / 1,000 contributors

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

👥 See who contributes to public GitHub repositories

Open-source maintainers, engineering teams, and developer relations teams can use this Actor to find contributors in public GitHub repositories or a public GitHub organization. Each row connects a contributor to a repository and includes contribution count and rank, public account details, source links, and repository facts. Optional profile enrichment and public commit evidence add more context for research and review.

Use cases

📊 Ranked GitHub contributor rows

Dataset rows

Each dataset row joins one contributor to the public repository where the contributor was found. It includes contribution count and rank, account type, profile and avatar links, public emails when GitHub reports them, and repository facts such as stars, forks, language, open issues, default branch, and archive state. Profile enrichment and commit evidence add the optional fields described below. Missing public values stay null or empty as the schema shows.

🔍 Build contributor lists from public GitHub sources

How it works

  1. Choose public repository URLs or one public GitHub organization. Use one source type per run.
  2. Add contribution and account filters when needed.
  3. Turn on profile enrichment or commit evidence when you need the related public fields.
  4. Run the Actor and open the dataset output.

The Actor saves the first eligible occurrence for a submitted repository and ignores later duplicate submissions of the same repository. It does not merge later matches into the saved row. Different repositories can still produce separate rows for the same login because each row keeps its source repository.

⚙️ Input

Choose Public repositories to add repository URLs, or choose A GitHub organization to enter one organization name or URL. Only the selected source is used. The Actor reads public repositories only. Profile filters work when profile enrichment is on. Commit filters and the noreply choice work when commit evidence is on.

Input fields

FieldTypeWhat it does
discoveryMethodSelectChooses public repository URLs or one public GitHub organization.
repositoriesURL listAdds public GitHub repository URLs when Public repositories is selected.
repositories[].urlURLA public GitHub repository URL.
organizationStringAdds one public GitHub organization name or URL when the organization option is selected.
minimumContributionsIntegerKeeps contributors with at least this many contributions in each source repository. Leave empty to include all contributors.
botAccountFilterSelectKeeps all accounts, excludes bot accounts, or keeps bot accounts only.
maxItemsIntegerStops after this many contributor records. Leave empty to return all available results until the source is exhausted. A limit can make the run incomplete.
includeProfileEnrichmentBooleanRequests public profile fields such as name, bio, company, location, website, follower counts, public repository and gist counts, hireability, account dates, organizations, and linked social accounts.
profileEmailAvailabilitySelectKeeps profiles with no public email when selected. Any skips this filter.
profileHireabilitySelectKeeps profiles by their public hireability value. Any skips this filter.
profileLocationsString listAdds public location terms for profile filtering. Leave empty to skip this filter.
profileLocations[]StringOne public location term.
profileLanguagesString listAdds public language names for profile filtering. Leave empty to skip this filter.
profileLanguages[]StringOne public language name.
minimumFollowersIntegerKeeps enriched profiles with at least this many followers. Leave empty to skip this filter.
includeCommitEvidenceBooleanRequests public commit-author email evidence with commit links, identifiers, author data, timestamps, message context, linked accounts, and provenance.
commitBranchStringUses this branch for commit evidence in every selected repository. Leave empty to use each repository's default branch.
commitStartDateUTC date stringIncludes commit evidence on or after this UTC calendar date. Leave empty for no start date.
commitEndDateUTC date stringIncludes commit evidence on or before this UTC calendar date. Leave empty for no end date.
includeNoreplyAddressesBooleanIncludes privacy-protecting GitHub noreply addresses when commit evidence is on. Leave off to exclude them.

The default choices use public repository URLs, include all account types, and leave profile enrichment and commit evidence off.

Example input

This is the public input from a successful current-beta run using the default choices:

{
"discoveryMethod": "repositories",
"repositories": [
{
"url": "https://github.com/octocat/Hello-World"
}
],
"botAccountFilter": "all",
"includeProfileEnrichment": false,
"profileEmailAvailability": "any",
"profileHireability": "any",
"includeCommitEvidence": false,
"includeNoreplyAddresses": false
}

🧾 Output

The dataset output opens the saved contributor rows. Every row has repository, contributor, and contribution. profile appears when profile enrichment is requested. commitEvidence appears when commit evidence is requested. Both optional groups can appear together when both options are on. Null values and empty arrays mean GitHub did not expose a public value.

Run output

FieldTypeWhat it does
datasetURLOpens the dataset that contains the saved contributor rows.

Core contributor row

FieldTypeWhat it does
repositoryObjectThe public GitHub repository where this contributor was found.
repository.nameStringThe repository name.
repository.urlURLThe public link for reviewing the repository.
repository.ownerStringThe GitHub login of the repository owner.
repository.descriptionString or nullThe public repository description, or null when GitHub has none.
repository.languageString or nullThe main programming language, or null when it is not reported.
repository.starsIntegerThe repository star count.
repository.forksIntegerThe repository fork count.
repository.openIssuesIntegerThe number of open issues reported by GitHub.
repository.defaultBranchString or nullThe repository default branch, or null when it is not reported.
repository.isArchivedBooleanWhether GitHub marks the repository as archived.
contributorObjectThe public GitHub account associated with this repository contribution.
contributor.loginStringThe contributor's public GitHub login.
contributor.accountTypeStringThe account type reported by GitHub: User, Bot, or Organization.
contributor.profileUrlURL or nullThe public GitHub profile link, or null when it is unavailable.
contributor.avatarUrlURL or nullThe public avatar link, or null when it is unavailable.
contributor.emailsString arrayPublic contributor email addresses reported by GitHub. The array can be empty.
contributionObjectThe contributor's count and rank within this repository.
contribution.countIntegerThe number of contributions by this contributor in this repository.
contribution.rankIntegerThe contributor's rank in this repository's contributor results.

Example core row

This complete row is from a successful current-beta run:

{
"repository": {
"name": "runner",
"url": "https://github.com/actions/runner",
"owner": "actions",
"description": "The Runner for GitHub Actions :rocket:",
"language": "C#",
"stars": 6224,
"forks": 1413,
"openIssues": 524,
"defaultBranch": "main",
"isArchived": false
},
"contributor": {
"login": "TingluoHuang",
"accountType": "User",
"profileUrl": "https://github.com/TingluoHuang",
"avatarUrl": "https://avatars.githubusercontent.com/u/1750815?v=4",
"emails": []
},
"contribution": {
"count": 310,
"rank": 1
}
}

Profile-enriched contributor row

This table repeats the core fields and adds the fields returned when profile enrichment is on.

FieldTypeWhat it does
repositoryObjectThe public GitHub repository where this contributor was found.
repository.nameStringThe repository name.
repository.urlURLThe public link for reviewing the repository.
repository.ownerStringThe GitHub login of the repository owner.
repository.descriptionString or nullThe public repository description, or null when GitHub has none.
repository.languageString or nullThe main programming language, or null when it is not reported.
repository.starsIntegerThe repository star count.
repository.forksIntegerThe repository fork count.
repository.openIssuesIntegerThe number of open issues reported by GitHub.
repository.defaultBranchString or nullThe repository default branch, or null when it is not reported.
repository.isArchivedBooleanWhether GitHub marks the repository as archived.
contributorObjectThe public GitHub account associated with this repository contribution.
contributor.loginStringThe contributor's public GitHub login.
contributor.accountTypeStringThe account type reported by GitHub: User, Bot, or Organization.
contributor.profileUrlURL or nullThe public GitHub profile link, or null when it is unavailable.
contributor.avatarUrlURL or nullThe public avatar link, or null when it is unavailable.
contributor.emailsString arrayPublic contributor email addresses reported by GitHub. The array can be empty.
contributionObjectThe contributor's count and rank within this repository.
contribution.countIntegerThe number of contributions by this contributor in this repository.
contribution.rankIntegerThe contributor's rank in this repository's contributor results.
profileObjectOptional public profile details requested from GitHub.
profile.nameString or nullThe public name on the contributor profile, or null when it is not set.
profile.bioString or nullThe public profile bio, or null when it is not set.
profile.companyString or nullThe public company value, or null when it is not set.
profile.locationString or nullThe public profile location, or null when it is not set.
profile.websiteURL or nullThe public profile website, or null when it is not set.
profile.followersInteger or nullThe public follower count, or null when it is unavailable.
profile.publicRepositoriesInteger or nullThe public repository count, or null when it is unavailable.
profile.publicGistsInteger or nullThe public gist count, or null when it is unavailable.
profile.hireableBoolean or nullThe public hireability value, or null when it is not set.
profile.createdAtDate-time string or nullWhen the GitHub account was created, or null when unavailable.
profile.updatedAtDate-time string or nullWhen the GitHub profile was last updated, or null when unavailable.
profile.organizationsObject arrayPublic GitHub organizations listed on the profile.
profile.organizations[].loginStringThe organization's public GitHub login.
profile.organizations[].profileUrlURL or nullThe public organization profile link, or null when unavailable.
profile.organizations[].avatarUrlURL or nullThe public organization avatar link, or null when unavailable.
profile.socialAccountsObject arrayPublic social accounts linked from the profile.
profile.socialAccounts[].providerStringThe service that provides the linked account.
profile.socialAccounts[].displayNameString or nullThe public display name for the linked account, or null when unavailable.
profile.socialAccounts[].urlURL or nullThe public link to the linked account, or null when unavailable.

Example profile-enriched row

This complete row is from a successful current-beta profile-enrichment run:

{
"repository": {
"name": "Hello-World",
"url": "https://github.com/octocat/Hello-World",
"owner": "octocat",
"description": "My first repository on GitHub!",
"language": null,
"stars": 3790,
"forks": 6636,
"openIssues": 7067,
"defaultBranch": "master",
"isArchived": false
},
"contributor": {
"login": "Spaceghost",
"accountType": "User",
"profileUrl": "https://github.com/Spaceghost",
"avatarUrl": "https://avatars.githubusercontent.com/u/251370?v=4",
"emails": []
},
"contribution": {
"count": 1,
"rank": 1
},
"profile": {
"name": "Johnneylee Jack Rollins",
"bio": "👻👻",
"company": null,
"location": "UTC-8",
"website": "https://recruit.johnneylee.com/",
"followers": 490,
"publicRepositories": 179,
"publicGists": 77,
"hireable": null,
"createdAt": "2010-04-24T09:32:52Z",
"updatedAt": "2026-09-01T19:49:11Z",
"organizations": [
{
"login": "Velocitous",
"profileUrl": "https://github.com/Velocitous",
"avatarUrl": "https://avatars.githubusercontent.com/u/2405964?v=4"
},
{
"login": "ArtemisInternet",
"profileUrl": "https://github.com/ArtemisInternet",
"avatarUrl": "https://avatars.githubusercontent.com/u/4316246?v=4"
},
{
"login": "signed-form",
"profileUrl": "https://github.com/signed-form",
"avatarUrl": "https://avatars.githubusercontent.com/u/36942019?v=4"
}
],
"socialAccounts": []
}
}

Commit-evidence contributor row

This table repeats the core fields and adds the fields returned when commit evidence is on.

FieldTypeWhat it does
repositoryObjectThe public GitHub repository where this contributor was found.
repository.nameStringThe repository name.
repository.urlURLThe public link for reviewing the repository.
repository.ownerStringThe GitHub login of the repository owner.
repository.descriptionString or nullThe public repository description, or null when GitHub has none.
repository.languageString or nullThe main programming language, or null when it is not reported.
repository.starsIntegerThe repository star count.
repository.forksIntegerThe repository fork count.
repository.openIssuesIntegerThe number of open issues reported by GitHub.
repository.defaultBranchString or nullThe repository default branch, or null when it is not reported.
repository.isArchivedBooleanWhether GitHub marks the repository as archived.
contributorObjectThe public GitHub account associated with this repository contribution.
contributor.loginStringThe contributor's public GitHub login.
contributor.accountTypeStringThe account type reported by GitHub: User, Bot, or Organization.
contributor.profileUrlURL or nullThe public GitHub profile link, or null when it is unavailable.
contributor.avatarUrlURL or nullThe public avatar link, or null when it is unavailable.
contributor.emailsString arrayPublic contributor email addresses reported by GitHub. The array can be empty.
contributionObjectThe contributor's count and rank within this repository.
contribution.countIntegerThe number of contributions by this contributor in this repository.
contribution.rankIntegerThe contributor's rank in this repository's contributor results.
commitEvidenceObject arrayOptional public commit evidence for contributor email addresses.
commitEvidence[]ObjectOne public commit evidence entry.
commitEvidence[].commitObjectThe public commit and its message context.
commitEvidence[].commit.shaStringThe commit SHA reported by GitHub.
commitEvidence[].commit.urlURLThe public link for reviewing the commit.
commitEvidence[].commit.messageStringThe commit message reported by GitHub.
commitEvidence[].commit.authoredAtDate-time string or nullThe time recorded for the commit author, or null when unavailable.
commitEvidence[].commit.committedAtDate-time string or nullThe time recorded for the commit, or null when unavailable.
commitEvidence[].authorObjectThe author details recorded in the public commit.
commitEvidence[].author.nameString or nullThe name recorded for the commit author, or null when unavailable.
commitEvidence[].author.emailStringThe email address recorded for the commit author.
commitEvidence[].linkedAccountObject or nullThe public GitHub account linked to the commit author, or null when none is provided.
commitEvidence[].linkedAccount.loginString or nullThe linked account's public login, or null when no login is provided.
commitEvidence[].linkedAccount.profileUrlURL or nullThe linked account's public profile link, or null when unavailable.
commitEvidence[].linkedAccount.avatarUrlURL or nullThe linked account's public avatar link, or null when unavailable.
commitEvidence[].provenanceObjectThe public branch context used to find the commit evidence.
commitEvidence[].provenance.branchStringThe branch used to find the commit evidence.

Example commit-evidence row

This shortened row keeps the first public commit evidence entry. The "..." string marks additional evidence omitted from the example.

{
"repository": {
"name": "runner",
"url": "https://github.com/actions/runner",
"owner": "actions",
"description": "The Runner for GitHub Actions :rocket:",
"language": "C#",
"stars": 6224,
"forks": 1413,
"openIssues": 524,
"defaultBranch": "main",
"isArchived": false
},
"contributor": {
"login": "dependabot[bot]",
"accountType": "Bot",
"profileUrl": "https://github.com/apps/dependabot",
"avatarUrl": "https://avatars.githubusercontent.com/in/29110?v=4",
"emails": [
"49699333+dependabot[bot]@users.noreply.github.com"
]
},
"contribution": {
"count": 138,
"rank": 2
},
"commitEvidence": [
{
"commit": {
"sha": "fb64b9b20d56951bf30c5b7333a128bc25c2d923",
"url": "https://github.com/actions/runner/commit/fb64b9b20d56951bf30c5b7333a128bc25c2d923",
"message": "Bump @typescript-eslint/eslint-plugin from 8.67.0 to 8.68.0 in /src/Misc/expressionFunc/hashFiles (#4661)\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"authoredAt": "2026-08-28T06:49:43Z",
"committedAt": "2026-08-28T06:49:43Z"
},
"author": {
"name": "dependabot[bot]",
"email": "49699333+dependabot[bot]@users.noreply.github.com"
},
"linkedAccount": {
"login": "dependabot[bot]",
"profileUrl": "https://github.com/apps/dependabot",
"avatarUrl": "https://avatars.githubusercontent.com/in/29110?v=4"
},
"provenance": {
"branch": "main"
}
},
"..."
]
}

💳 Pricing

Pay per saved contributor

This Actor uses pay-per-event pricing. The current configured price is $0.00001 for each contributor saved to the dataset. A run with no saved contributor does not create this contributor event.

🔌 Integrations

Use the dataset in your workflow

Start a run in Apify Console or through the Apify API. Read the dataset output after the run and export the rows in an Apify-supported format.

❓ FAQ

Can I use more than one repository URL?

Yes. Add multiple public repository URLs when Public repositories is selected. Each row keeps the repository where that contributor was found.

Can I use a GitHub organization?

Yes. Choose A GitHub organization and enter one public organization name or URL. The Actor finds that organization's public repositories before collecting contributors.

Why are GitHub contributors not showing in my run?

Check that the repository URL is public and that your contribution, account, profile, or commit filters are not too narrow. Profile filters only apply when profile enrichment is on, and commit filters only apply when commit evidence is on.

What does the contributor rank mean?

It is the contributor's rank in the results for that source repository. The count and rank are kept inside the contribution object.

Does this read private repositories or infer private emails?

No. It reads public GitHub repositories and keeps public email values when GitHub exposes them. It does not infer private contact data or bypass GitHub privacy settings.

What does profile enrichment add?

It adds public profile fields such as name, bio, company, location, website, follower counts, public repository and gist counts, hireability, account dates, organizations, and linked social accounts.

What does commit evidence add?

It adds public commit-author email evidence with commit links, SHAs, messages, author data, timestamps, linked accounts, and the branch used to find the commit.

Why are some fields null or empty?

GitHub does not expose every public value for every account or repository. The Actor keeps unavailable values as null and uses empty arrays when a list has no available values.

How do the profile and commit filters work?

Profile filters work only when profile enrichment is on. Branch, date, and noreply choices work only when commit evidence is on. Values for an inactive group are ignored.

What does leaving maximum contributor records empty do?

It returns all available results until the source is exhausted. Add a number when you want the Actor to stop after a set number of contributor records.

How are duplicate repositories handled?

The first eligible occurrence for a submitted repository is saved. A later submission of the same repository is ignored, and its later match is not merged into the saved row. The same login can still appear for different repositories.

Do I need a GitHub token?

No. This Actor works with public GitHub data without a buyer-supplied GitHub token.

📝 Changelog

v0.0 (02-09-2026)

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré