How to accurately estimate Steam game sales
May 13, 2023
In this article, we'll explore several methods of estimating game sales on Steam. Mainly, we will look at the following estimation methods:
- Review multiples (Boxleiter method)
- Using the Steam's top seller rank to estimate revenue and sales.
- Polling public steam profiles to estimate game ownership. Similar to how SteamSpy used to work before the Steam profile privacy change.
- Using the number of concurrent players to estimate game's sales
At the end, we will come to an algorithm that estimates sales and revenue much more accurately than the review based approach.
To test the estimates, I collected this sample of around 120 games with public sales data and made a script that compares game sales to estimates on a given date. This is an unbiased sample that contains games of various sizes, genres and years of release. Due to high error margins, we will ignore games that sold less than 1000 copies in our tests.
Review multiples (Boxleiter method)
Let's start with the simplest method. Taking the number of reviews and multiplying it by a constant number. The median sales/review ratio is around 35. Here are the results after running a test:
| Aggregate accuracy | 100.61% |
| Average accuracy | 63.74% |
| % of games within 10% error margin | 12.82% |
| % of games within 30% error margin | 42.74% |
| % of games within 50% error margin | 70.94% |
| % of games within 70% error margin | 88.89% |
That's relatively inaccurate. Less than half of games are within 30% error margin and 30% of games are off by more than 50%
Now, let's try to improve our method by using different multiples for different release dates, price, review scores, and the like. Something similar to what is described here and here.
| Aggregate accuracy | 103.58% |
| Average accuracy | 67.34% |
| % of games within 10% error margin | 12.82% |
| % of games within 30% error margin | 50.43% |
| % of games within 50% error margin | 80.34% |
| % of games within 70% error margin | 94.87% |
This looks a little better, but is still pretty imprecise.
Estimating game sales using concurrent player count and average playtime estimates
Now let's try another method. We can add up the number of concurrent players for every hour and divide that by the average playtime estimate to estimate game's playerbase. Since number of concurrent players is reported as an exact number via steam API, accuracy of this method depends completely on the average playtime estimate. We can estimate average playtime from all public indicators like public profiles and game reviews. The more data points we can gather, the more accurate the estimate will be. Here are the results after running a test:
| Aggregate accuracy | 100.31% |
| Average accuracy | 76.02% |
| % of games within 10% error margin | 21.11% |
| % of games within 30% error margin | 64.44% |
| % of games within 50% error margin | 93.33% |
| % of games within 70% error margin | 100% |
This is better than the review based approach, but is still not accurate enough. Also, for some games we do not have accurate historical concurrent player data, so this method cannot be applied to all games.
Using Steam's top seller rank to estimate sales
Let's try one more thing. Using the steam top seller rank to estimate game revenue and sales.
Top seller rank is a good indicator of how a game is doing. Steam's top seller lists are generated automatically based on all revenue sources for a game, including DLCs and in-game-transactions.
This is a double-edged sword, as it allows us to estimate revenue for free-to-play games but can disrupt unit sales estimations for paid games with in-app-purchases, so we have to be careful with that.
Here are the results of the test.
| Aggregate accuracy | 108% |
| Average accuracy | 71.74% |
| % of games within 10% error margin | 21.05% |
| % of games within 30% error margin | 61.4% |
| % of games within 50% error margin | 85.96% |
| % of games within 70% error margin | 96.49% |
Polling public profiles
Finally, let's try polling public Steam profiles to estimate game ownership. This is the method used by SteamSpy prior to Steam's privacy policy change. Since the number of public profiles has been significantly reduced since Steam's policy change, instead of the 3-day rollback used by steamSpy, we will use a much larger rollback of 30 days to collect a sufficient sample. And then, we will use the number of reviews and the top seller rank to fine-tune the estimate.
| Aggregate accuracy | 97.57% |
| Average accuracy | 80.82% |
| % of games within 10% error margin | 31.4% |
| % of games within 30% error margin | 77.91% |
| % of games within 50% error margin | 97.67% |
| % of games within 70% error margin | 100% |
This method seems to be the most accurate for now, however, the problem with this approach is that it doesn't really work for smaller games, the margin of error is simply too large. So for anything under 20,000 players, we'll have to rely on other estimation methods.
Aggregating estimates
Now let's aggregate all of the above methods and see what we will get.
We will use different weights for different estimation methods depending on the game (eg for smaller games, profile polls are given less weight)
Additionaly, I will use this 2018 leaked dataset to further adjust the estimates for older games.
Here are the results:
| Aggregate accuracy | 99.73% |
| Average accuracy | 80.46% |
| % of games within 10% error margin | 30.77% |
| % of games within 30% error margin | 76.92% |
| % of games within 50% error margin | 99.15% |
| % of games within 70% error margin | 100% |
Now, this looks much better (than the review based approach we started with)!
Here is a detailed overview of the test results:
| Game | Date | Reported units sold | Estimate | % difference |
|---|---|---|---|---|
| Tile Cities | Jul 10, 2022 | 14K | 14K | 0% |
| Dinkum | Aug 17, 2022 | 350K | 348.3K | 0% |
| Rust | Dec 7, 2021 | 12.4M | 12.5M | 1% |
| Sea of Thieves 2023 Edition | Dec 22, 2021 | 5M | 4.9M | -1% |
| Stardew Valley | May 15, 2022 | 13M | 12.8M | -1% |
| Garry's Mod | Sep 20, 2021 | 20M | 20.3M | 2% |
| Aragami | Oct 4, 2019 | 320K | 312.4K | -2% |
| Handshakes | Feb 21, 2023 | 60K | 58.5K | -2% |
| Inspector Waffles | Mar 23, 2022 | 3.5K | 3.4K | -4% |
| Yerba Mate Tycoon | Jun 15, 2022 | 2K | 2.1K | 4% |
| Placid Plastic Duck Simulator | Dec 7, 2022 | 76.3K | 73.4K | -4% |
| Buddy Simulator 1984 | Oct 17, 2022 | 75K | 78.2K | 4% |
| The Planet Crafter | Mar 24, 2023 | 500K | 479.3K | -4% |
| Hydroneer | Jul 27, 2022 | 500K | 478.7K | -4% |
| The Wandering Village | Mar 25, 2023 | 224K | 214K | -4% |
| Sons Of The Forest | Feb 24, 2023 | 2M | 1.9M | -4% |
| The Witcher® 3: Wild Hunt | Apr 8, 2020 | 12M | 11.3M | -6% |
| Production Line : Car factory simulation | Aug 17, 2019 | 100K | 106.1K | 6% |
| Dwarf Fortress | Jan 4, 2023 | 500K | 470.9K | -6% |
| Wartales | Apr 27, 2023 | 600K | 562.6K | -6% |
| Stacklands | Jul 10, 2022 | 450K | 480.2K | 6% |
| Darkest Dungeon® | Nov 3, 2016 | 1M | 1.1M | 7% |
| Bonding Ambivalence | Apr 1, 2023 | 3.4K | 3.2K | -7% |
| Persona 4 Golden | Jun 30, 2021 | 1M | 928.8K | -7% |
| Train Fever | Nov 25, 2015 | 81K | 87.4K | 7% |
| Watch Your Plastic Duck | Jan 30, 2023 | 1.4K | 1.5K | 7% |
| Dungeons of Edera | Jun 16, 2022 | 38.6K | 41.7K | 7% |
| My Jigsaw Adventures - Roads of Life | Jan 25, 2022 | 1K | 1.1K | 8% |
| Core Keeper | Jun 10, 2022 | 1M | 913.9K | -9% |
| Shipped | Jan 20, 2023 | 9.5K | 10.4K | 9% |
| Avorion | Jun 13, 2022 | 450K | 409K | -9% |
| GROSS | Mar 9, 2023 | 3.1K | 2.8K | -9% |
| Freedom Planet 2 | Nov 9, 2022 | 16K | 14.5K | -10% |
| Punch A Bunch | Feb 24, 2023 | 10K | 11.1K | 10% |
| EVERSPACE™ 2 | Apr 20, 2023 | 276K | 248.5K | -10% |
| Stationeers | Jan 20, 2023 | 173K | 192.2K | 10% |
| Valheim | Apr 25, 2022 | 10M | 9M | -10% |
| Lost Potato | Oct 1, 2021 | 1.3K | 1.2K | -10% |
| Roll | Apr 20, 2022 | 22.4K | 20.1K | -10% |
| Eggcelerate! | Nov 20, 2021 | 1K | 893 | -11% |
| The Dungeon Beneath | Mar 30, 2021 | 3.6K | 4.1K | 11% |
| Dread Hunger | Apr 13, 2022 | 1M | 891.4K | -11% |
| Elong Plug | Mar 2, 2023 | 5K | 4.5K | -11% |
| Big Ambitions | Mar 25, 2023 | 150K | 133.6K | -11% |
| Out of Ammo | Jan 20, 2023 | 57K | 50.7K | -11% |
| Deep Rock Galactic | Dec 31, 2018 | 500K | 444.4K | -11% |
| The Pale Beyond | Feb 25, 2023 | 6.1K | 5.4K | -11% |
| Octodad: Dadliest Catch | Jan 30, 2019 | 660K | 585.6K | -11% |
| Mortal Glory | Feb 9, 2022 | 23.9K | 21.2K | -11% |
| Please Fix The Road | Jun 28, 2022 | 10K | 8.8K | -12% |
| Barotrauma | Jun 4, 2021 | 800K | 704.9K | -12% |
| Noobs Want to Live | Feb 21, 2023 | 100K | 114.7K | 13% |
| SpeedRunners | Apr 5, 2016 | 1M | 866K | -13% |
| Sands of Salzaar | Jul 27, 2022 | 1M | 860.8K | -14% |
| Escape Simulator | May 4, 2022 | 1M | 860.1K | -14% |
| Golfing Over It with Alva Majo | Jan 20, 2023 | 100K | 85.9K | -14% |
| Cygnus Enterprises | Apr 15, 2023 | 5K | 5.9K | 15% |
| Warsim: The Realm of Aslona | Dec 12, 2021 | 30K | 35.7K | 16% |
| Contraband Police | Apr 4, 2023 | 250K | 209.9K | -16% |
| Yi Xian: The Cultivation Card Game | Jan 21, 2023 | 100K | 83.8K | -16% |
| Pawnbarian | Dec 8, 2021 | 8.4K | 7K | -17% |
| Inscryption | Jan 5, 2022 | 1M | 1.2M | 17% |
| Supraland | Jun 28, 2020 | 250K | 207.4K | -17% |
| Loop Hero | Dec 9, 2021 | 1M | 1.2M | 18% |
| The Riftbreaker | Oct 13, 2022 | 500K | 410.5K | -18% |
| Battle Royale Tycoon | Nov 4, 2019 | 15K | 18.3K | 18% |
| Townscaper | May 19, 2021 | 380K | 468K | 19% |
| ICARUS | Jan 20, 2023 | 1M | 818.9K | -20% |
| pureya | Jan 20, 2023 | 17K | 21.3K | 20% |
| Among the Sleep - Enhanced Edition | Feb 14, 2017 | 186.1K | 147.9K | -21% |
| West Hunt | Feb 3, 2023 | 110K | 87.4K | -21% |
| Crusader Kings III | Mar 17, 2022 | 2M | 1.6M | -21% |
| PostCollapse | Apr 7, 2020 | 4K | 5.1K | 21% |
| Ravenous Devils | May 15, 2022 | 100K | 78.8K | -21% |
| Mixolumia | Jun 22, 2021 | 1.4K | 1.8K | 22% |
| EVERSPACE™ | Apr 20, 2023 | 879K | 684.1K | -22% |
| Majotori | Jan 20, 2023 | 35K | 45.5K | 23% |
| Cthulhu Saves the World | Mar 17, 2022 | 671K | 514.5K | -23% |
| Osiris: New Dawn | Jan 17, 2023 | 600K | 456K | -24% |
| Salome's Kiss | Oct 2, 2022 | 1K | 1.3K | 25% |
| Protolife | Jun 25, 2020 | 17K | 12.7K | -25% |
| Furi | Oct 11, 2020 | 280K | 375.1K | 25% |
| City Climber | May 17, 2021 | 20K | 14.8K | -26% |
| Highway Blossoms | Jun 17, 2021 | 50K | 67.8K | 26% |
| Son of a Witch | May 9, 2022 | 23K | 16.9K | -26% |
| Sifu | Mar 31, 2023 | 50K | 68.1K | 27% |
| Hot Heat Reset: Chapter 1 | Mar 9, 2023 | 2.7K | 1.9K | -28% |
| LOST EMBER | Jan 13, 2022 | 134K | 96.3K | -28% |
| A Little Golf Journey | Feb 24, 2023 | 1.5K | 1.1K | -29% |
| Nebula | Feb 24, 2023 | 2.4K | 3.4K | 29% |
| Project Heartbeat | Jan 5, 2022 | 3K | 4.3K | 30% |
| Guns of Icarus Online | Jun 26, 2014 | 450K | 646K | 30% |
| Peglin | Apr 3, 2018 | 80.2K | 55.3K | -31% |
| Induction | Mar 20, 2018 | 1.3K | 1.8K | 32% |
| Cultist Simulator | Feb 18, 2019 | 85K | 127.2K | 33% |
| Winter Falling: Battle Tactics | Nov 30, 2022 | 3.2K | 2.1K | -33% |
| Gibbous - A Cthulhu Adventure | Jan 16, 2021 | 40K | 26.5K | -34% |
| Out of Ammo: Death Drive | Jan 20, 2023 | 11.2K | 7.2K | -35% |
| Missing Hiker | Mar 14, 2023 | 100K | 64K | -36% |
| Eastshade | Oct 1, 2020 | 127K | 81.1K | -36% |
| Cauldrons of War - Barbarossa | Apr 8, 2023 | 8K | 5K | -38% |
| Cosmic Star Heroine | Mar 17, 2022 | 58K | 35.9K | -38% |
| Primordia | May 1, 2022 | 200K | 121K | -40% |
| Mortal Online 2 | Feb 2, 2022 | 110K | 65.8K | -40% |
| Knock-knock | Feb 14, 2017 | 94K | 55.3K | -41% |
| Tinyfolks | Jun 9, 2022 | 10K | 17.3K | 42% |
| Slime Rancher | Jan 13, 2022 | 5M | 2.9M | -42% |
| Tilecraft | Nov 30, 2022 | 1.2K | 2.1K | 44% |
| Bloody Rally Show | Feb 23, 2021 | 2.5K | 4.4K | 44% |
| The Wreck | Apr 17, 2023 | 1K | 564 | -44% |
| Hats and Hand Grenades | Dec 7, 2022 | 24.1K | 13.3K | -45% |
| Larcin Lazer | Feb 23, 2023 | 1.2K | 2.2K | 45% |
| Missing Hiker | Feb 16, 2023 | 10K | 18.4K | 46% |
| The Companion | Nov 21, 2022 | 3K | 1.6K | -46% |
| Cthulhu Saves Christmas | Mar 17, 2022 | 13K | 6.9K | -47% |
| Will You Snail? | Mar 18, 2022 | 7.5K | 14.1K | 47% |
| Cat Herder | Feb 2, 2023 | 1.5K | 750 | -50% |
| Nightmare Reaper | Mar 26, 2022 | 20K | 53.2K | 62% |
Estimating revenue
However, this does not tells us the whole story. We also want to know the revenue of the game, and sales and revenue do not have to be linearly correlated. Luckily, I made a small algorithm that factors in discounts when calculating revenue based on games price history profile. This should give us the right ball-park for the vast majority of games.
Unfortunately, for some games, the situation is not that simple. It can be hard to differentiate copies sold vs given away for free, and even harder to differentiate copies sold regularly and copies sold in bundles. Further more, it's pretty much impossible to know how the game has sold on 3rd-party sites.
We can use the ratio of reviews marked as purchased on Steam / Activated with a key, look for discrepancies in review ratios and playtime data, look for patterns in public Steam libraries that may indicate a game was purchased in a bundle, and use top seller rankings to help us deduce how many copies were sold directly through steam. However, there is currently no way to know exactly how much the game has made selling on third-party sites or in bundles. We can only confirm how many copies have been sold directly on Steam.
After all, nothing can be as accurate as the numbers provided by the developers themselves. You should always sanity check all estimates before making any decisions
Some things to watch out for:
- Smaller games have less accurate estimates than the larger ones due to smaller sample size
- Free-to-play games generally have less accurate estimations
- Revenue estimates do not take into account revenue from any external sources and may not properly estimate revenue from steam bundles
- There may be bugs in our scraping or estimation algorithm, causing the estimates to be wildly off. Always sanity check any estimates
Conclusion
Overall, using all of these methods together is far more accurate than using review-based estimations only. It is important to note, however, that when conducting market research, these estimates should only be used as a supplementary information and should not be followed blindly. Obviously, there is still room for improvement here, and I will continue to work on the algorithm to improve it even more.
If you found this article helpful, check out our tool at gamalytic.com