DEV Community

MakeInterview
MakeInterview

Posted on

Valve's public achievement endpoint is an underrated analytics feed

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>
Enter fullscreen mode Exit fullscreen mode

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

  1. 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.
  2. name is the apiname, not the label. Ending2 is not what the store page calls it. You have to maintain a mapping, and the mapping is your inference — label it as such.
  3. 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)

Collapse
 
omyvnss profile image
Om Yaduvanshi •

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.