Decode a GitHub
noreply address.
Paste an address like 49699333+octocat@users.noreply.github.com. Get back the account ID and username it encodes, and a real contact record for the person behind it.
The address itself delivers nothing. The number inside it is the useful part.
What a noreply address is
When a GitHub account has Keep my email addresses private switched on, GitHub stamps web-based commits with a substitute address instead of the real one, and with Block command line pushes that expose my email it rejects pushes that would leak it. The substitute is built from the account, not from a mailbox, so it identifies the author without exposing anything.
Two formats exist. Since July 2017 the address is ID+username@users.noreply.github.com, where the number is the account's permanent ID. Older commits use username@users.noreply.github.com with no ID, which breaks silently when the account is renamed. Commits made by GitHub Apps carry a [bot] suffix on the username, as in 49699333+dependabot[bot].
The ID is the part worth keeping. Usernames change; the ID does not, and GitHub's public API resolves it back to whatever the current username is. What neither GitHub nor the address will give you is a real email. Getting one means looking at where developers leave addresses in public: commit history under other identities, the event archive, and cross-referenced profiles. That is what the lookup above does, and this post walks through why it takes more than one API call.
Common questions
Can I send mail to a users.noreply.github.com address?
What is the number in front of the plus sign?
Why do some noreply addresses have no number?
How do I get the person's real email address?
Do it in your pipeline
# The numeric ID from the noreply address is enough
curl "https://peopledb.co/api/v1/people?github_id=583231" \
-H "Authorization: Bearer $TOKEN"
// ←
{
"github_id": 583231,
"github_login": "octocat",
"email_addresses": ["…"],
"personal_email_addresses": ["…"],
"work_email_addresses": ["…"],
"phone_numbers": ["…"]
}
Have a username instead? Use the GitHub lookup. Full parameter reference in the API docs.