DEV Community

Cover image for How GitHub achievements are actually counted (and how to see your progress)
Loc
Loc

Posted on

How GitHub achievements are actually counted (and how to see your progress)

GitHub shows achievement badges on your profile — Pull Shark, Starstruck, Pair Extraordinaire — but it never says how far you are from the next tier, and there is no official list of them. I wanted both, so I dug into where GitHub keeps the data. Here is what I found, and the tool that came out of it.

There are 15 achievements, not 8

Eight can be earned today: Pull Shark, Starstruck, Pair Extraordinaire, Galaxy Brain, Quickdraw, YOLO, Public Sponsor and Finishing Touch. Two were tested and switched off (Heart On Your Sleeve, Open Sourcerer), two are retired (Arctic Code Vault Contributor, Mars 2020 Contributor) and three are for GitHub staff. The tiered ones have four levels: default, bronze, silver and gold. Pull Shark, for example, needs 2, 16, 128 and 1024 merged pull requests.

The full table with every tier: https://gh-achievements.vercel.app/achievements/

GitHub's own record of each badge

When you click a badge on a profile, GitHub loads /users/<user>/achievements/<slug>/detail. That HTML fragment lists the tier, the first unlock date and history rows naming the pull request, repository or answer behind each milestone — your 2nd merged PR, your 16th, your 128th. Rows in private repositories say "inaccessible". None of this is in the REST or GraphQL API.

Counting, then checking against GitHub

The API can list your merged pull requests, but it can't see everything GitHub counts. So the count is checked against a milestone GitHub names. For @torvalds, GitHub's 16th merged PR is subsurface/subsurface#1506, and it is also 16th in the API's list: the two agree (+0). When they don't, the difference is added to the live count, so pull requests the API can't show you are still counted.

Two more rules keep the numbers honest:

  • A tier GitHub granted is never contradicted. A count below the tier's threshold is raised to it.
  • Every number is labelled: official (read from GitHub's pages), calibrated (counted, then checked against a milestone) or counted (nothing public to check it against).

Why Pair Extraordinaire has no counter

The obvious rule — count merged PRs with a Co-authored-by trailer — is wrong. On my own account, 60 merged PRs had such commits while GitHub's tier said 10 to 23, and GitHub's first unlock (2024-12-17) came before the first such PR (2026-05-28). The co-author: search qualifier returned commits co-authored by other people. So the tool shows GitHub's tier and no number, rather than one that is wrong.

See your own progress

On the web, no install: https://gh-achievements.vercel.app/check/ — type any username, or sign in with GitHub to include private repositories (the token is used for one check and revoked).

In the terminal, with the GitHub CLI:

gh extension install nmloc/gh-achievements
gh achievements
Enter fullscreen mode Exit fullscreen mode

It's open source (MIT, Go): https://github.com/nmloc/gh-achievements. If a count looks wrong for your profile, open an issue — that's how the catalog stays right.

Top comments (0)