How to use it
- Pick an import method. Steam Web API: enter your profile link, paste the free Web API key from steamcommunity.com/dev/apikey, open the generated URL in a new tab and paste the JSON back. Saved games page: open your profile’s games page (…/games/?tab=all), save it as “HTML only” and drop the file. CSV: any sheet with a name column and a minutes or hours column.
- Press “Analyze library”. The ticket shows games owned, played and never played; the panels below chart the most-played titles and the playtime distribution.
- Filter the table by name or app id, played state and a minimum number of hours; sort by playtime, name, recent activity, last played or app id.
- Use the backlog roulette to pick a random unplayed game from the current filter. Skip a pick to exclude it from the next spins; reset the skips at any time.
- Download the filtered list as CSV or JSON, copy it, or save the library in this browser so you can come back without importing again.
Example
A library of 312 games where 198 have a recorded playtime above zero: the ticket reports 312 owned, 198 played and 114 never played (37%). Total recorded playtime is 2,417 hours; the median played game has 3.2 hours and the mean 12.2 hours, so a handful of long games dominate: the top 10 account for 64% of all hours. In the distribution, 114 games sit in “Never played”, 61 in “Under 1 h”, 58 in “1–5 h”, 47 in “5–20 h”, 26 in “20–100 h” and 6 in “100 h+”. Filtering “Unplayed” and spinning the roulette picks one of the 114 titles at random.
How the figures are computed
played = games with playtime_forever > 0
unplayed = games with playtime_forever = 0 (games without a playtime value are counted separately)
total hours = Σ playtime_forever / 60
median = middle value of the played games’ minutes
top-10 share = Σ minutes of the 10 most-played / Σ minutes of all games
buckets : 0 | 1–60 min | 1–5 h | 5–20 h | 20–100 h | over 100 hSteam Web API. IPlayerService/GetOwnedGames returns, per game, appid, name (with include_appinfo=1), playtime_forever and playtime_2weeks in minutes and rtime_last_played as a Unix timestamp. The endpoint requires a personal Web API key and does not send CORS headers, which is why a browser page cannot call it directly: the key field here only fills the URL you open yourself and is never stored or transmitted by this site. Use ISteamUser/ResolveVanityURL (also generated here) when your profile uses a custom name instead of a 17-digit SteamID64.
Saved games page. The public games page embeds the game list as data (currently a gameslist_config template with escaped JSON; older pages used an inline rgGames script). The import reads either form, decodes the HTML entities and takes the same fields as the API. Steam changes this page without notice – if the import reports “no game list found”, use the API route.
CSV. The first row names the columns. appid, name/title/game, playtime_forever/minutes or any column containing “hours” (multiplied by 60), playtime_2weeks and last played (date or Unix seconds) are recognised; comma, semicolon, tab and pipe separators are detected from the header.
Duplicate app ids are merged (the larger playtime wins). Nothing is estimated: there is no completion percentage, no library value and no achievement data, because none of these imports contain that information.
Sources: Steam Web API – IPlayerService/GetOwnedGames, Steam Web API key registration, Steam Support – profile privacy settings.
This tool is not affiliated with Valve or Steam. It only reads data you import; it cannot see private profiles, and the optional header images are the only external request it can make (to Steam’s CDN, when you switch them on).
Questions
- Why can’t I just enter my profile URL and get the result?
- Steam’s Web API refuses requests without a personal key and blocks calls made from other websites (no CORS headers); the community profile pages block cross-site reads as well. A site could only do it with its own server and key, which would mean sending your profile to that server. This tool stays in your browser instead: it prepares the URL, you fetch the data yourself and paste it.
- Is my Web API key safe here?
- The key is kept in memory for the current page only – it is not written to the address bar, to local storage or to any request this site makes. It appears only in the URL you copy or open yourself, which goes straight to api.steampowered.com. Clear the field or reload the page and it is gone. You can also revoke the key at any time on steamcommunity.com/dev/apikey.
- What does “never played” mean exactly?
- A game whose Steam playtime is 0 minutes. Steam records time only while a game runs through the Steam client in online mode, so a game you played offline, on another store or before Steam tracked playtime (late 2009) can show as never played. Games without any playtime value – for example from a names-only CSV – are listed separately as “without playtime data”.
- Can I analyse a friend’s library?
- Only if their profile and “Game details” are set to Public: then the same API URL works with their SteamID64 and your key, and their games page can be saved too. Friends-only or private libraries return an empty response, and the tool says so instead of inventing numbers.