Valve's public achievement endpoint is an underrated analytics feed — here's its shape
While building a small bilingual (Chinese/English) fan guide for a co-op game, I leaned on a Valve endpoint that more people should know about: the global achievement percentages API.
https://api.steampowered.com/ISteamUserStats/GetGlobalAchievementPercentagesForApp/v2/?gameid=<APPID>
It returns, for a given app id, the share of all players who have unlocked each achievement. No scraping, no private dashboard — one JSON call.
The shape
The response is small: an achievementpercentages.achievements[] array of { name, percent } where name is the internal API name (not the store display name). For the game I was documenting (app 1478500) it produced a clean funnel:
| achievement (apiname) | % of players |
|---|---|
| Drawbridge | 87.6 |
| Map | 64.7 |
| Backpack | 57.0 |
| Chairlift | 44.2 |
| Train | 37.8 |
| Holster | 36.2 |
| Tunnel | 30.2 |
| Peak | 28.8 |
| Wall | 20.2 |
| Ending1 | 19.1 |
| Shiny | 9.4 |
| Ending2 | 6.0 |
Sorted ascending, that is a retention curve. Nobody had to build telemetry; Valve already published it.
Three things that will bite you
- The numbers move. These are live shares over a changing denominator. Re-reading the same endpoint ~2.5 weeks later, the rarest achievement had already gone 6.0% → 7.1%. If you display these, store and display the date you read them, or you'll publish a number that quietly goes stale.
-
nameis the apiname, not the label.Ending2is not what the store page calls it. You have to maintain a mapping, and the mapping is your inference — label it as such. - Rounding is a choice. The endpoint returns floats; how you round is a presentation decision, not data. Say so.
Why it made the site better
The interesting part isn't the API — it's what it lets a small site do honestly. Instead of "10 tips" filler, the guide can lead with a real, primary-source, independently verifiable dataset, and put its methodology and its data-drift caveats on a public /sources page. It also made i18n matter: the same numbers ship on two locale routes (/zh-CN and /en) with identical values mirrored per locale, so the Chinese and English pages can never disagree.
If you're building anything game-adjacent, this endpoint is worth an afternoon. It's public, it's structured, and it's a genuine story about where players actually stop playing.
I wrote it up against the game Big Walk on the Big Walk Guide's achievements page — an independent fan project (no affiliation with House House, Panic or Valve), with the collection date and the funnel arithmetic published alongside the figures.
Top comments (1)
came for the endpoint, stayed for "rounding is a choice". public feeds like this are full of people treating a presentation decision as raw data.
the apiname-to-label mapping is the real tax though. it's inferred, it drifts, and you labelled it as such instead of pretending the names were obvious. most writeups quietly skip that part. dating every read against the moving denominator is the cheap insurance that makes the numbers trustworthy.