Six numbers tell you whether your indie game marketing is working: click-through rate (2-4% is average), visit-to-wishlist rate (8-15% median for Coming Soon pages), cost per wishlist ($1-2 is healthy, stop above $3), wishlist velocity (median ~23 per week for surveyed indies), conversion by traffic source, and your net wishlist balance. Every one of them lives somewhere specific in Steamworks, and most developers check none of them.
This post defines each metric, gives you the healthy range with sources, shows exactly where to find it in the Steamworks dashboard, and ends with the Monday-morning checklist: the six numbers to pull up every week and what to do when one drifts out of range. If a figure below is community-documented rather than official Valve data, I say so where it appears.
The six metrics and where each one lives
Steamworks scatters these across three different reports, which is half the reason nobody tracks them. Here is the map:
| Metric | Healthy range | Where it lives in Steamworks |
|---|---|---|
| Click-through rate (impressions to visits) | 2-4% average, 7%+ excellent | Marketing & Visibility > Store Page Traffic Breakdown |
| Visit-to-wishlist rate | 8-15% (Coming Soon) | Visits from traffic report / wishlist adds from Wishlists report |
| Cost per wishlist | $1-2; stop at $3+ | Ad platform spend / UTM-tracked wishlists |
| Wishlist velocity | Tier-dependent; median ~23/week | Wishlists > Wishlist Actions (daily adds) |
| Conversion by traffic source | Varies; compare sources against each other | UTM Analytics tab + Traffic Breakdown |
| Net wishlist balance | Adds minus deletes, positive and stable | Wishlists report (adds, deletes, balance) |
None of these are vanity numbers. CTR tests your capsule, visit-to-wishlist tests the page. Cost per wishlist grades your ad spend, and conversion by source decides which channel gets the next dollar.
Click-through rate: the capsule metric
CTR is visits divided by impressions: if Steam shows your capsule 10,000 times and 400 people click, you have a 4% CTR. It is the first gate in the funnel and almost entirely a capsule-and-title test, because the capsule is all a browsing player sees.
The benchmarks from our full Steam CTR benchmarks guide: below 2% is poor and usually means Steam is throttling your reach, 2-4% is the indie average, 4-7% is good, and 7%+ is excellent. Find yours under App Admin > Marketing & Visibility, comparing impressions to visits per traffic source.
One honesty note, because the data here is genuinely contested. Chris Zukowski’s developer survey at How To Market A Game found that CTR did not correlate with revenue — games with tiny impression counts often post higher CTRs, because the only people who ever see an obscure game are the ones already hunting for it. Raw impressions and page visits correlated with wishlists; CTR alone did not.
So treat CTR as a diagnostic, not a KPI. Use it to compare your own capsule versions against each other (a before-and-after when you ship new art) and to compare the same traffic source over time. Do not use it to compare your game against someone else’s, and do not celebrate a high CTR on 900 impressions.
Give a capsule change a few days of fresh impression volume before judging it. Weekly averages, not daily swings.
Visit-to-wishlist rate: the page metric
This is the percentage of store page visitors who click Add to Wishlist. It is the single best measure of whether your page itself is doing its job, independent of how much traffic you drive to it.
The median Coming Soon page converts 8-15% of visitors to wishlists. The full ladder, from our store page conversion benchmarks:
| Visit-to-wishlist rate | Verdict |
|---|---|
| Below 5% | Poor — something on the page actively repels people |
| 5-8% | Below average — usually a capsule-to-page mismatch |
| 8-12% | Average — functional, no hook |
| 12-18% | Good — above the median, leave the page alone |
| 18-25% | Excellent — strong hook, aligned assets |
| Above 25% | Exceptional, often genre-driven (horror overperforms) |
Steamworks does not print this ratio for you. You compute it: visits from the traffic report, wishlist adds from the Wishlists report, same date range. Expect the number to drop once the game launches, often by half, because a Buy button starts competing with the wishlist button.
The reason this rate beats total wishlist count as a health metric: a page converting at 5% with 50,000 visits has a page problem, and a page converting at 15% with 10,000 visits has a traffic problem. The fixes are completely different, and the total wishlist count (2,500 vs 1,500) tells you almost nothing about which situation you are in. If your rate sits below 8%, fix the page before spending anything on traffic — and when you change the page, A/B test it properly instead of guessing.
Cost per wishlist and cost per player: $1-2 is the lane
Cost per wishlist (CPW) is your ad spend divided by the wishlists that spend produced. It only applies when you run paid ads; if your whole plan is festivals and Reddit posts, your CPW is $0 and this section is a benchmark for later.
The canonical range, from Chris Zukowski’s paid-ads guidance and Patrick Tang’s documented campaign data: a well-optimized campaign lands at $1-2 per wishlist. Above $3, stop the campaign and rework the targeting, the creative, or the page itself — at that price the math almost never recovers, because paid-traffic wishlists convert to sales worse than organic ones.
Real-world spread from that campaign: solo developer Patrick Tang spent $4,365 on ads for This Grand Life 2 and reported an average CPW of $1.10, with individual ad groups ranging from $0.80 to $2.50. That spread inside one campaign is normal, and it is exactly why you kill the expensive ad groups and feed the cheap ones.
CPW is really a proxy for cost per player, the number the spreadsheet actually cares about. Divide CPW by your expected wishlist-to-sale rate: at the ~12% median day-1 wishlist conversion, a $1.50 wishlist is roughly a $12.50 day-1 player. Treat that as a rough ceiling, since wishlists keep converting through launch discounts and later sales. If cost per player lands above your net revenue per unit, the ads are buying visibility, not profit.
To measure CPW at all you need attribution, which on Steam means UTM links (covered below). Divide platform spend by UTM-tracked wishlist conversions, per campaign, weekly. The indie game marketing budget guide walks through when paid ads deserve any slice of a small budget in the first place.
Wishlist velocity: the momentum metric
Wishlist velocity is wishlists gained per unit of time, usually per week. Its main use is honest self-assessment: totals only ever go up, velocity tells you whether anyone still cares.
Zukowski’s survey data (non-promotional weeks, pre-launch) puts the overall median at ~23 wishlists per week and breaks out by eventual lifetime revenue:
Provenance note: this is survey data from a self-selected developer group, not Valve data, and the tiers overlap heavily — a game doing 100 wishlists a week could land in any of the top three buckets. Zukowski’s follow-up on wishlist velocity is explicit that velocity is a good indicator and a poor guarantee; even Valve waits for actual sales before committing featuring.
Two practical readings:
- Baseline velocity (quiet weeks, no beats) is your discoverability floor. If it is near zero, Steam’s organic surfaces are not feeding you, and the fix is tags, capsule, and algorithm visibility, not another tweet.
- Spike decay after a festival or a streamer hit shows how sticky the attention was. A spike that returns to a higher baseline is the pattern you want; it means the event taught Steam’s recommender that your game converts.
Velocity is also the number that decides launch timing math — whether you will plausibly reach the wishlist count you need for Popular Upcoming by your target date. Run your current velocity through the wishlist calculator to project where you will be at launch.
Conversion by traffic source: where good traffic actually comes from
Aggregate conversion rates hide the story. Discovery Queue visitors, search visitors, and TikTok visitors behave like three different species, and the Steamworks Traffic Breakdown plus UTM Analytics let you separate them.
Steam’s internal surfaces carry more weight than most external channels. Zukowski’s Discovery Queue breakdown puts the queue at the number two or three traffic source for top-selling games, and documents a media push for Whisker Squadron: Survivor that came with 7,668 Discovery Queue visits in a single week. External beats exist partly to trigger that internal machine: a Reddit post that sends 2,000 visitors matters less for those 2,000 than for the algorithmic amplification the resulting spike can buy. Can, not will. Zukowski has also watched a 3,000-wishlist streamer spike produce zero Discovery Queue lift.
What to compare, source by source:
- Steam internal sources (Discovery Queue, search, more-like-this): high volume, medium conversion. This is your baseline. If internal sources convert poorly, your page or tags mismatch the audience Steam sends.
- Direct/external links you control (your site, mailing list, Discord): low volume, highest conversion. These people already know you. A mailing list click converting below your Discovery Queue rate is a red flag on the page.
- Paid traffic: whatever converts here sets your real CPW. GameDiscoverCo’s wishlist conversion analysis cites the Furnish Master postmortem, where wishlists from ads converted into sales less effectively than organic ones. A paid wishlist is worth less; budget accordingly.
- Social/viral traffic: spiky and low-converting per visit, but it feeds the velocity spikes that move Steam’s recommender.
None of this comparison works until you tag your external links. Setup takes ten minutes.
UTM setup: five parameters and a 72-hour window
Steam has native UTM tracking, documented in the Steamworks UTM Analytics docs. It supports the five standard parameters: utm_source, utm_medium, utm_campaign, utm_content, and utm_term. A tagged link looks like:
https://store.steampowered.com/app/YOURID/?utm_source=reddit&utm_medium=post&utm_campaign=demo_launch
The mechanics that matter, straight from the documentation:
- Only logged-in visits are tracked. The Tracked Visits count excludes logged-out users and bot traffic, so UTM numbers will always undercount raw clicks from your ad platform. That gap is normal; do not panic when Meta reports 1,000 clicks and Steam reports 400 tracked visits.
- Conversions attribute within 72 hours. A wishlist, purchase, or activation counts for your UTM link if it happens within 72 hours of the click, even if the user wanders through other pages first.
- Three conversion types are reported: wishlists, purchases, and activations. Demo downloads do not count as conversions.
- The report lives in its own UTM tab under Marketing & Visibility, and low-volume parameter combinations are suppressed for privacy.
Set a naming convention on day one and never improvise: lowercase everything so Reddit and reddit can never split into two rows (Valve’s docs do not say whether case gets normalized, so assume it does not), utm_source for the platform, utm_medium for the format (post, ad, video, email), utm_campaign for the beat (nextfest_2026, launch_week). Zukowski’s walkthrough of the UTM feature has held up well since Valve shipped it.
UTM parameters only survive direct link clicks. Traffic from people who see your game on TikTok and then search Steam manually shows up as Steam search traffic, not as TikTok. Dark traffic like this is real and unmeasurable; UTM data is a floor on a channel’s value, never the full picture.
The Monday dashboard: six numbers, five minutes
Here is the weekly check, every Monday, same order. Pull last week and the week before, and only investigate when a number leaves its lane.
| # | Metric | Healthy range | Benchmark source |
|---|---|---|---|
| 1 | CTR (impressions to visits) | 2-4% average, 7%+ excellent | Steam CTR benchmarks |
| 2 | Visit-to-wishlist rate | 8-15% median (Coming Soon) | Conversion benchmarks |
| 3 | Cost per wishlist (if running ads) | $1-2; kill at $3+ | Marketing budget guide |
| 4 | Wishlist velocity | vs your own 4-week baseline; survey median ~23/week | HTMAG survey, 2022 |
| 5 | Conversion by traffic source | Owned channels above internal baseline | Your own UTM Analytics data |
| 6 | Net wishlist balance (adds minus deletes) | Positive; deletes under ~15% of adds (my rule of thumb, not a published benchmark) | Wishlists report in Steamworks |
The decision rules that go with it:
- CTR fell and visits fell: capsule or visibility problem. Check whether an algorithm surface dropped you before blaming the art.
- Visits up, visit-to-wishlist down: the new traffic is mismatched, or the page has a fresh problem. Check which source grew first.
- CPW crossed $2 and is climbing: kill the worst ad groups now, not at $3. The $3 line is where you stop the whole campaign.
- Velocity below baseline two weeks running with no beat planned: your discoverability floor dropped. Tags and capsule first, then plan the next beat.
- Deletes spiking without an announcement: something external happened (a price reveal, a delay, drama). Find it before it compounds.
- A single UTM source converting 2x the others: that channel gets next month’s effort. This is the entire point of the dashboard.
Numbers 1 and 2 have a shortcut: run your page through the free Steam Page Analyzer and it will flag the capsule and page-conversion problems that drag those two metrics down. The other four just need the Monday habit. Most indie marketing advice tells you to do more; the dashboard tells you what to stop doing, which on a small budget is worth more. For the tactics layer on top of these numbers, the wishlist growth playbook is the companion piece.