33

I play several games on Steam and I love the achievement system. It would be great to get an overview of all the achievements ever gained in Steam games. Does Steam support this? I haven't found such an overview.

If such a feature does not exist, I would already be happy with an easy way to calculate the sum of all my achievements automatically.

Edit: I stumbled upon an interesting website called TrueAchievements today. Unfortunately it only works for XBox-Achievements. Does anyone know of a similar service for Steam? This would solve my question right away. Implementing my own solution based on the links posted in the answers didn't work because the APIs are not sufficient for my needs.

2

7 Answers 7

13

There is also playfire.com. It tracks all of my X360 achievements, and there is the capability to track Steam, as well as PSN and XFire. I do not have a steam account, but I like what they do with the XBox. Might be worth trying out for Steam.

2
  • 2
    OK, it's already clear - that's exactly what I was looking for. Amazing platform, thanks so much!
    – Demento
    Jan 27, 2012 at 15:36
  • Not a problem. Enjoy.
    – APrough
    Jan 27, 2012 at 15:39
13

I don't think that Steam provides such an overview. However, Steam (and Steamworks) provide tools that could easily give the possibility to build it.

Check out the documentation and examples:

Some community platforms provide almost that kind of feature (but not exactly what you want, I think). You should have a look at Astats (especially this page) and Steamlevel.

Steamlevel also says something interesting about Steam web API and achievements (in its FAQ):

Can you show achievements?

I'd love to! Unfortunately Steam's Web API for achievements isn't public for all games. I could list achievements of Valve games, but achievements aren't readily available. I'm still working on researching other ways to retrieve them, but don't hold your breath.

For the records, most of those links came from this Steam's forum discussion: Is there any site that will allow you to compare Steam collections?

2
  • +1: Thanks for the links, I will take a look at the possibilities of those APIs. The GetGlobalAchievementPercentagesForApp won't help, because it is not player specific. But maybe I will find the right calls in the rest of the documentation
    – Demento
    Jan 5, 2012 at 15:59
  • You're right. However I added some informations and references to my answer; hope that helps.
    – Anto
    Jan 5, 2012 at 16:26
6

It's currently not possible to collect user achievement data wit the "new" API. It's possible with the "old" XML API though.

It's basically just adding an uri parameter named xml with value 1 to a normal community uri. (So for a community page of http://steamcommunity.com/profiles/XYZ this becomes http://steamcommunity.com/profiles/XYZ?xml=1)


This is a sample C# implementation (for demonstration purposes only!) which exposes a User.Load method which takes the community id as a parameter. (That id would be XYZ in the example above.)

// System.dll
// System.Xml.dll
// System.Xml.Linq.dll
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Xml.Linq;
using System.Xml.XPath;

public class Achievement
{
    public string Name { get; set; }
    public string Description { get; set; }
    public Uri Icon { get; set; }
}

public class Game
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Uri Logo { get; set; }
}

public class OwnedGame : Game
{
    public User User { get; set; }
    public Stats Stats { get; set; }
}

public class Stats
{
    public OwnedGame Game { get; set; }
    public IEnumerable<Achievement> Achievements { get; set;}
}

public class User
{
    private const string SteamCommunityProfileUriFormat = "http://steamcommunity.com/profiles/{0}?xml=1";
    private const string SteamCommunityProfileGamesUriFormat = "http://steamcommunity.com/profiles/{0}/games?xml=1";

    public long Id { get; set; }
    public string Name { get; set; }
    public Uri Avatar { get; set; }
    public IEnumerable<OwnedGame> Games { get; set; }

    public static User Load(long id)
    {
        XDocument profileDocument = XDocument.Load(string.Format(SteamCommunityProfileUriFormat, id));
        XElement profileElement = profileDocument.Element("profile");

        User user = new User()
        {
            Id = long.Parse(profileElement.Element("steamID64").Value),
            Name = profileElement.Element("steamID").Value,
            Avatar = new Uri(profileElement.Element("avatarIcon").Value, UriKind.Absolute),
        };

        XDocument gamesDocument = XDocument.Load(string.Format(SteamCommunityProfileGamesUriFormat, id));

        List<OwnedGame> games = new List<OwnedGame>();

        foreach (XElement gameElement in gamesDocument.XPathSelectElements("gamesList/games/game"))
        {
            OwnedGame game = new OwnedGame()
            {
                Id = int.Parse(gameElement.Element("appID").Value),
                Name = gameElement.Element("name").Value,
                Logo = new Uri(gameElement.Element("logo").Value, UriKind.Absolute),
                User = user
            };

            XElement statsLinkElement = gameElement.Element("statsLink");

            if (statsLinkElement != null)
            {
                try
                {
                    XDocument statsDocument = XDocument.Load(statsLinkElement.Value + "?xml=1");

                    game.Stats = new Stats()
                    {
                        Game = game,
                        Achievements = statsDocument
                                    .XPathSelectElements("playerstats/achievements/achievement")
                                    .Where(achievementElement => achievementElement.Attribute("closed").Value == "1")
                                    .Select(achievementElement => new Achievement()
                                                                    {
                                                                        Name = achievementElement.Element("name").Value,
                                                                        Description = achievementElement.Element("description").Value,
                                                                        Icon = new Uri(achievementElement.Element("iconClosed").Value, UriKind.Absolute)
                                                                    })
                    };
                }
                catch (WebException)
                {
                    continue;
                }
            }

            games.Add(game);
        }

        user.Games = games.AsReadOnly();

        return user;
    }
}

Example usage:

long id = ...
User user = User.Load(id);
int totalAchievementCount = user.Games.Where(game => game.Stats != null).SelectMany(game => game.Stats.Achievements).Count();

Let me hope there are not too much typos in there :-)


Note:

  • As stated in the Steam Web API Terms of Use "you are limited to one hundred thousand (100,000) calls to the Steam Web API per day."
  • All HTTP responses of steamcommunity.com have a Cache-Control: no-cache Header.
  • The XML API is "old" and was meant to be fully replaced. That means: XML-Data may be invalid and not available for all resources. (That's currently the case for Team Fortress 2 Stats)
  • You don't need an API-Key as it's the case for the "new" API.
8
  • I tried to add the xml=1 argument to my Steamcommunity uri, but sadly it didn't work. Maybe you have to use the int id instead of the string id to make it work ?
    – Anto
    Jan 5, 2012 at 17:01
  • @Anto Can you post me that uri?
    – ordag
    Jan 5, 2012 at 17:02
  • Yep; but since my profile is private, I'm not sure you'll be able to test it: steamcommunity.com/profiles/antomrb?xml=1
    – Anto
    Jan 5, 2012 at 17:03
  • Mhmmm... Even when I'm logged in ?
    – Anto
    Jan 5, 2012 at 17:05
  • @Anto Public example: steamcommunity.com/id/mikeb?xml=1
    – ordag
    Jan 5, 2012 at 17:05
6

I found the website SteamStats which addresses my need. It tracks almost all steam games and calculates an overall score of all the achievements you have earned. The value of an achievement depends on the amount of achievements in the game and how many other players owning the game have completed that.

This mechanism is great because it puts a higher value on those achievements that are harder to get. I just tried the site for the first day and I like it already. Unfortunately the features are very limited but my basic requirements are met. The value system has some already obvious flaws. Skyrim, a game which you can play for over 100 hours easily without getting more than half of the achievements, is only worth less than 100 points if you get all the achievements. Other games like Q.U.B.E., where you can get all the achievements within 15 hours easily (once they are fixed) are worth about the same amount of points.

If anyone knows of a similar service with more features, I will accept their answer. Otherwise I will accept my own, because it currently fits what I am looking for best.

2
  • The link is dead.
    – Nikolai
    Jun 29, 2019 at 18:03
  • The link is still dead.
    – Tim S.
    May 29, 2020 at 0:23
6

If you are above Level 10 on Steam then you get something known as an Achievement Showcase. This shows the number of achievements you have completed, percentage completed for all games that you have started and the number of games where you have got all achievements.

Something like this http://steamcommunity.com/id/rahulkadukar

2
  • +1 That's actually really nice, this feature is new to me. Do you know when this was introduced to steam?
    – Demento
    Sep 15, 2013 at 15:58
  • This was recently introduced when they started the Trading Cards. So after every 10 levels you now have a showcase. Right now there are 13 showcases which can be selected. As I am Level 33 now, the 3 that I have displayed are Achievement showcase, Favorite Game and Game collector Sep 17, 2013 at 13:02
5

You can use a third party sites such as MetaGamerScore.com. These type of sites periodically scan your achievements, giving you a good overview of what achievements you have unlocked (or yet to unlock).

With regards to TrueAchievements, they have recently released a version dedicated to Steam achievements (truesteamachievements.com).

4

From the 100Pals Official Steam Achievement Hunting community, a list of all active achievement trackers and their creators:

Cross Platform

https://completionist.me/ luchaos
https://exophase.com/ x3sphere
https://metagamerscore.com/ primal_r

Steam

https://achievementstats.com/ ChrissyX, munky
http://astats.astats.nl/ Mytharox
https://steamhunters.com/ Rudey
https://steamladder.com/ Terry007, Florens
http://steam-tools.net/infograph Misteriosm
https://truesteamachievements.com/ Rich Stone

I personally use: cme (beautiful UI, detailed stats), AStats (point values/guides/leaderboards), MGS (cross-platform points/leaderboards), and SH (new tracker/good UI/leaderboards). You can speak directly with all of the above developers on: https://www.discord.me/100Pals

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .