Steam Insights

Notes on Steam APIs & Community Site.

Goals & Methods

As Steam's data contains complex relations and is not always presented as expected I had to make notes because I tend to forget.

The main goal is to mirror stats presented on steamcommunity.com profile pages or try to do better.

Find a breakdown analysis of Steam's Achievements over time in this Google Spreadsheet.

User Apps
  • Determine the state of a user's library.
  • Strategies to find missing apps.
  • Updating apps' global stats & details.
Achievements
  • Find achievements and their unlock timestamps.
  • Playing games offline (zero playtime)
  • Game developers causing timestamp loss by updating achievements.
  • Ship with unlocked achievements (see Appendix B).
  • Achievements of not yet released apps.
APIs, Crawling & Recovery Methods
  • Web API is the main source of data
  • Community Data to fetch hidden achievements' description
  • Storefront API for app details
  • steamcommunity.com scraping for very special cases
  • Anonymous Steam client logging changes
  • Userscripts to help users extract lists of apps
  • Steam Console to list all active licenses
  • Integrating other trackers' APIs
Apps

Names

Web API's GetPlayerAchievements and GetOwnedGames match the name displayed in the Steam client and are therefore considered correct even though it might be different from what's displayed on the store page.

As example - App with the ID 656270:

  • "Its Village" in Web API's GetOwnedGames and GetPlayerAchievements
  • "It`s Village" (note the backtick) in Storefront API's appdetails
  • "Girl in Red" in Web API's GetSchemaForGame and GetUserStats

Community Data XMLs match Steam client names ("Its Village")

Types of Licenses

Demos

Volatile. stats can usually be fetched after license expired. might be unavailable if profile is very old.

Free to Play

Volatile. stats can usually be fetched after license expired. might be unavailable if profile is very old.

Family Shared

Volatile. Stats can not be fetched after license expired. Usually expire after 2 weeks it was last launched or as soon as the sharing user turns off Family Sharing. App has to be bought or family shared to make stats accessible again.

Free weekend

See family shared games.

Removed through Steam Support

Stats might be inaccessible immediately. License can be reactivated.

Removed from store

Stats are usually accessible. Retrievable through recent playtime.

Refunded

Stats might be inaccessible immediately. App has to be bought or family shared to make stats accessible again.

Alphas, Betas, Early Access

Inaccessible and cannot be reactivated if removed from store/account.

Steam counters

Numbers on Steam's showcases may be lower than trackers' in rare cases. E.g. all unlocked achievements miss their timestamp causing the game to not count on the showcase.

Zero playtime may affect Steam's showcase by perfects and achievements not counting.

Games that had all achievements removed by developer will not count as 0% towards average game completion (AGC). Locking all achievements will.

Refunding apps that had unlocked achievements (AGC suicide).

Started games count ("achievements in X different games") may be higher if there are alphas/betas whose achievements are gone.

Steam's own global unlock percentage reflects relation to total number of players (played/started up game). Therefor includes trading card idlers.

Appendix A: Custom Stats Pages

Changed back to normal achievements page:

Appendix B: Ship with unlocked achievements

Unlock just through Steam Client (retroactively?) for some users - without even viewing the game in library or at install time:

  • Pixel Puzzles Ultimate
    • Kiosk Purchase 1
    • Ultimate Piece User
  • Puzzle Ball
  • SAS Zombie assault f2p - unlocked on install
    • Cleanup
  • RPG MO
    • Beginner Defense

...even though they were never installed nor played. Some unlock when game is started for the first time.

Reported as fixed; will not auto-unlock:

Appendix C: Inaccessible & not recoverable

Recoverable through workaround:

Resolved:

Appendix D: Quirkses

  • Closed Alphas, Betas and (some) Early Access: Inaccessible and cannot be reactivated if removed from store/account.
  • Boy Next Door: Has achievements with same ID when normalized: "BOY" and "Boy" resulting in count mismatches between Steam Client/steamcommunity/Web API; game cannot be completed
  • Ionball 2: Ionstorm: Achievement "10/10 would wreck again" has a backlash in the API name "10\10 would wreck again" and therefor not global achievement unlock percentage on Steam
  • Serious Sam HD: The Second Encounter: achievements are registered for the demo
  • Through Abandoned 2. The Forest: Achievement "Secrets 4/4" unlock time cannot be fetched (scrambled on Steam's side)
  • Train Simulator: Five "448184_class 150/1" achievements' unlock time cannot be fetched (scrambled on Steam's side) and are actually combined into one making the total count of achievements in the Steam Client/Web Api differ from anything displayed on steamcommunity.com (4 achievements off)

Resolved:

Appendix E: Relocking achievements

Appendix F: Had achievements removed and received new ones

Likely to count as 0% in Steam's showcase, therefor showing up with 0 achievements in the dropdown:

  • Subnautica
  • Unturned