The Steam Graveyard
A self-narrating dashboard on the brutal economics of the world's biggest PC games store. Review counts are used as a rough proxy for sales throughout; all commentary is generated from the data at build time and served static.
I analyzed (almost) every game on Steam. Most of them are ghosts.
This page is a static dashboard that narrates itself: every paragraph marked with a small ✦ was written by an LLM reading the live query results at build time, then frozen into static files. Nothing here calls an API when you read it, and nobody can chat with it — the questions are pinned by the author, the answers are baked. Hover a ✦ paragraph to see which chart it read; hover a chart and click its ✨ to see the annotated explanation it wrote for itself. The code and data pipeline are at the bottom of the page.
Sub-500-review figures on this page are survey-corrected estimates (zero-review share: ± pp) — see the trust section for why and how.
The flood #
Steam used to be a gated community. Until 2017, getting a game on the store meant surviving Greenlight — community voting, editorial review, waiting. Then Valve replaced it with Steam Direct: pay a $100 fee per title, upload your build, ship. This chart is what that decision looks like from ten years up.
Steam releases have historically been seasonal — autumn peaks, holiday lulls — and the line always ends at the last month the catalog has fully indexed, so read the endpoint against the same month a year earlier, not against the latest peak. The smooth series is the trailing 12-month average.
The power law #
Here is the entire catalog in one chart. Every game on Steam, grouped by how many reviews it has ever received — note the buckets grow ten times wider as you move right, and the bars still collapse.
Another way to see the same curve: rank every game by lifetime reviews, then ask how much of the platform's total review mass each slice holds.
For scale, the other end of the curve — names you will recognize:
The graveyard #
The internet's favorite Steam statistic says a third of the store has zero reviews. Our first data pass said the same — 33%. It was wrong, and the way it was wrong matters: snapshot databases freeze a small game's count at scrape time and rarely look again. When this pipeline re-fetched thousands of suspicious counts live from Steam, most of those famous "zeros" had quietly picked up a review or two — enough to stop being zeros, nowhere near enough to be alive. Almost nothing on Steam dies with literally no sales. It dies with a few hundred.
* among the games SteamSpy actively tracks, on the snapshot day — a one-day pulse check, not a lifetime verdict.
Eight of them, picked at random — released in the first half of 2025, priced above zero, and still waiting for their first review. Every row here was verified against Steam's live review endpoint, because a snapshot zero can hide a game that quietly picked up a few reviews since:
And the whole graveyard in one grid. Each column is a release-year cohort; each cell is the share of that year's games that ended up in that lifetime-review bucket. Watch the mass sink toward the bottom rows as the flood rises:
Where the odds are least bad #
"Most games fail" is true in every genre, but not equally true. Here the bar is set at 500 lifetime reviews — roughly 15,000–25,000 copies sold by the usual multiplier. Call it "found a real audience."
The price paradox #
Intuition says a cheaper game is an easier sell — so a budget price should be the safe choice. Here is what the store's own numbers say about the odds at each launch price. (Whatever the pattern, mind the causal trap: developers choose their price based on the game they made.)
How much should you trust this? #
More than a headline, less than an audit. Concretely:
- We caught our own data sources lying, and corrected for it. Catalog dumps and SteamSpy freeze small games' review counts at scrape time — we found 2022 releases carrying a stale "0 reviews" against 178 live ones. And bulk endpoints have holes: SteamSpy's owner-sorted pagination drifted enough during a two-hour crawl that even Dota 2 fell through it. So this page treats a count as real only if it was live-verified: refreshed by the SteamSpy pass or fetched game-by-game from Steam's own review endpoint. As of this build, of games are live-verified; statistics that lean on the still-stale remainder (the zero-review share, the medians, the histogram's bottom buckets, the cohort chart) are estimated from a stratified random sample of live-fetched games and carry a ± pp margin on the headline share. The weekly refresh keeps verifying the tail until the estimates converge to exact counts.
- The genre and price tables use as-recorded counts. A stale count can hide a game that crossed the 500-review line after its last scrape (the sample says roughly 4% of stale games did), so absolute success rates in those tables run about a point low for recent-heavy categories. Rankings are unaffected, and the gap closes as verification proceeds.
- Reviews measure reviews, not sales. The standard conversion (Boxleiter method) is sales ≈ reviews × 30–50. It drifts by genre, price and era, which is why this page mostly compares games to each other and uses sales figures only for rough scale.
- Owner counts are extrapolations. SteamSpy's owner buckets get unreliable below ~30,000 owners — most of this catalog — so this page leans on review counts instead and never quotes a small game's "owners" as fact.
- Peak concurrent players is a one-day pulse check scoped to the games SteamSpy actively tracks, not a lifetime measurement — the KPI above says so on its face.
- The catalog has a completeness cutoff. Steam metadata (release dates, genres) is complete through ; fresh counts were fetched on . Newer releases exist but aren't counted until the next data refresh — this page never mistakes "not yet indexed" for "no releases."
- Survivorship, inverted. Everything here already shipped on Steam. The games that died in development never enter this dataset, so the true odds of "I started making a game" → "it found an audience" are worse than any chart above.
Questions you're probably asking #
The author pinned these at build time; the model answered from the query results you just scrolled past. Nothing is generated when you read this.
How this page is built #
One Markdown file. The charts are declarative tags over SQL that runs against
a few MB of committed Parquet at build time; the ✦ paragraphs and the ✨
chart explanations are author-pinned prompts answered once, at build, by
mistral-medium-latest reading the query results — then baked into static
JSON alongside the data snapshots. The deployed site is plain files on a CDN:
no backend, no per-view LLM cost, $0 to run. Readers can't prompt it;
there is nothing to prompt.
The data refreshes on a weekly schedule: a GitHub Action re-crawls SteamSpy (politely — it takes ~2 hours at one request a minute), live-verifies another slice of the long tail against Steam's review endpoint, tops up new releases from the Steam store API, rebuilds the aggregates, and redeploys. The numbers above are as of across games.
Built with Dashdown
(pip install dashdown-md). Source, pipeline and methodology:
github.com/DirendAI/dashdown-gaming-report.