Noreply decoder

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.

Want the full, unmasked contact record? Get an API key. 10 free credits, no card required.

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?

No. Nothing is delivered there. GitHub substitutes it for the real address on commits when the account has "Keep my email addresses private" switched on, so replying to it reaches nobody.

What is the number in front of the plus sign?

The account's numeric GitHub ID. It never changes, even if the user renames the account, which makes it a better key than the username for anything you store.

Why do some noreply addresses have no number?

They date from before July 2017, when the format was just the username at users.noreply.github.com. The username is still usable, but if the account has been renamed since, it may no longer resolve.

How do I get the person's real email address?

Not from GitHub. The decoder runs the identifiers through PeopleDB's index, which reconstructs addresses from public commit history and the event archive. Guests see a masked preview; an account with 10 free credits unlocks the full record. Why this is hard explains the method.

Do it in your pipeline

GET /api/v1/people
# 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.