How we measure things
On this page
Peer sets & comparisons
Scale & audience
Sales, revenue & forecasting
Reviews, sentiment & language
Trends (genre-level)
Reference
How to read these numbers. Steam doesn't publish sales, wishlists, or active players, so where we model them the figures are directional, not exact — built to size things (“is this a $1M or a $50M game?”) and compare like-for-like, not to report precise counts. Each method below notes the signals it uses and where it surfaces in the app.
Peer sets & comparisons
Used across Research · Monitor
Glossary of peer sets
Several distinct ideas wear similar-sounding names across the app. Here's what each one is and how to read them.
Research and Monitor reads compare your game against a peer set or summarise one. They look alike at first read, but they answer different questions and are built differently.
A note on labels. The peer-set names below are the canonical methodology terms used here. On Research screens you'll see them as plain language — “similar games” on Crossover, “competitors” on Markets, “direct rivals” on Competition. Same math underneath; the screens lean on the wording that reads best for the question they answer.
- Comparable games — same audience-size tier as your game, sharing your genre and a meaningful slice of your tag profile. The default benchmark across the app. Whenever the UI says “vs comparable games”, it's this peer set. Drives every cohort percentile and median.
- Closest 10 — your top ten nearest competitors by composite affinity within the Comparable-games cohort. Same ranking the Competition and Crossover pages use (each entry carries the fit-indicator dots described in the Affinity section below). Used wherever a tighter, competition-coherent percentile read is more useful than the broad benchmark — the “vs Closest 10” column on the Cohort benchmark, the suggested competitors on Monitor → Benchmarks.
- Core affinity peers (Competition tab — Direct rivals) — peers classified as STRONG by the audience-fit analyst (same gameplay loop, same scale, same purchase motivation). Your most direct rivals. A judgment call, not a math ranking — a high-relevance peer can fall to Adjacent if its motivation differs.
- Adjacent affinity peers (Competition tab — Adjacent competitors) — peers classified as ADJACENT by the same analyst (a genuinely shared audience, but differs on a notable dimension like gameplay loop, perspective, or scale). Close enough to matter for marketing-attention planning.
- Upcoming competitors (Competition tab — merged into the ranked list, “Upcoming” badge) — pre-launch peers with meaningful anticipation (wishlists past a floor), classified by the same audience-fit analyst. Marketing-attention rivals you'll compete with for wishlists, Next Fest visibility, and launch-window collisions. Doesn't feed any percentile read.
- Stretch peers (Competition tab — via the tier pills) — released peers one or two tiers above your current scale, sharing your genre/tag profile, classified by the same analyst. Surfaced by toggling a higher tier pill on the list — “if you grow into the next tier, who do you compete with?”. No upward stretch exists for Hit-tier bases.
- Recent releases — comparable games released within roughly the past two years that carry a published full price. Used only for pricing comparisons (cohort full-price median on Market Fit and Monitor → Revenue) so a brand-new release isn't anchored against an older discount catalogue.
- Addressable Steam audience — the unique monthly-active player population across the comparable-games set, deflated for cross-game overlap. The reachable scope of your niche, not a total customer-pool ceiling. IP-driven games can exceed it (we flag that case explicitly with a banner).
- Selling points / positioning rarity — your top distinctive Steam tags (the rare ones, weighted higher — surfaced in the UI as your selling points), plus the count of other games sharing them. Drives the Standout / Distinctive / Recognisable / Common / Generic verdict on Market Fit's Positioning corner. Not a peer set — a positioning rarity count describing how unique your trait combination is, independent of audience size.
- Creative reference titles (Market Fit tab) — top peers ranked by pure tonal/thematic fit (theme, narrative, gameplay tags, genre), regardless of audience size. Used as marketing reference titles — the games you'd pitch as comparable in tone or design DNA when writing copy or building a deck. Distinct from Core affinity, which weighs commercial factors (audience scale, recency, momentum, recognition) heavily.
Rule of thumb: “vs comparable games” = how typical you are for your size and niche; “vs Closest 10” = how you stack against direct rivals by composite; Core / Adjacent affinity = direct vs nearby rivals on Competition; Stretch peers = who you'll meet at the next tier; Reference titles = tonal/thematic peers for copy and pitch decks.
How we pick comparable games
The peer set behind every cohort percentile and median — built from tier + genre + tag similarity, kept tight enough that percentile reads stay commercially meaningful.
Whenever you see a percentile or a “vs comparable games” number on Research or Monitor, it's measured against the comparable-games peer set — a curated pool of games that are genuinely comparable to yours, not the entire Steam catalogue. We assemble it in four steps:
- Match the audience-engagement tier. Every game falls into one of six tiers (Hit → Strong → Mid → Emerging → Visible → Long tail) based on its followers, lifetime reviews, and wishlists. The strongest of the three signals determines the tier, so a game with high wishlists but low reviews still classifies on its strongest dimension. Pre-launch games qualify on wishlists or followers without needing reviews; released games qualify on reviews even if wishlists have converted away. If your own tier is in the bottom half but your closest affinity competitors sit higher, we bump the cohort tier up to match them — under-engaged games benchmark against their actual competitive landscape, not the long tail.
- Match the niche — genre + significant tags. Within your tier, peers must share at least one Steam genre (Action, Strategy, RPG, etc.) and a meaningful number of your significant Steam tags — the player-voted descriptors on a game's store page. We only count tags with enough votes to be meaningful, and the shared-tag floor is tight enough that broad descriptors like “Action” or “Singleplayer” — present on tens of thousands of games — can't dominate the match.
- Rank by tag-rarity overlap, then cap + floor. The candidate pool is ranked by IDF-weighted tag overlap — rare tags (“Bullet Hell”, “Twin Stick Shooter”) count for more than generic ones (“Action”, “Indie”). We keep the highest-overlap peers and only those covering a meaningful share of your game's total tag-rarity mass — a peer must share a real chunk of what makes your game distinctive, not just a handful of common tags. The displayed “N comparable games” count is itself a signal: tight niches yield small cohorts, broad-genre games hit the cap.
- Drop the games that only look similar. Tag overlap is vocabulary, not audience — it happily admits a game that shares your descriptors while serving a completely different player. So the cohort is finally filtered by the same audience-fit analyst that powers Competition (below): any peer it judges Not_fit is removed from the percentile population. In practice this is the step that does the most work — it typically removes a substantial share of a raw tag-matched cohort, across every tier rather than only the big ones. One guard: if removing them would leave too few games to compute an honest percentile against, we keep the unfiltered set instead, because a percentile over a handful of games is worse than a slightly looser one over many.
Why your “N comparable games” may be smaller than it once was. That last step is recent. Before it, the count reflected everything that matched on tags and tier — including games that shared your vocabulary but not your audience. The number now reads lower and means more: a smaller population of genuinely comparable games, which is what a percentile needs to be worth reading. The count is still a signal, but compare it to other games today rather than to a figure you noted down previously.
Two different systems use the word “tier”
Don't confuse the two scales. The cohort tier (Hit → Strong → Mid → Emerging → Visible → Long tail) classifies the whole game against the catalogue to pick its peer set. The absolute scale bands (Pre-traction → Small → Moderate → Established → Major → Genre outlier) classify a single metric value against fixed thresholds. They're unrelated — a game can sit in one cohort tier while any given metric lands in a different scale band. Tell them apart by context: the cohort-tier label always carries the word “tier”; scale-band labels appear next to a metric number.
Percentiles match on lifecycle stage. A released game's metrics (reviews, MAU) behave nothing like a pre-launch game's, so when there are enough same-stage peers we rank you only against comparable games at your stage — shown as “vs comparable released games” (or “comparable pre-launch games”). When too few same-stage peers exist we fall back to the full comparable-games set and flag it as a mixed cohort.
Pricing has one extra filter — recent releases. The Price row only compares against comparable games released within roughly the past two years, using each one's full price (defined just below) — not whatever they happen to be on sale for today. Without this, a brand-new release would be benchmarked against a long tail of older catalogue games sitting at permanent deep discounts. We call this filtered subset recent releases in the UI.
What “full price” means
Full price = the publisher's set sticker price on Steam, before any active sale discount. Every pricing comparison uses the publisher-set retail price, not whatever discount happens to be running today.
Why not the live discounted price. Steam runs continuous rotating sales. Two games can display the same price right now even though one is at half-off and the other isn't — they're making completely different positioning statements. Comparing retail prices reads “is this game priced premium / aligned / budget for its peers” — a strategic signal — instead of “did your game happen to be on sale today” — a timing artefact.
A side effect: cohort medians stay stable across snapshots. Using live discounted prices would make the median drift daily as peers entered or exited sales, even when nothing about your own positioning had changed.
Where it appears: the Cohort benchmark card on Market Fit, the Audience reach card on Audience, the Audience widget on Overview, and every “vs comparable games” pill / line across Monitor.
How we score peer similarity (Affinity)
A two-stage system: an audience-fit analyst sorts peers into Core / Adjacent / Not_fit, then a transparent composite ranks peers within each tier.
Every peer on the Competition tab and Crossover tab goes through a two-stage gate. The first stage answers “does this peer share my audience?”; the second stage answers “within the peers that do, how do they rank?”. Splitting the question this way keeps audience judgment separate from structural ranking — the qualitative call and the quantitative ranking each stay in the lane they're strongest at.
Stage 1 — Audience-fit classifier
For each base game we run a single audience-context pre-pass that establishes the game's archetype: who its core audience is, which other games it most clearly belongs alongside (cluster of canonical peers), which games look similar on the surface but serve a different audience (negative cluster), and which dimensions matter most for distinguishing a genuinely shared audience (setting/tone, gameplay loop, scale, motivation).
Every candidate peer is then classified against that archetype into one of three buckets:
- STRONG (Core affinity) — peer is analogous to a core-cluster member (same gameplay loop, same perspective, same scale, same motivation). Your most direct rivals.
- ADJACENT (Adjacent affinity) — peer shares the base's core purchase motivation but differs on one notable dimension (different gameplay loop, perspective, or scale). Genuinely shared audience, expansion targets.
- NOT_FIT — peer looks similar on tags/IP/genre but serves a truly different audience (trap case). Filtered out of the displayed list.
The classification runs multiple passes per peer and takes the majority verdict — single-pass jitter doesn't flip a peer's tier. The same classifier (and the same cached audience-context pre-pass) is reused for every peer in the Competition list — released, upcoming, and tier-up alike.
Stage 2 — Composite within tier (transparent math)
Within each tier (STRONG-then-ADJACENT), peers are sorted by a composite score blended from seven structural components. Every number is derived from catalogue data — no qualitative judgment in the math. The composite is reproducible from the displayed component bars.
- Tag overlap — rarity-weighted shared Steam tags. Rare tags count more than generic ones. The biggest within-tier signal since the audience tier is already settled.
- Activity — current concurrent-player count. Pre-launch peers and released-but-dormant peers score correspondingly lower.
- Momentum — recent review and follower velocity. Captures whether the peer is gaining traction right now.
- Audience scale — similar follower / review / wishlist counts. Scale tiebreaker on top of the cohort's tier-lock.
- Recency — newer releases rank higher; older peers get a graduated vintage penalty.
- Recognition — cultural weight from follower × review count. Tiebreaker and messaging anchor.
- Genre alignment — Steam genres shared with the base. Coarse signal since the cohort already requires shared genre.
Bonuses and penalties on the composite
- Franchise bonus. Same-series peers get a tiered lift: larger when they also share genres (real mechanical fit), smaller when the relationship is IP-only (brand crossover without gameplay overlap). The IP-only tier is small enough that off-genre franchise peers don't leapfrog genre-matched non-IP peers.
- Tonal-divergence penalty. Tag overlap rewards intersection but ignores opposing tonal-loud tags. A serious atmospheric sci-fi title and a cartoony family-friendly platformer can share many surface tags and look like close peers, even though their audience target is diametrically opposed. Fires per-axis on cartoony ↔ realistic, casual ↔ hardcore, comedy ↔ dark, capped at a moderate total.
- Monetization mismatch. Free-to-play live-service players and one-time-purchase buyers behave very differently for ad targeting (different inventory, different creator ecosystems, different conversion funnels). When the base is premium and the peer is F2P (or vice versa), a penalty fires AND the peer's activity component is capped — a live-service F2P game's huge CCU shouldn't dominate the composite against a premium one-time-purchase base.
- Abandoned-game penalty. Released games more than two years old with no recent review activity get a small reduction. Catches culturally-famous-but-dormant peers that ride historic recognition + follower count through the activity filter. Small enough that the peer isn't zeroed — still useful as a tonal reference — just not as an active targeting peer.
“Closest 10”. The Closest 10 percentile reads on Cohort benchmark use the top ten peers from this composite ranking within the Comparable-games cohort. Independent of the STRONG/ADJACENT verdict — Closest 10 is a math-top-10 by composite, while Core affinity is the audience-fit verdict. Most direct rivals show up in both, but they can diverge (e.g. a franchise sibling with low composite is in Core affinity but not Closest 10; a high-composite peer with different motivation is in Closest 10 but Adjacent on Competition).
Where it appears: the ranked list on Competition (released + upcoming, across tiers via the tier pills), the proximity map on Competition, the three base-vs-competitor cards on Crossover (radar, “Where your players also go” reviewer-overlap ranking, and tag-overlap bars), the Creative reference titles on Market Fit (using a different scoring lens — pure tonal fit, audience-blind), and the suggested-competitor pills on Monitor → Benchmarks.
How it's shown on screen. At a glance, each peer on Competition and Crossover carries a fit indicator — 1–5 dots plus a label (Strong / Good / Fair / Light / Weak fit) — combining the audience-fit tier (STRONG / ADJACENT), the composite, and the measured player-crossover lift into one bucketed read. Same dots and label on both pages for the same peer.
Why the number is called Competitive relevance, not Affinity. Expanding a peer reveals the full composite, surfaced as Competitive relevance. The rename is honest: the composite blends structural similarity (~⅓) with market currency (~⅔ — audience scale, live activity, momentum, recency, recognition), so it measures how strong a competitor a game is right now, not pure audience closeness. The genuine shared-audience signal — player crossover — sits beside it as Shared players: a separate behavioural check (do the same players play both?), never a score input.
Why a percentile, not “/ 100”. The IDF-weighted tag term structurally caps the composite near ~70 (median ~48), so a bare “65 / 100” reads as mediocre when it's actually top-tier. Instead of a denominator we show a percentile against the scored competitor set (“Top 6% match — stronger than 94% of competitors”), which self-contextualises; below ~10 peers it falls back to a fixed band (Top-tier / Strong / Moderate / Light). The component bars are grouped for legibility into Similarity (tags, genre), Audience & reach (scale, recognition), and Momentum (activity, velocity, recency).
How the Competition list is built
One ranked list of rivals across scale tiers — released and upcoming merged, defaulting to your tier with pills to widen — funnelled down from the whole catalogue.
Competition shows a single ranked list of rivals, narrowed from the catalogue by a funnel at the top of the page: all of Steam → games like yours (shared genre + distinctive tags) → your scale tier → the top peers ranked below. A histogram alongside it shows where that close-match cohort sits across all six scale tiers, your own tier highlighted.
The list itself:
- Direct rivals then Adjacent competitors. Peers are grouped Core affinity (STRONG — most direct rivals) before Adjacent affinity (ADJACENT — close enough to matter), divided inline, and ordered by the fit indicator then by Competitive relevance. Up to the top 50 render with expandable breakdowns. The released-peer set at your tier is the statistical baseline — every “vs Comparable” percentile across the app uses this cohort.
- Upcoming (pre-launch) rivals are merged into the same list, marked with an “Upcoming” badge rather than siloed in a separate section. The same audience-fit analyst ranks them, but with no reviews or CCU yet the AI verdict carries more of the signal and wishlists stand in as the anticipation proxy. They compete for launch-window attention (Next Fest, wishlist battles) and don't feed any percentile read.
- Tier pills widen the field. The list defaults to your own scale tier; toggling a higher tier shows who you'd compete with if you grew into it, with an inline note on how long that climb has historically taken. This replaced the old separate “if you grow” view — one list with a scale filter reads more cleanly than three siloed sections.
Every peer — released, upcoming, or in a tier above — runs the same audience-fit analyst (see Affinity above) and reuses the same cached audience-context pre-pass per base game, so a peer judged STRONG against your audience archetype is STRONG regardless of where it sits in the list.
Tier toggle on PMF cohort benchmark
The Cohort benchmark card on PMF lets you compare against an aspirational tier instead of your auto-detected one. The toggle rebuilds the cohort against the chosen tier; Closest 10 stays on your actual direct rivals.
The Cohort benchmark card on Market Fit (PMF) includes a tier-override pill in the card header. By default it shows your game's auto-detected tier; clicking it opens a dropdown where you can pick any of the six tiers to benchmark against. The toggle answers questions like “if I land in Hit, how would I look against that cohort?” — useful for aspirational planning, especially for pre-launch / early-stage games whose auto-detected tier reflects current scale but not target trajectory.
What the toggle changes: when you pick a non-default tier, the cohort itself is rebuilt against that tier — the percentile reads, median lines, cohort size count, and Comparable column on every metric row all recompute against peers at the chosen tier. The Comparable card gets an amber accent to signal “this isn't your default cohort”.
What the toggle doesn't change: the Closest 10 percentile reads stay on your actual direct competitors — your top-10 affinity peers, which are not tier-locked. The asymmetry is by design: “who are my real rivals?” doesn't change just because you're imagining a different scale. The Closest 10 card dims slightly and shows an inline “Unchanged by the tier toggle” note when an override is active.
What it's for: aspirational planning. The amber callout above the metric grid frames this explicitly — “use this lens for ‘if I land here, how would I look?’ planning, not your current performance”. The default tier (auto-detected) remains the honest read of where your game sits today.
Scope: the toggle only affects the PMF Cohort benchmark card. Audience-scale, Markets coverage, Pacing, and Sentiment percentile reads on their own tabs still use the auto-detected tier (extending the toggle to those surfaces is a candidate follow-up).
Why every metric shows multiple reads
Comparable games, Closest 10, and absolute scale answer different questions about the same number. They frequently disagree, on purpose.
Every metric row on the Cohort benchmark — and the headline reads on Overview's Snapshot and Audience widget — shows up to three side-by-side numbers. They come from three different peer sets that answer different questions:
- Comparable games — the broader peer set defined above (genre + tags + audience-size tier). Stage-coherent: same kind of game at roughly the same maturity. Answers: “How am I doing for a game like mine?”
- Closest 10 — the top ten peers by composite affinity: the games whose composite score puts them closest to your audience, at your scale tier and already released. Note this is ranked over the affinity list rather than picked out of the ranking cohort, so it overlaps heavily with that cohort without being literally its top ten. Answers: “How am I doing against my direct competitors by structural overlap?”
- Absolute scale — fixed bands calibrated against Steam's catalogue distribution (Pre-traction → Genre outlier). No peer comparison; just where this number sits in absolute terms. Answers: “How big am I really?”
The three reads frequently disagree, on purpose. A small pre-launch indie can be top quartile of comparable games (most are also small or dormant), below median vs the Closest 10 (the actual breakout games), and Small on absolute scale (still light in absolute terms). All three are correct; together they tell the honest story.
Closest 10 vs Core affinity — not the same thing. Closest 10 is the math top-10 by composite score. Core affinity is the STRONG tier from the audience-fit analyst on Competition. Most direct rivals show up in both lists, but they can diverge — e.g. a franchise sibling with a low composite is Core affinity but not in Closest 10; a high-composite peer with different purchase motivation is in Closest 10 but Adjacent on Competition. Closest 10 drives percentile reads (numerical comparison wants a stable peer count). Core affinity drives the displayed Competition list (audience judgment).
When the Closest 10 read is hidden: derived metrics (e.g. Estimated sales — derived from Reviews) and metrics where the comparison would be misleading (e.g. Price uses the recent-releases subset instead). The comparable-games and absolute reads are always shown.
How we measure trait distinctiveness
Each Steam tag's rarity across the catalogue — the rare ones become your selling points.
Steam tags · traits · selling points
Three words, one hierarchy — not synonyms. Steam tags are the raw player-voted descriptors on a game's store page (the platform feature); we say “Steam tag” only when we mean that mechanism. We surface those descriptors as traits — the neutral, product-voice name used across the app. The rare, distinctive traits — the ones worth putting in your store copy, trailer, and ads — are your selling points. Every selling point is a trait; not every trait is a selling point. Shared or generic traits are table stakes, not selling points.
On Market Fit (PMF), the Tag Distinctiveness view ranks each of your game's significant Steam tags by how rare it is across the platform. Rarer tags = clearer differentiation angles for your store-page copy, trailer cuts, and ad targeting.
The rarity score is grounded in how often each tag appears across the Steam catalogue. The intuition: a tag like "Indie" is on tens of thousands of games and tells a marketer almost nothing about positioning. A tag like "Tarot" is on a few dozen games and tells a marketer exactly where the game stands out. Our score scales rarity logarithmically, so very-common tags compress toward zero and very-rare tags score high.
The selling points shown at the top of Market Positioning (previously labelled "anchor traits") are your three highest-scoring tags after a small "vote-strength" adjustment — we balance "rare across the catalogue" with "strongly voted on this specific game" so a lightly-voted exotic tag doesn't outrank a well-established identity tag.
What we use it for: the selling-points headline on Market positioning, the "rare / moderate / common" colour-coding throughout PMF, and the cohort definition (which uses tag overlap to find peers).
How we read Brand IP (franchise signals)
Franchise and series membership from IGDB — pre-existing awareness and buying intent that trait-rarity math can't see.
When a game belongs to a known franchise or series, Market Fit surfaces it as a Brand IP badge above the niche-size verdict. The data comes from IGDB's franchise and collection records — e.g. a title flagged as part of “Star Wars” or a numbered entry in a series.
Why it's called out separately. Our distinctiveness and niche-size math is built on Steam tags, which describe what a game is — not who already knows the brand. A franchise audience carries awareness and purchase intent no tag captures, so a mid-distinctiveness game inside a strong franchise can out-convert a more “distinctive” unknown title.
How to use it. Weight Brand IP alongside the niche-size verdict, not instead of it. It's a qualitative flag, not a score — we deliberately don't fold it into the distinctiveness number, because franchise power varies enormously (a niche cult series vs a global IP) in ways tag data can't quantify. The same signal also feeds a small same-series bonus in the Competition affinity composite (see the Affinity section above).
Where it appears: the Brand IP row on the Market positioning card (Market Fit / PMF), shown only when IGDB has franchise or collection data for the game.
How we read category momentum
Release-volume change in each of your game's sub-categories — is the market around you expanding or thinning?
Category momentum on Market Fit compares how many games launched in each of your game's significant sub-categories (Steam tags) over the last 12 months versus the prior 12. Rising = more games launching in that sub-category (expanding supply and audience surface); cooling = fewer.
We only count sub-categories with enough releases in a window to be meaningful (a volume floor), so a tag with a handful of launches doesn't read as a dramatic swing on tiny counts.
What it tells you. A net-rising profile means the surrounding market is growing — more competition, but also more discovery surface and audience signal to ride. A net-cooling profile means fewer new rivals but a thinning pipeline; positioning may need to lean on retention and reach over discovery. Note this is release supply — where developer attention is flowing — not a direct read of audience demand.
Where it appears: the Category momentum card on Market Fit (PMF); it's the data spine behind the Market dynamics narrative on the same page.
Scale & audience
Used across Research · Monitor
How we classify scale (the bands)
Six fixed absolute bands — Pre-traction → Genre outlier — anchored to the actual Steam catalogue distribution rather than to your cohort.
On most metric rows you'll see a small label like Small or Major below the percentile. This is the absolute scale band — a fixed-threshold reading of how big your game is, regardless of cohort percentile. The six bands, from light to heavy, are:
- Pre-traction — minimal audience signal across followers, wishlists, MAU, and reviews.
- Small — past pre-traction but still light by catalogue standards.
- Moderate — meaningful audience, not yet established.
- Established — solid mid-catalogue presence.
- Major — large audience by catalogue standards.
- Genre outlier — top of the catalogue, audience well above peers.
The bands matter because Steam's catalogue is heavily skewed — most releases in any major genre sit in the long tail. A percentile against the full genre rewards being “above the abandoned tail” even when your absolute scale is still tiny. The bands solve this by anchoring to fixed thresholds calibrated to the actual catalogue distribution — they don't move with your cohort.
The bands and the comparable-games percentile disagree on purpose. A small game can be top 10% of comparable games (its size-and-niche peers are also small) while being Small in absolute terms. Both reads are correct — they answer different questions: “how am I doing for a game like mine?” vs “how big am I really?”.
How we size the audience: in your tier vs total reach potential
Two pools of monthly-active players engaged with games like yours — one bounded to your tier, one spanning all sizes — each deflated for cross-game overlap.
The Audience tab and the Overview audience widget show up to two numbers, both built the same way — summed monthly active users (MAU) across games similar to yours, deflated for overlap:
- Active audience in your tier — MAU summed across comparable games at your audience tier (same genre + shared distinctive tags + same scale band). This is the realistic field you compete in right now.
- Total reach potential — the same genre + tag cohort with the tier filter dropped, so it spans every similar game regardless of size, including the genre's biggest titles. This is the ceiling — everyone active across games like yours, not accounting for your current size. It's shown only when it's meaningfully above the tier number (for Hit-tier games the two are effectively the same, so we show one).
A few notes on why we pick each ingredient:
- Why MAU, not followers or wishlists: MAU is the strongest signal we have for "still on Steam, actually playing this kind of game." Followers can include long-dormant accounts, and wishlists are a modelled estimate of lifetime intent rather than current activity — so for a "who's active now" read we prefer MAU.
- Why a total, not a median: medians under-count because they discard the breakout peers' real audience contribution. Adding up MAU across the pool captures the full reach.
- Why we deflate: a player who's into a niche typically plays several comparable games concurrently — they show up in multiple peers' MAU. Without deflation we'd double-count the same person many times. We apply the same overlap deflator to both numbers so they stay directly comparable. It's hand-tuned against external genre-audience estimates to land in a realistic order of magnitude — a heuristic, not a measurement, and a known refinement target (we can calibrate it per-cohort from reviewer-overlap data).
Realistic capture rate applies to the in-your-tier number: a successful campaign typically converts a small single-digit percentage of that pool into wishlists, follows, or purchases. The total reach potential is a ceiling, not a target — you won't capture a meaningful slice of the genre's biggest titles' players.
Why your tier pool can sit below your own wishlists. At smaller tiers, the in-your-tier pool is built from small peers' MAU and can land below the game's own (accumulated) wishlist count — wishlists are lifetime intent, while MAU is current activity in a small niche. That's exactly why we surface the total reach potential alongside it: it shows the genre-wide headroom your tier number doesn't. Two patterns make this most visible — IP-driven titles (a franchise halo pulls interest from across the platform) and buzzy pre-launch indies (fresh wishlist intent vs comparable games' decayed present-day MAU).
How we estimate wishlists
Modelled by a calibrated model from a game's Steam signals and benchmarked against external ground-truth, reported as a point estimate with a low–high confidence range.
Steam doesn't publish wishlist counts publicly. Our wishlist figures come from a calibrated model that infers total accumulated wishlists from a game's Steam signals and is benchmarked against external ground-truth wishlist data, so the output tracks real-world levels rather than applying a single fixed ratio to one input. The estimate still varies with release state, audience size, time since release, and genre — pre-release and recently launched titles behave differently from mature catalog games.
Treat the figures as directional — they capture the right order of magnitude, and each carries a low–high confidence range rather than a single exact number. Day-over-day deltas come from the same model applied to the previous snapshot.
Where it appears: the Est. Wishlists scorecard tile and chart on Monitor → Growth, the Est. Wishlists tile on Monitor → Dashboard, and the wishlist count on Research → Overview / Audience reach.
How we estimate DAU and MAU
Estimated from peak concurrent players using genre-calibrated multipliers benchmarked against industry data.
Steam exposes peak concurrent player counts (CCU) but not daily or monthly active user counts. Our DAU and MAU estimates are derived from peak CCU using genre-calibrated multipliers benchmarked against industry data — roughly DAU ≈ CCU × 7 and MAU ≈ CCU × 28 as a baseline, with per-genre adjustments. Genres with longer session patterns (strategy, RPG) have higher MAU-to-DAU ratios than fast-session genres (action, casual).
These signals only make sense once a game is live. Pre-launch titles have no CCU yet, so DAU and MAU are hidden on scorecards and charts for unreleased games rather than rendering as zeros or placeholders.
Where it appears: the Est. MAU scorecard tile on Monitor (Dashboard, Growth), the Est. DAU and Est. MAU charts on Monitor → Growth, and the MAU column on the PMF Cohort benchmark.
How we recommend channels
AI recommendations for paid media, influencer categories, and marketing keywords — grounded in your game's positioning, with keywords scored for distinctiveness.
The Channels tab recommends paid media platforms, influencer categories, and marketing keywords for reaching your game's audience. The recommendations are generated by the AI synthesis from your game's positioning — its genre, Steam tags, audience profile, and how comparable games are marketed — not from per-channel performance data, which Steam doesn't expose.
Each media channel carries a priority (high / medium / low) reflecting how well the platform's audience matches your game's profile. Influencer categories point at creator niches whose audiences overlap yours.
Marketing keywords are cross-referenced against trait distinctiveness: keywords that map to your rare, distinctive tags are flagged as stronger positioning hooks than generic, saturated ones — the same rarity scoring described in How we measure trait distinctiveness.
Treat these as a directional starting shortlist, not a finished media plan — qualitative recommendations to validate against your own channel testing and budget.
Where it appears: the Channels tab in Research.
Sales, revenue & forecasting
Used across Monitor · Forecast
How we estimate sales
Steam doesn't publish unit sales — owners are estimated by a calibrated model benchmarked against external ground-truth ownership data, reported with a low–high confidence range.
Steam doesn't expose ownership or sales data publicly. Our sales/owner estimates come from a calibrated model benchmarked against external ground-truth ownership data, so the output tracks real sales scale rather than applying a single fixed multiplier to review counts. The model blends multiple Steam signals — audience size, release age, price tier, review behavior and velocity, and sentiment — so different audiences that convert attention to sales at different rates are accounted for. Free-to-play titles show an estimated-players (install) figure instead of units sold, since they have no unit sales.
Treat the resulting figures as directional ("hundreds of thousands of units" vs "millions"), not precise counts — read the low–high confidence range alongside the point estimate.
Where it appears: the Est. Sales scorecard tile and chart on Monitor (Dashboard, Growth, Revenue), the Estimated owners row on the Cohort benchmark card on Market Fit (released games only — hidden for pre-launch), and the "Realised" funnel layer on the Audience reach card (also hidden pre-launch since reviews don't apply yet).
How we estimate revenue
Estimated sales × current US price — a gross revenue ceiling that ignores regional pricing, sale discounts, Steam's revenue share, and refunds.
Estimated Revenue is computed simply as estimated sales × the current US sticker price. It's a gross ceiling, not net publisher revenue — the figure intentionally ignores several real-world reducers that we don't have public data for at the per-game level:
- Regional pricing — games are commonly 40–60% cheaper in developing markets (LATAM, SEA, CIS), so per-sale revenue is meaningfully below US-price assumptions in those regions.
- Historical discounts — Steam's continuous sale rotation means a non-trivial share of sales happen at 30–70% off list. We use current list price to keep the comparison stable across snapshots; actual realised price is lower.
- Steam's 30% revenue share — publishers receive 70% of gross sales (less above $10M/$50M tiers for large developers). Subtract this for a net publisher revenue read.
- Refunds — typically 5–10% of gross sales depending on price tier and player retention. We don't have per-game refund data, so this is unaccounted for.
A reasonable rule of thumb: actual realised gross revenue is roughly 30–50% below the Est. Revenue figure, and net publisher revenue is another ~30% below that. Use the figure for directional sizing — "is this a $1M game or a $50M game?" — not for financial forecasting.
Avg Price Paid on the Revenue tab divides total estimated revenue by total estimated sales. If significantly lower than the current sticker price, it suggests the game has had deep discount cycles or permanent price cuts that drove conversion volume.
Where it appears: the Est. Revenue scorecard tile on Monitor (Dashboard, Revenue), the Estimated Revenue Over Time chart on Monitor → Revenue, and the Avg Price Paid tile on Monitor → Revenue. All three are hidden for unreleased games — pre-launch titles have no realised sales yet, so the derived revenue figure would be structural noise.
How Pacing works (launch-aligned)
Everything is measured by days-from-launch, not calendar date — so you're compared at the same point in the cycle as your peers, not against their fully-accumulated current totals.
Pacing answers “am I ahead of where comparable games were at this point in their launch?” The key idea is launch alignment: every series is plotted on a days-from-launch axis (Day 0 = launch), so your Day 30 is compared to each peer's Day 30 — never to where a long-released peer sits today.
Why Forecast compares you against fewer games than Research. Both start from the same candidate pool and both are filtered by the same audience analyst — Forecast just zooms in. Research answers “where do you rank?”, which needs the whole comparable field or a percentile means nothing. Forecast answers “what path might I follow?”, which needs your ~20 closest look-alikes traced launch-aligned — matched at the same point relative to launch, before it or after it — a tighter, complete set, or the projected curve is just noise. Ranking wants breadth; a trajectory wants your nearest analogs. One nuance worth knowing: the two are selected differently — the ranking population by tag-rarity overlap, the closest look-alikes by affinity score — so the closest 20 are not simply the cohort's top 20, and the two lists can differ in membership even though neither describes a different world.
- The cohort band is the 25th–75th percentile (with a median line) of your 20 closest competitors at each days-from-launch point, drawn only across the window where a stable panel of at least 3 of them can be followed end-to-end — the same games at every point, so the band can't “bump” when a peer's coverage starts or stops mid-window. Where coverage is thinner than that we don't draw a band rather than guess, and the chart says how far back the panel reaches. For cumulative metrics each peer's last-known value is carried forward across days it wasn't sampled.
- The comparable overlay lets you drop a specific released game onto the same axis to see its actual launch curve under yours — useful for “did I track like {that game} did?”
- Two ways to read “where you stand”. The card's Today verdict is arc-aligned — your current value vs where your peers were at your current days-from-launch — so it agrees with the chart. (A point-in-time read, you vs peers' current totals, can look very different for a pre-launch game whose closest peers are already released and have years of accumulation — that comparison isn't the pacing question, so the card doesn't lead with it.)
- Who you're compared against (and why never “all of Steam”). Most Steam games are tiny or inactive, so a percentile against the whole catalog — or a whole genre including its long tail — flatters every seriously-marketed game into the “top 5%”. Pacing therefore uses three labeled reference classes: your 20 closest competitors (the race you're in — spoken as ranks, “ahead of 14 of 20”), games like yours (same genre and same scale tier, at the same point in their launch — the headline verdict), and games your size across Steam (a context strip). Where a tier slice is too thin we fall back to the all-sizes genre pool and label it explicitly.
- “Games that looked like you” (trajectory twins). Rather than projecting a model forward, we find the cohort games whose level at your exact stage was most similar — nearest by ratio (preferring ~1.8×, widening to ~3× only when too few match), same genre, restricted to games with a similar audience to yours where our player-crossover data allows, and preferring similar price points — and report the distribution of their actual subsequent outcomes: wishlists by launch week, first-month sales, first-year sales. The closest matches are named on the card, with the matched range disclosed. The fan of real outcomes is the forecast; it carries its sample size and is suppressed entirely when fewer than 8 genuinely similar games exist.
- The two futures & tier crossings. Right of “today” the chart draws two dashed paths: if you keep this pace (your own last 14 days, continued) and if you grow like a typical game of your genre from your level — the latter chains the median within-game growth between checkpoints (each ratio measured only among games observed at both ends, so the path can't artificially shrink), applied on top of your value: being ahead keeps you ahead. Beyond the last measured checkpoint (genre growth data runs out at ~7 days before launch for wishlists, and at one year for sales) the final segment's growth rate is carried forward to the horizon so the path reaches launch rather than stopping in a stub; when even that leaves too little runway to be meaningful (roughly under three weeks), the genre path is omitted and only the pace path is drawn. Where a path reaches a tier threshold, a vertical tick marks the crossing day. The window matches the game's state: pre-launch charts end at launch (the finish line where wishlists convert), released games start at launch and show sales/revenue, and games with no announced date run one continuing build-up forecast.
- Projected launch sales (pre-launch). The two paths' wishlists-at-launch are translated into a first-month sales estimate using the same wishlists-to-sales heuristic as the Revenue Forecast — preferring the measured rate of your trajectory twins (their first-month sales ÷ their launch wishlists) and naming the Revenue Forecast scenario it sits nearest, so the two tools never tell contradictory stories.
- Event markers. Steam seasonal sales and Next Fests are shaded directly on your timeline so festival spikes aren't misread as organic momentum.
- The scale ladder & how long climbs take. Six scale tiers (Long tail → Visible → Emerging → Mid → Strong → Hit), each defined by fixed wishlist / follower / review thresholds — whichever you clear first sets your tier, and the card names that binding metric. The climb figures are empirical, not a forecast: across two years of daily history we measure every game that observably climbed from your rung to the next, and — the honest denominator — every game we followed at your rung for a full year, whether it climbed or not. The population is conditioned on games that climbed into the rung inside our window (a game on the move, like yours), excluding the enormous stock of dormant listings that have sat at a level for years and would otherwise drag the odds down. That yields both numbers the card shows: “X% make it within a year” (e.g. ~35% of actively-growing Emerging-scale games reached Mid on wishlists within a year) and “those who did typically took N months”. Real history with survivorship stated, deliberately not “when you will arrive”.
How Timing works (release radar)
A week-by-week count of how many games are dated to release across all of Steam and within your genre, each with its five most-wishlisted titles.
Timing answers “how crowded is each week ahead?” — for a launch, a demo, a trailer beat, or a discount. For every week from 8 weeks back to 9 months ahead it shows two counts side by side: how many games are dated to release across all of Steam, and how many of those share any of your game's genre tags (a game like Enshrouded counts against Open World and Survival). Only games with a concrete (day-level) release date are counted; titles listing only a quarter or year are excluded rather than guessed, so future weeks read as dated launches, not every rumoured one.
- All-Steam vs your genre. The all-Steam count spans every
type='game', canonical app dated in the window. The genre count is the subset whose primary tag is one of your game's genres — always a subset of the total, so the genre share (%) is a clean read of how much of the week's field is your direct competition. - Top 5 by wishlists. Each week lists the five most-wishlisted titles for both lenses, ranked by estimated wishlists (current followers break ties) — the launches most likely to soak up attention that week. Chips are tinted by scale tier.
- The wake. The trailing 8 weeks of releases are shown too — a big launch from three weeks ago still soaks up reviews and attention, which matters when you're picking a demo or announcement week.
- Your date. If your game has an announced day-level date, its week is marked with a same-week read of how many games — and how many in your genre — land alongside you.
- A flag, not a pick. Timing surfaces the field; it doesn't pick your date. New dates get announced all the time — the call stays yours.
How the Revenue Forecast works (pre- and post-launch)
Pre-launch: wishlists × conversion × monthly decay, after Steam's tiered royalty and refunds. Post-launch: trailing 14-day daily-revenue baseline projected forward with the same decay curve.
The Forecast → Revenue tool runs two distinct models depending on whether the game has launched. Both share the same monthly decay tail; what differs is what feeds the first month.
Pre-launch
- Wishlist-to-sales conversion: at launch, a percentage of wishlisters buy in Month 1. Industry rates range roughly 5% (niche or unknown IP) to 33% (high anticipation, established franchise). The five scenarios (Very Conservative through Strong) span this range so you can read all of them at once.
- Launch discount boost: a launch discount raises conversion. Industry data suggests a 10% discount boosts conversion by roughly 20%, scaling to ~60% at a 30% discount. The slider adjusts conversion accordingly while reducing per-unit revenue.
- Pre-launch marketing budget (eCPW): effective cost per wishlist, used to convert a pre-launch ad budget into added wishlists. The base range is $1.00–$3.50 per wishlist — paid ads also drive organic uplift (Steam algorithm visibility, word-of-mouth, store-page traffic), giving roughly a 2× organic multiplier baked into the range. Longer pre-launch runway lowers eCPW further: 3–6 months gets a 10% reduction, 6–12 months 20%, and 12+ months 30% — more time means more organic compounding.
- Post-launch marketing budget (eCPI): effective cost per install, used to convert post-launch ad spend into Month 2–12 unit volume. Base range is $3.00–$8.00 per install, also factoring in the ~1.5–2× organic uplift from reviews, algorithm ranking, and visibility. Budget spreads evenly across months 2–12.
- Early Access: EA titles see a higher Month 1 concentration but a thinner tail — many players wait for the 1.0 release. The EA toggle swaps the monthly decay curve to reflect this.
- Monthly decay curve: Month 1 sales distribute over 12 months along an empirically-calibrated curve — derived from ~5,000 games with a full 12-month post-launch history (monthly unit deltas, normalized to Month 1, median across the cohort). The shape is a smooth monotonic decay: the median game shows no sale-driven spikes, so Steam seasonal sales are modeled separately as explicit discount events rather than baked into the base curve. The curve is scale-tier aware — indie titles (<1K reviews) tail thinner (Y1 ≈ 1.42× M1), AA titles (1K–10K reviews) sustain longer (Y1 ≈ 2.18× M1), and the all-paid default sits at Y1 ≈ 1.57× M1. Standard ratios (relative to M1): 1.0, 0.147, 0.089, 0.064, 0.053, 0.043, 0.038, 0.034, 0.031, 0.027, 0.024, 0.022. Early-Access ratios run thinner since many players wait for 1.0, yielding Y1 ≈ 1.45× M1. The “Launch-month share of year 1” slider defaults to this curve's implied share for your scale tier — the identical starting curve Scenarios uses — so the two tools' year-one totals agree out of the box. They can still legitimately differ once you dial the slider, or when Scenarios has enough Trajectory Twins to calibrate its tail from their measured Year-1÷Month-1 multiple.
- Multi-edition pricing: when a Deluxe edition is enabled, the price input becomes a weighted average of Standard and Deluxe prices based on their respective sales shares.
- Post-launch sale schedule: when enabled, models Steam seasonal sales at months 3 (20% off), 6 (33% off), and 12 (50% off). Remaining wishlists convert at a reduced rate during sales, adding long-tail revenue.
Post-launch
- Baseline: trailing 14-day average of daily gross revenue, derived from cumulative-revenue deltas in BigQuery's daily snapshots.
- Decay shape: the same monthly ratios pre-launch uses, anchored on Month 2 — we assume the trailing 14-day average already represents post-burst revenue, so the projection underweights the M1 burst (the safer error for already-launched games).
- Confidence: labelled high / medium / low based on days of available data and the coefficient of variation of the trailing 14-day window. Games with < 14 days of BQ history get a low-confidence label.
- Refinements waiting on BQ backfill: peer-cohort-anchored decay (using your affinity peers' actual revenue shape), genre-calibrated monthly multipliers, and reverse calculation ("what conversion or price gets me to $X year-1?").
Shared model
- Net revenue: all figures are after Steam's tiered royalty (30%, dropping to 25% above $10M, 20% above $50M for large developers), refunds (10% default, slider range 0–25%), and any active launch discount.
- Refund rate: default 10% — industry average for PC games. Refunds apply to revenue after Steam's cut.
- 5-year projections: year-over-year decay of 50% — each year generates 50% of the previous year's revenue. Yields lifetime ≈ 1.9× Y1, consistent with public catalog data showing most sales land in Y1 with a modest multi-year tail. The cumulative column shows total lifetime earnings.
Where it appears: Forecast → Revenue Forecast, on both the per-game detail pages (pre-launch wishlist calculator and post-launch trailing-revenue projection). The tool auto-detects which mode to render from releaseStatus.
How Scenarios works (what-if planning)
Starts from your real Pacing trajectory, then turns marketing budget, a release-date shift, and a launch discount into projected wishlists, launch sales, and Year-1 revenue — and inverts that to answer 'what would it take to hit X?'
The Scenarios tool is the planning layer on top of the baseline tools. It reads your current trajectory from Pacing (current wishlists + your 14-day pace) and your economics from the Revenue Forecast, then lets you pull levers and watch the outcome move in real time. Every projection is a pure recompute — no model call per slider.
- Baseline. Pre-launch, wishlists-at-launch = your current wishlists + your 14-day pace carried to the launch date. Post-launch, your trailing monthly unit run-rate carried forward on the decay tail.
- Marketing budget → wishlists / installs. Pre-launch spend converts at an effective cost-per-wishlist (eCPW, $1.00–$3.50 including organic uplift, lower the longer your runway); post-launch spend at an effective cost-per-install (eCPI, $3–$8), spread over months 2–12. These are industry priors, labeled as such.
- Diminishing returns. Channels saturate, so spend doesn't convert at a flat rate — the harder you concentrate a budget into a short window, the more each marginal wishlist costs. The model raises your effective eCPW with daily spend intensity:
effective eCPW = base eCPW ÷ efficiency, where efficiency decays smoothly from ~100% at low daily spend toward a floor of ~55% at very high daily spend (a capped haircut, never a cliff). Worked example at a $2.00 base eCPW and a $500k budget: spent over 15 days ($33k/day → ~76% efficiency) it converts at ~$2.63/wishlist for ~190k wishlists; spread over 90 days ($5.6k/day → ~94%) it converts at ~$2.13 for ~235k — the same money buys ~45k more wishlists because it isn't saturating the channel. This is on by default; the knee and floor are industry priors (no per-game spend data exists), so treat the magnitude as indicative. - Release-date shift. Moving the date changes the runway: more time means more pace-driven organic wishlists and a lower eCPW (more room for paid spend to compound into organic).
- Wishlists → sales → revenue, cohort-calibrated. Two of the numbers come straight from your trajectory twins — comparable games matched by genre, scale tier, audience fit and price. (1) Conversion: their measured first-month sales ÷ launch-week wishlists. When a game's twin set is too thin to measure its own rate, conversion falls back to a calibrated genre×scale-tier base rate — the median first-month sales ÷ pre-launch wishlists of ~33K full-arc games, looked up by the game's genre and wishlist tier (backing off to tier-only, then a global median, when a genre×tier cell has too few games). Only if even that table is unavailable does it use the flat 12% prior. The base rate is the same quantity the twins measure, just over a broader cohort — so the fallback is empirical, not a guess. (2) Post-launch decay: their measured Year-1÷Month-1 multiple rescales the empirical decay curve's tail, so a genre that sustains (or fizzles) after launch is modeled from real comparables rather than a generic shape. Tiered Steam royalty and genre refund rate match the Revenue Forecast — so the two tools never contradict. A launch discount lifts conversion (capped at 50%) and reduces the launch-month price. Marketing cost rates (eCPW / eCPI) remain industry priors.
- Goal-seek. Set a target (wishlists by launch, Year-1 net revenue, or launch-month sales) and the model inverts the chain: the wishlists-at-launch it implies, the gap beyond your current pace, and the budget (or daily pace, as a multiple of your current) to close it.
- Reach a tier (aspirational). Instead of a number you can pick a scale tier to reach — the goal resolves to that tier's wishlist threshold and runs the same goal-seek, so you see the gap and the pace it would take. Two pieces of target-tier context ride along: the wishlist→sales conversion games at that tier actually get (from the same genre×tier table), and a preview of the peer field you'd be climbing into (drawn from Competition's compare-up set). This is deliberately framed as an aspiration — the projection band on the charts is never re-tiered; only a target line and the effort to reach it are added. It's a preview of the company you're climbing toward, not a forecast that you will.
- 1:1 comparison. Overlay any released game's actual launch curve to sanity-check your scenario against a real outcome.
How growth projections work (Pacing & Growth charts)
Recency-weighted regression on a short window, then exponentially-dampened slope so the projection curves and flattens instead of extending as a straight line — a recent burst rarely sustains 30 days at equal pace.
The 30-day projection lines you see on Pacing (per-card sparklines and the “Forecast” pills) and on Monitor → Growth (wishlist, follower, sales cones) share a single forecast routine. Two stages, both intentionally simple:
Stage 1 — estimate the current slope
- Training window: last 10 valid data points. Short enough that the slope reflects the current direction rather than the prior month's average; long enough to be stable.
- Recency weighting: weighted least-squares fit with a 5-day half-life — the newest point gets weight 1, a point 5 days older gets 0.5, 10 days older 0.25, and so on. Recent days dominate the slope estimate without ignoring the prior week entirely.
- Rejection rules: the routine returns no projection when the series has fewer than 4 valid (positive, non-null) points, or when the training-window values are essentially flat (max − min < 1). Degenerate inputs produce uninformative cones that read as noise.
Stage 2 — dampen the slope over the horizon
- Why dampening: a +0.5 pts/day trend over the last 10 days does not mean +15 pts in 30 days. Empirically game metrics revert toward calmer pace within 1–2 weeks — a recent burst cools. Extrapolating a fitted line straight forward overstates 30-day outcomes consistently.
- The math: the trained daily slope
mdecays asm · exp(−d/τ), whereτis derived from a 10-day half-life. The projected displacement at daydis the integralm · τ · (1 − exp(−d/τ))— a curve that asymptotes tom · τrather than running away. - Net effect: a 30-day projection lands at roughly 40% of the naive linear extrapolation. The sparkline visibly curves and flattens; days-to-milestone calculations respect the asymptote (milestones beyond it return null rather than “you'll get there in 800 days”).
Confidence band
- Width: derived from the weighted residual standard deviation of the regression fit (±1.5σ ≈ 87% interval under a normal-residual assumption). The band widens with horizon — √d scaling so “in 7 days” is tighter than “in 28 days”.
- Framing: read as a fan of plausible values, not a prediction. The dampened forecast line is our best directional read; the cone says how much noise sits around that read.
What this means in plain English: the projection answers “where am I heading at my current pace, assuming that pace cools the way real game metrics do”. Not “where will I literally be in 30 days” — no forecast can answer that. It's a directional read for planning, not a target.
Where it appears: Pacing (the deep-dive card's rank forecast and “Forecast” pill), and Monitor → Growth (wishlist, follower, and sales projection cones, toggleable). All share src/lib/forecast.ts.
Reviews, sentiment & language
Used across Monitor
How we read review score & volume
The headline review reads — positive review %, the Steam rating tier, review velocity, and review rate — and what each one means.
The Reviews tab tracks several signals derived from a game's Steam reviews. None of them is modelled — they come straight from Steam — but they're easy to misread, so here's what each one is:
- Positive review % — the share of a game's reviews that are positive. This is the single number behind every “approval” read in the app.
- Steam rating tier — Steam turns the positive review % into a named label: roughly Overwhelmingly Positive (95%+), Very Positive (80%+), Mostly Positive (70%+), Mixed (40–69%), Mostly Negative (20–39%). The top “Overwhelmingly” tiers also require a minimum review count. Crossing into “Very Positive” or higher meaningfully improves a game's store visibility, which is why we mark the date a game crosses a tier.
- Review velocity — how fast new reviews are arriving (recent vs prior window). A live read on whether discovery is accelerating or cooling; a sustained drop tends to decay Steam's algorithmic visibility.
- Review rate — the share of owners who leave a review (reviews ÷ estimated sales). A read on how vocal a community is — useful context when comparing raw review counts between games of different sizes. Because it divides by an estimate, treat it as directional.
Where it appears: the Reviews tab on Monitor (score card, positive review % chart, score-threshold timeline, review-rate tile, reviews-by-language). The cohort percentile verdict at the bottom of the tab compares these against comparable games.
How we read review language
Review language is the best publicly available proxy for geographic audience distribution — it reflects who's reviewing, not the full player base.
The Audience by Language chart on Monitor → Growth is derived from the language field of a game's Steam reviews. Each review carries a language tag set by Steam from the reviewer's account language, so the language mix of reviews gives us a proxy for where the reviewing audience comes from. The chart shows both the share of reviews per language and the positive-review ratio within each language, so you can see at a glance which markets are engaged and which are happy.
The proxy has known biases: English-speaking players are more likely to leave reviews even when they're not native English speakers, and review-leaving rates vary by market (Chinese and Russian markets tend to over-index for review-leaving relative to their actual share of buyers). Treat the chart as directional — a country with X% of reviews probably has a similar share of active players, but not necessarily of total ownership.
Based on all reviews to date, deduplicated per review — an all-time audience-geography read. A recency window would shrink the sample for slow-reviewing games without changing the mix much, so we keep the full history for a stable picture.
How we score sentiment
The numeric signal is Steam's positive-review ratio; the prose verdict and themes are extracted from review text by a language model.
Sentiment on Monitor combines two layers. The numeric base is Steam's positive review ratio — the share of recommended reviews divided by total reviews. That's the same number Steam itself uses to bucket games into the Overwhelmingly Positive / Very Positive / Mostly Positive / Mixed / Mostly Negative / Overwhelmingly Negative bands you see on store pages, with the bucket thresholds at 95% / 80% / 70% / 40% / 20%.
The prose verdict, themes, and classified-feedback list sit on top of that and come from model analysis of recent review text. The model is given a representative sample of recent positive and negative reviews and asked to extract the top themes on each side, an overall sentiment summary, and per-review category tags (e.g. “performance”, “story”, “controls”). The prose verdict and themes are model-generated over real review text — directional, not exact, and cached for 24h on a per-game basis.
Pre-launch + no-reviews handling. The Sentiment tab refuses to render anything if the game is pre-launch or has zero reviews — both states would produce structurally empty inputs to the sentiment flow. The Reviews tab does the same.
Where it appears: the Sentiment tab — overall score gauge, positive/negative theme columns, and classified-feedback breakdown.
How we read Twitch streaming
Live streamer counts, viewer concentration, and clip momentum — read against fixed viewer-tier thresholds calibrated to streaming-economy realities.
The Twitch tab queries the live Twitch API for streams of the game right now and recent clips. We surface three reads on top of the raw data: who's streaming the game (top streamers list), how the audience is concentrated by language (donut chart), and what's resonating in clips (top clips this week).
The streamer-tier breakdown classifies live streamers into three tiers based on current viewer count on this stream:
- Top tier — 1,000+ viewers. These are the streamers whose decision to play (or drop) your game moves audience numbers visibly. Difficulty to land is high, but a single feature delivers measurable wishlist / sales bumps.
- Mid tier — 100–1,000 viewers. The most cost-effective outreach target. Often more responsive to direct outreach than top-tier; the aggregate impact of 10 mid-tier streams typically exceeds one top-tier.
- Small / micro — under 100 viewers. Long-tail discovery layer. Individual impact is modest but the audience is highly engaged and frequently plays smaller / indie titles. Worth scaling outreach to via partner programs (PressEngine, Keymailer) rather than 1:1.
The streamer-tier breakdown is grounded in the live snapshot, so it shifts as streaming patterns shift through the day. Treat it as directional — the tiers describe where the game's streaming attention sits *right now*, not its long-term Twitch profile.
Why Twitch (and not just CCU). Steam CCU measures players actively in the game. Twitch viewer count measures players actively *watching others play* — a more sensitive top-of-funnel signal for discovery and hype-cycle reads. The two often diverge: a game can have steady CCU but cooling Twitch (long-tail), or surging Twitch with flat CCU (new audience discovering the game).
Where it appears: the Twitch tab — live viewers / streams scorecards, top streamers list, top clips gallery, language pie chart, streamer-tier breakdown.
Trends (genre-level)
Used across Trends
How we build a genre cohort
Trends operates on a Steam tag, not a Steam genre. The cohort is the set of games where that tag is top-3 by user votes.
The Trends section is keyed to user-voted Steam tags (Deckbuilding, Roguelike, Souls-like, etc.) — much more granular than Steam's flat 12-genre official list (Action, RPG, Strategy). Tags are the unit marketers actually research.
Primary cohort — games where the target tag is one of the top 3 most-voted tags on the game's Steam page. This is the default rendering pool: it excludes games where the tag is incidental (e.g., a 4X game with a single "Roguelike" tag vote shouldn't appear in the Roguelike cohort).
Secondary cohort — games where the tag appears anywhere in the tag data. Used internally for breadth in white- space and audience-crossover analysis, where being more inclusive is the right tradeoff.
The cohort size is shown in the dashboard header. Cohorts below 100 games render a "limited data" banner — small cohorts mean noisier reads on every downstream metric.
How we pick which genres get a dashboard
37 curated genres ship a full /trends dashboard; Roguelike is open as a free demo, the rest are gated. The same list bounds the Monitor genre matcher.
Steam has roughly 400 user-voted tags. Not all of them are useful as markets to read — many are aesthetic ("Atmospheric", "Pixel Graphics") or structural ("Singleplayer", "Online Co-Op"), better treated as descriptors than as genres. We hand-curated 37 tags that read as coherent markets and ship the full per-genre dashboard for each. The canonical list lives in src/lib/trends-curated-genres.ts.
Selection criteria. A tag earns a dashboard if it (a) has a meaningfully large cohort (typically 500+ games), (b) reads as a market a marketer would research as a unit (e.g. "Roguelike" yes, "Singleplayer" no), and (c) has an iconic exemplar with good Steam library_hero artwork for the card backdrop.
Roguelike free demo. /trends/roguelike and all its sub-tabs are open to logged-out visitors so prospects can experience the full per-genre stack before signup. Every other slug routes logged-out visitors to the marketing landing.
Used elsewhere. The same curated list bounds the Monitor genre-benchmark widget — we only return a matched genre that actually has a dashboard, so the deep-link never produces a dead route. A game whose top tag is something narrow like "Dialogue Heavy" matches against its next-highest curated tag (typically a broader genre like Horror or Adventure) rather than producing a broken link to a non-existent dashboard.
How we classify lifecycle stage
Five stages from Emerging to Fad-decay, derived from wishlist trend + release cadence + owner concentration. Sliced by tier.
Each genre is classified as one of: Emerging, Growing, Mature, Declining, or Fad-decay. When neither the wishlist trend nor the release-cadence YoY signal can be computed (e.g. a brand-new genre tag, or a window where the BQ snapshot history is too thin), the masthead falls back to Unknown rather than guessing.
The classifier blends three signals:
- Wishlist trend — change in cohort-aggregate wishlists over the recent 90 days vs. the prior 90 days. Captures whether marketer demand is accelerating or cooling. Only emitted when 180 days of history are available.
- Release cadence YoY — count of cohort games released in the last 12 months vs. the prior 12 months. Captures supply-side activity.
- Top-10 owner-share trend — change in owner concentration among the top 10 cohort games over 90 days. Rising concentration = winners locking in; falling = fragmenting. Used as the tiebreaker between Declining and Fad-decay.
Each signal is also computed per tier bucket (Hit + Strong / Mid + Emerging / Visible + Long-tail), so a genre can read as Mature at Tier 1 and Emerging at Tier 4 simultaneously — exactly the nuance indies need.
v1 thresholds are calibrated as starting points; we will retune them after classifying the first 20 production genres. The fourth signal the brief calls for (month-6 CCU retention as a Fad-decay tiebreaker) ships in a later cut — its per-game release-date join roughly triples query cost.
Data-coverage caveat. The wishlist-trend signal is a percentage delta between three time anchors (now, 90d ago, 180d ago) computed from SUM(estimated_wishlists)across the cohort. If the recent end of that window is materially less covered than the baseline (e.g., during a backfill where many games are missing recent snapshots), the sum on the recent side collapses and the delta reads as a sharp contraction even when nothing has actually changed. We deliberately suppress the historical end (wlTrend only emits when the full 180-day baseline is available) but don't yet guard against the recent end. A coverage-gate that fails to Unknownwhen recent-end coverage drops materially below baseline is on the v1.x list.
How we generate the AI synthesis
Two Claude/Gemini calls per genre — one for motivation profile + personas + exec summary, one for mechanic sentiment from real reviews.
Each Trends genre page ships two AI-generated blocks. Both are cached so most visits read from cache.
Cache strategy. The strategic brief (motivation + personas + white-space + exec summary) is cached for 30 days per (tag, lifecycle stage). Keying on the lifecycle stage matters because the underlying lifecycle classifier refreshes on a 24-hour cycle — a brief generated when a genre was “Emerging” would otherwise survive for a month after the data said it had become “Fad-decay,” producing surfaces that contradicted each other. Stage flips force a fresh AI run; same-stage hits keep the 30-day cost benefit. The sentiment block has its own 24-hour cache (per tag) because weekly review-sentiment shifts faster than the structural genre read.
Audience & positioning — Claude Sonnet 4.6 reads the top 30 cohort games' metadata (titles, short descriptions, top tags) plus lifecycle stages, and synthesises a 12-axis player motivation profile, three audience personas (Core / Growth / Reach), dominant themes, top-8 white-space hypotheses (with flagged tonally-invalid combos), a lifecycle commentary, and a 4-section executive summary.
What players say — Gemini 2.5 Flash reads ~160 helpful English reviews sampled across the cohort's top 20 games and extracts ranked mechanic sentiment, top praise/complaint themes, and "what's working / what's breaking" hooks. Mechanic names are merged into canonical forms ("building / construction / city-building" → one mechanic) in the same call.
Motivation framework attribution — the 12-axis model in the UI is presented as a neutral “12-axis player motivation profile.” The framework's structure (six pairs spanning Action, Social, Mastery, Achievement, Immersion, and Creativity) was originally developed by Quantic Foundry based on their survey research. We use the framework as a taxonomy scaffold for an LLM-derived estimate — our axis scores are modelled, not survey-sourced. Every Trends page badges this with a “Modelled — not survey data” note.
Mechanic extraction noise — the canonical alias pass collapses the worst variants but residual variants will appear (e.g., “deck construction” vs “deckbuilding” vs “synergy hunting”). A persistent alias map that learns across genres is planned for v2.
Quantitative spine sources — every number on the Trends page is grounded in our existing data pipeline: Steam metrics from BigQuery (apps_dim, app_daily_metrics, stg_review_text), IGDB for upcoming-release dates and metadata, and Steam tags for the cohort definition itself.
How the White Space scatter works
Cross-genre map of tag combinations the market hasn't covered well yet. Each point is an AI-surfaced hypothesis from a per-genre brief.
/trends/whitespace aggregates the white-space hypotheses that appear in each individual genre's strategic brief into one cross-genre scatter plot. Each genre's AI brief produces 4–8 candidate combinations ("Genre A × Genre B"); the scatter pools all of them.
Axes. The x-axis is log10 of the combined cohort reach (sum of the two tags' individual cohort sizes from the cohort-size cache) — points further right combine two larger Steam tags. The y-axis is the AI's validity verdict on the combination: top band is likelyValidAudience = true, bottom band is the same model flagging the combination as tonally inconsistent or audience-mismatched. Points within each band carry a deterministic per-combination jitter so co-located dots don't sit on top of each other.
Data source. Pure cache read — no extra AI or BQ calls on render. The scatter reads from CacheTrendsInsights, dedupes to the freshest entry per tag (the AI cache key includes lifecycle stage, so a tag can have multiple cached entries at different stages over time), parses each combination string into two tags via regex, then resolves each tag's cohort size from the 24-hour CacheTrendsCohort cache. Combinations that don't parse cleanly are counted as unresolved and shown in the methodology strip above the scatter; combinations where neither side can have its cohort size resolved fall through to the list view but not the chart.
What it doesn't do. The scatter currently uses the sum of individual cohort sizes as a proxy for combined reach. A true intersection-over-union metric (how rare the combination actually is on Steam today) would require a per-pair BQ scan and isn't computed in v1. The "Likely thin" verdict comes from the AI's judgement, not measured player crossover.
How Research, Monitor & Forecast use genre data
Cross-section bridges surface the per-genre Trends read inside the game-anchored surfaces. Distinct from the peer-cohort reads — same game, two views.
Research / Monitor / Forecast / Campaign anchor on a single game and compare it to its closest peers (top-500 tag-IDF-weighted overlap in the same natural tier and genres). The Trends section operates one level up — on every Steam game carrying a tag in its top 3. These are two different cohorts answering two different questions:
- Peer cohort: how does my game compare to the games most structurally like it?
- Genre cohort: how does my game compare to its whole tag's catalogue?
They often disagree on purpose. A small horror game can be top quartile vs. ~500 closest peers (because its peers are also small) while sitting in the bottom half of the full Horror catalogue. Both reads are true.
Where the genre read surfaces today:
- Research ↔ Trends link strips — small "open this game's primary tags on Trends" cards at the bottom of Markets, Audience, Market Fit, Competition, and Summary. Tag → slug resolution uses the same override map (
src/lib/trends-slug.ts) the per-genre pages use; only the slugs that round-trip cleanly are linked. - Research Market Fit: "vs Genre" line on Wishlists — the Cohort benchmark card's Wishlists row carries a small caption under the percentile bar showing the same game's percentile against the full genre cohort (every game carrying the curated genre tag in its top 3). Distinct from the peer-cohort and Closest 10 reads on the same row.
- Monitor: Wishlists tile genre % — the Wishlists metric tile carries a small "vs Genre" caption next to the peer cohort pill. Same data source as the Market Fit line.
- Monitor: Genre benchmark card — full per-metric benchmark (wishlists, CCU, positive ratio, 30-day review velocity) against the genre cohort.
- Forecast: launch-curve card — the per-genre median launch curve at D1/D7/D30/D90/D365 sits next to the projection chart as a sibling card. A true in-chart overlay (genre P50 line on the projection chart itself) is v1.x polish — not yet built.
Reference
Used across Research · Monitor · Forecast
Marketing acronyms & abbreviations
The short-hand used across the app, spelled out — for anyone newer to games-marketing jargon.
We use standard industry abbreviations on the analysis screens rather than spelling each one out every time. Here's what they mean:
- MAU — Monthly Active Users. The number of unique players in a 30-day window. We estimate it from peak concurrent players (see How we estimate DAU and MAU).
- DAU — Daily Active Users. Unique players in a single day.
- CCU — Concurrent Users. Players in a game at the same moment; Steam publishes a peak-CCU figure, which we use to derive DAU/MAU.
- LTV — Lifetime Value. The total revenue an average player generates over their lifetime — the metric that matters most for free-to-play and live-service titles.
- CAC — Customer Acquisition Cost. What it costs, on average, to turn one person into a buyer or wishlister through paid channels.
- USP — Unique Selling Point. The one thing that makes a game stand out from its competitors — the angle to lead marketing with.
- F2P — Free-to-Play. A game that's free to download and monetises through in-game purchases, rather than a one-time paid (premium) purchase.
- IP / Brand IP — Intellectual Property. A recognised franchise, series, or brand (e.g. a sequel or a licensed title) whose existing audience carries awareness and buying intent (see How we read Brand IP).
- MSRP / full price — the publisher's set sticker price on Steam before any sale discount. Every pricing comparison uses this, not the live discounted price.
- ASP — Average Selling Price. The average price a unit actually sold for after discounts and regional pricing — typically below MSRP. Used in the console-sales estimates.
- eCPW — effective Cost Per Wishlist. The paid-marketing spend it takes to generate one wishlist; used in the Revenue Forecast's spend model.
- eCPI — effective Cost Per Install. The post-launch counterpart of eCPW: paid spend per install, spread across the months after launch.
- ROAS — Return On Ad Spend. Revenue generated per dollar of advertising — e.g. 1.5× means $1.50 back for every $1 spent.
- YoY — Year-over-Year. A change measured against the same point a year earlier (e.g. how much annual sales decay after launch).
- MG — Minimum Guarantee. A guaranteed advance a publisher pays a studio up front, recouped from the game's revenue before profit is split.
Where AI is used, and where it isn't
Which parts of the platform are model-generated, which are measured, and how generated output is marked when it leaves the app.
Two different questions get confused here, so they're worth separating. The first is who wrote this — a person or a model. The second is where does this number come from — a measurement or a judgement. The app answers both, and they don't line up: an AI-written sentence can quote a measured figure, and a hand-written label can sit on top of a model's verdict.
AI-generated
- Written output — marketing and ad copy, campaign plans, ad keywords, press-kit and media-kit text, pitch-deck copy, executive summaries, the per-genre Trends blocks, and every Analyst or Q&A answer.
- Judgements, not measurements — the audience-fit verdict on each peer (STRONG / ADJACENT / NOT_FIT), thematic-match scores, and the action reads. These are a model's opinion about games, formed from store metadata. Where the app shows one next to a measured figure, it says which is which.
Not AI
- Every metric on the platform — wishlists, owners, revenue, reviews, followers, CCU, prices, regional mix. These come from Steam, IGDB and our own pipeline. Where a metric is modelled rather than observed, that's an estimate and the app flags it as one (see the closing note below); estimates are arithmetic, not a language model.
- Scale tiers, cohorts, percentiles, the affinity composite, and every forecast band — all deterministic calculations you can trace on this page.
- No images, audio or video anywhere on the platform is AI-generated. Every asset you see is either the game's own store art or something you uploaded.
Marking. Artefacts that leave the platform and contain generated text — the pitch-deck export, published media-kit pages, and the report emails — carry a machine-readable mark identifying them as AI-generated, in document metadata and page meta tags. It's invisible in normal use and exists so the content stays identifiable once it's out of our hands, in line with the EU AI Act's transparency rules.
Your side of it. The generated copy is yours to use. If you publish it somewhere that carries its own disclosure rules — a storefront, a platform with AI-content policies, a jurisdiction with labelling duties — that call is yours to make, and reviewing the copy before it ships is the point at which it becomes your editorial work rather than a model's draft.
A closing word on precision
The data across the platform is a combination of measured signals and modelled estimates, and the app flags a figure whenever it's an estimate. Those estimates are planning tools, not measurements — grounded in our proprietary Steam and games-marketing database (industry-leading coverage of sales, wishlists, audiences, and campaigns) and calibrated against public benchmarks where they exist, to hand you a defensible range. Enough to surface the drivers that actually move your outcome and to stress-test pricing, scenarios, and offers against a realistic baseline. Any single game can still land 30–50% off the model's bands for reasons no model can see coming: a press cycle that fires or fizzles, a viral moment, genre saturation, a competitor dropping into your launch window, and — above all — your own marketing execution. Read the numbers as a map, not the territory.