UTM basics: A UTM parameter is a label attached to a link
UTM parameters are labels added to a URL. When someone clicks the link, Steam records those labels alongside the visit. For example:
https://store.steampowered.com/app/2587620/Dinolords/?utm_source=coal
Here, utm_source=coal tells Steam that the visit came through Coal. The text after the question mark is made of query parameters: named values separated by an equals sign and joined with ampersands.
UTM is short for Urchin Tracking Module. The history is less important than the convention: use the supported parameter names, choose meanings that make sense for your team, and keep those meanings stable over time.
The five parameters: Use the names consistently, then give them useful meanings
Steam supports five UTM parameter names. A supported link must include at least one of utm_source or utm_campaign; utm_medium, utm_content, and utm_term are optional, but using them gives you more useful breakdowns.
| Parameter | Common meaning | Coal’s convention |
|---|---|---|
| utm_source | The platform or site that sent the traffic | The ad or social platform, such as reddit or x |
| utm_medium | The type of traffic or buying method | The channel being bought, such as cpc_social, or social_organic |
| utm_campaign | The campaign or strategic initiative | The campaign name for paid traffic; organic for Coal Publishing links |
| utm_content | The content group or variation | The ad group for paid traffic; the content slug for organic posts |
| utm_term | Traditionally a search term | The individual ad or creative; organic posts use a short publication identifier |
Coal’s naming convention: Tie the labels to the part of the campaign you can change
For paid campaigns, Coal mirrors the hierarchy in the ad platform: source is the platform, medium is what you are buying, campaign is the campaign, content is the ad group, and term is the individual ad or creative. This lets you compare outcomes at the level where you can actually make a decision.
Use lowercase, URL-safe values and snake_case for multi-word names. Keep a campaign registry with the exact parameter values and final URL. A naming convention is useful only if the next person can understand it months later.
Two link examples: Paid and organic links need different conventions
A paid Reddit link might look like this:
https://store.steampowered.com/app/2587620/Dinolords/?utm_source=reddit&utm_medium=cpc_social&utm_campaign=prelaunch_wishlist&utm_content=genre_mixup_latin_america&utm_term=siege_screenshot
An organic X post published through Coal might use the following shape. The content slug identifies the creative family, while the post identifier makes the individual publication joinable later:
https://store.steampowered.com/app/2587620/Dinolords/?utm_source=x&utm_medium=social_organic&utm_campaign=organic&utm_content=launch_trailer&utm_term=post_1234abcd
The exact values are less important than making the hierarchy predictable and consistent.
Paid campaign example: More traffic is not automatically better traffic
The illustrative results below show why tracked visits deserve attention before you optimize for raw volume. Replace these values with a finalized Steam export when you publish a real case study.
| Measure | Reddit Ads | YouTube Demand Gen |
|---|---|---|
| Trusted visits | 1,500 | 20,000 |
| Tracked visits | 1,450 | 5 |
| Attributed wishlists | 140 | 1 |
| Tracked-visit rate | 96.7% | 0.025% |
How to read it: Use tracked visits as a quality signal, not a verdict
The contrast is striking. Reddit brought fewer visitors, but almost all of them were trusted and trackable, and the campaign generated substantially more wishlists. YouTube delivered much more traffic, but very little of it was trackable and almost none converted during the measurement window. For this campaign, tracked visits were a more useful signal than raw traffic volume.
That does not prove that YouTube can never work. It suggests that this particular campaign reached people who were less connected to Steam, so the next experiment should focus on improving the tracked-visit rate rather than simply buying more impressions.
Organic social example: The same question applies to unpaid posts
Organic posts can produce very different audiences even when they promote the same game. The illustrative comparison below is deliberately separate from the paid example: it shows the kind of question to ask, not a benchmark for X or TikTok.
| Measure | X | TikTok |
|---|---|---|
| Trusted visits | 900 | 12,000 |
| Tracked visits | 760 | 210 |
| Attributed wishlists | 62 | 3 |
| Tracked-visit rate | 84.4% | 1.75% |
Limitations: UTM tags measure click-through behavior, not every marketing influence
UTM tags make a visit easier to classify, but they do not make the journey complete. They measure what happens after someone clicks a tagged link, not every way that marketing influences a player.
- People may see a link and later search for the game manually. That demand may appear as Steam Search or unattributed traffic instead.
- Inconsistent naming, renamed campaigns, and links built outside the registry can make a comparison impossible even when Steam records the visits correctly.
- Redirects, privacy choices, browser configuration, and low-volume thresholds can remove or hide some of the values you expected to see.
- An attributed conversion is not proof that the campaign caused an outcome that would not otherwise have happened.
A practical workflow: Create links you can interpret later
- Choose the platform, buying method, campaign, content group, and individual creative you want to compare.
- Build the URL with the supported parameter names, using lowercase snake_case values where possible.
- Test the link in Steam’s UTM dashboard and in a normal browser before spending money or publishing the post.
- Record the exact final URL in a campaign registry, along with the campaign dates and destination App ID.
- After the campaign, compare total, trusted, and tracked visits before looking at attributed wishlists, purchases, or activations.
- Wait for conversions to finalize, then write the conclusion as recorded attribution. Use a baseline or holdout where available before claiming incremental lift.
How Coal helps: Automate collection and reconciliation, not the judgment
You can run this method with recurring Steamworks and ad-platform exports plus a campaign registry spreadsheet. Coal collects Steam traffic and campaign data into the same operating view, reducing repeated export and reconciliation work.
The definitions, denominators, naming convention, and evidence discipline still belong to the team. Coal can make the comparison easier; it cannot turn attributed conversions into proof of causality.