Steam UTM Analytics tells you which of your links produced visits and wishlists: the Reddit post, the newsletter, the paid ad, each one counted separately. The catch that surprises almost everyone is the attribution rule. Steam only counts a visit for conversion if the person was logged into Steam in the same browser where they clicked your link. Logged-out visitors and most in-client browsing never reach the wishlist column, so the report always shows fewer conversions than actually happened.
This guide builds a working setup straight from the official Steamworks UTM doc, which I re-read on October 9, 2026, then shows you how to read the numbers without fooling yourself. It is timed on purpose: Steam Next Fest runs October 19 to 26, 2026 ( 10am PDT to 10am PDT, verified against the Steamworks Next Fest October 2026 page ), and if your links are not tagged before the traffic spike, you lose the one week where knowing your best channel matters most.
What Steam UTM analytics actually measures
Steam UTM Analytics is a report inside Steamworks that ties visits and conversions on your store page back to the exact link a person clicked. You add a few tags to a store page URL, share that tagged link wherever you post, and Steam counts how many visits and how many wishlists, purchases, and activations each tagged link produced. Valve shipped it as an open beta in April 2021 ( the Steamworks announcement is the primary source ), and it has been the standard answer to “where did this wishlist come from” ever since.
UTM stands for Urchin Tracking Module, a naming leftover from an old analytics product Google bought. The name does not matter. What matters is that a UTM is just five optional labels bolted onto the end of a URL, and Steam reads them.
Here is the honesty note before the tutorial. The 2021 howtomarketagame guide is still the most-linked writeup, but it predates several of the current metric names and the 72-hour conversion window described below. I have rebuilt every definition here against the live doc rather than trusting a five-year-old post.
Before you tag anything: the plan
The way this works is that we are going to do the following, in order:
- Decide your naming scheme first, before you make a single link. Inconsistent tags (
Redditin one place,redditin another ) split one channel into two rows and ruin the comparison. - Build one tagged link per place you post. Same store page, different tags per source.
- Find the UTM Analytics tab in Steamworks and confirm the permission is set for whoever needs to read it.
- Wait for the data to settle. Visits update hourly, conversions finalize a few days later, so do not judge a campaign on its first afternoon.
- Read tracked visits and wishlists together, then convert paid campaigns into a cost per wishlist you can act on.
Five steps, one store page, and a rule you write down once. Let’s build it.
Step 1: Build the tagged link
A UTM link is your normal store page URL with tags added after a ?. Steam supports five parameters, and per the doc a link must include either utm_source or utm_campaign to be tracked at all. The other three are optional but worth the extra keystrokes.
| Parameter | What it answers | Example values |
|---|---|---|
utm_source | Which site or platform | reddit, newsletter, youtube, twitter |
utm_medium | What kind of placement | post, ad, email, bio, video |
utm_campaign | Which push or moment | nextfest2026, launch, demo_drop |
utm_content | Which creative or variant | trailer_a, screenshot_b, pinned_comment |
utm_term | Paid keyword or audience ( paid only ) | roguelike_fans |
A finished link for a Reddit post during Next Fest looks like this:
https://store.steampowered.com/app/YOUR_APP_ID?utm_source=reddit&utm_medium=post&utm_campaign=nextfest2026&utm_content=trailer_a
Swap YOUR_APP_ID for your real numeric App ID. If you do not know it, our how to get your Steam App ID walkthrough finds it in about ten seconds. The link also works on a sale page URL ( store.steampowered.com/sale/SALE_NAME ), which is handy if you run a hub page during a festival.
Parameters are separated by & and the whole tag block starts with a single ?. Order does not matter. Capitalization does, so pick lowercase and never break the habit.
Step 2: Find the UTM Analytics dashboard
In Steamworks, open your app, then go to the Marketing & Visibility section. The report lives on the tab labeled UTM Analytics. Reading it requires the “View Marketing Traffic Data” permission on your Steamworks account, so if the tab is missing, that permission is the first thing to check with whoever administers your partner account.
Two timing facts change how you read the tab. Visit counts update roughly hourly, so a link you posted this morning shows numbers by the afternoon. Conversions take longer: a wishlist or purchase is attributed within 72 hours of the click, and the numbers finalize a few days after the visit. A campaign that looks flat on day one often fills in its wishlist column over the following weekend.
Step 3: Read Total, Trusted, and Tracked visits
The report shows three visit counts, and the difference between them is the whole game. Here are the definitions, quoted from the doc, then what each one is good for.
| Metric | Steamworks definition | What it tells you |
|---|---|---|
| Total Visits | “The total number of visits to your product page that had a UTM code attached to the URL.” | Raw clicks that reached your page, bots included |
| Trusted Visits | “A subset of Total Visits that excludes bot traffic and search crawlers.” | Real human clicks, logged in or not |
| Tracked Visits | “The total number of visits to your product page for which users were also logged in. Excludes traffic that exhibits abnormal behavior such as repeated visits at a high rate.” | The only visits that can convert |
The load-bearing sentence in the whole doc is this one: only tracked visits are eligible for conversion reporting. A wishlist only gets counted if the visitor was logged into Steam in that browser. So the gap between Trusted and Tracked Visits is your logged-out audience: people who saw your page, were not signed in, and could not be followed to a wishlist even if they added one later from the app.
Below the visit counts sit the three conversion types, each defined against the specific App ID in your link:
- Wishlist - the customer added your game to their wishlist.
- Purchases - the customer bought your game.
- Activations - the customer acquired a license for your free-to-play game, or redeemed a key.
For a pre-launch game, the wishlist column is the one you live in. Purchases and activations matter after you ship.
A naming convention so your numbers stay comparable
Here is where most setups quietly fall apart. UTMs only compare cleanly if the tags are identical every time. Newsletter, newsletter, and email_list become three separate rows for the same audience, and now you cannot tell which channel won. Pick a scheme on day one and put it somewhere the whole team can copy from.
A scheme that has held up for me:
| Field | Rule | Good | Bad |
|---|---|---|---|
utm_source | Lowercase platform name, no spaces | reddit | Reddit, Reddit.com |
utm_medium | One word for the placement type | post | organic post |
utm_campaign | Event plus year, no spaces | nextfest2026 | Next Fest, nf |
utm_content | Variant tag for A/B links | trailer_a | the new trailer |
Two rules make the difference. Lowercase everything, because Steam treats Reddit and reddit as different values. And keep a shared document ( a pinned note, a spreadsheet tab ) with the exact strings, so the person posting to Discord uses the same utm_campaign as the person posting to Twitter. When your marketing sits across several traffic sources, this one-page convention is what keeps the report readable instead of a pile of near-duplicate rows.
Never put a UTM on a link you paste into the Steam client itself, and do not tag links between your own pages. Self-referral traffic pollutes the report with visits that were never real acquisition.
The limitations nobody warns you about
Steam UTM Analytics is honest, but it is narrow. Knowing exactly where it stops keeps you from making bad calls on undercounted data.
- Logged-out visitors never convert in the report. This is the big one. A wishlist added by someone browsing signed-out simply is not attributed to your link. Your true conversion is always higher than the tab shows.
- In-client traffic is a different report. UTM links are a web-store mechanism. Visits that arrive through the Steam client’s own surfaces ( Discovery Queue, “More like this”, front-page features ) are not UTM-tagged and show up in the separate Traffic Breakdown report instead, not here.
- There is no view-through. Steam credits the last UTM link clicked within 72 hours. Someone who saw your Reddit ad, did not click, and wishlisted from a Google search two days later is credited to Google, or to nobody.
- Cross-device breaks attribution. Click on your phone, wishlist later on your desktop, and Steam cannot connect the two. The click and the conversion have to happen in the same logged-in browser.
- Cookie opt-outs and thresholds trim the data. Some visitors are excluded by their browser or cookie settings, and Steam hides UTM combinations that fall below a minimum visit count, so tiny campaigns may show blanks.
- Only the linked App ID counts. A wishlist for your other game, your demo, or your DLC does not convert against this link. No in-game microtransactions are reported either.
This is also why your ad platform will always claim more wishlists than Steam does. Meta and Reddit count view-through conversions ( someone saw the ad, never clicked, converted later ) and use longer windows plus cross-device modeling. Steam counts strict logged-in last-click inside 72 hours. The ad platform over-counts, Steam under-counts, and the truth sits between them. My working habit: treat Steam’s UTM wishlist number as the conservative floor and the ad platform’s as the optimistic ceiling. ( This last-click versus view-through framing is my read of how the two systems attribute, not a line from Valve’s doc, so weigh it as analysis rather than official policy. )
Reading the numbers: what a good visit-to-wishlist rate looks like
Once the data settles, the metric to watch is tracked visits divided into wishlists: your visit-to-wishlist rate per source. The median day-one store-page visit converts to a wishlist about 12% of the time, but that is a blended, cold-traffic number. Warm traffic beats it and cold paid traffic trails it, which is exactly the pattern a per-source report exposes.
That chart is a made-up example to show the shape, not data from any real game. The point is the ranking, not the exact percentages: an owned list of people who already asked to hear from you converts several times better than a cold paid click, so a low rate on paid traffic is normal, not a failure.
For paid channels, turn the rate into money. Take the campaign spend, divide by the wishlists the UTM tab attributes, and you get a cost per wishlist. The benchmark, from Chris Zukowski and Derek Tang, is $1 to $2 per wishlist for a well-optimized campaign, and stop or rework anything running past $3. Steam under-counts, so a campaign showing $3.50 by Steam’s strict last-click math might really be closer to $2 once logged-out and view-through wishlists are added back. Do not kill a channel on Steam’s number alone. Cross-check it against what the ad platform reports and settle somewhere in the middle.
One more sanity check for paid work: if your visit-to-wishlist rate on a source is far below your organic baseline, the problem is usually the store page, not the ad. Cold visitors are unforgiving. Running your page through the free Steam Page Analyzer before you buy traffic is cheaper than paying to send cold clicks at a page that does not convert them.
Your Next Fest measurement checklist
Next Fest is the highest-traffic week most pre-launch games ever get, and it is the week UTM tracking earns its keep. Registration closed on August 31, so if you are in the October fest, your job now is measurement, not signup. Work down this list before October 19:
- Tag every outbound link to your store page: the fest announcement, your social posts, your Discord pins, the newsletter, any paid ads. An untagged link is a wishlist you cannot trace.
- Use one shared
utm_campaign=nextfest2026across the whole team so the fest rolls up into a single comparable block. - Keep
utm_sourceclean and lowercase for every platform, matching your written scheme exactly. - Confirm the “View Marketing Traffic Data” permission is set now, not at 10am on launch day when you want to watch the numbers.
- Check the tab on a lag, reading conversions two to three days behind, since wishlists finalize inside the 72-hour window.
- Rank your sources by visit-to-wishlist rate after the fest, then put next quarter’s effort into the top two.
Sort your channels honestly and the next campaign gets easier, because you stop guessing which posts did the work. For the wider festival plan around this measurement, our Next Fest prep tool covers assets and deadlines, and the Next Fest checklist covers the demo side. When the fest ends, feed your best-performing source straight into the how to get Steam wishlists playbook and spend the next month doing more of what the UTM tab proved works.