How should I structure Steam UTM parameters across organic posts and paid ads?
On this page
Use a consistent hierarchy that lets your team group results by platform, paid or organic activity, campaign, creative group and individual execution. Write the convention down before distributing links. Coal uses different medium values for paid Reddit ads and organic X posts while preserving a recognizable hierarchy across both.
Give each field one job
Valve supports five UTM parameters and lets you choose their values. A supported Steam destination must include at least utm_source or utm_campaign; using all five is an organizational choice. Valve: Creating a UTM link.
For a studio running repeated campaigns, we recommend using the fields as follows:
| Field | Job | Example question it should answer |
|---|---|---|
utm_source |
Platform | Was this traffic from Reddit or X? |
utm_medium |
Type of distribution | Was the activity paid or organic? |
utm_campaign |
Initiative | Which campaign did it belong to? |
utm_content |
Creative family or ad group | Which group should we compare? |
utm_term |
Individual execution | Which post or ad was this? |
This is Coal's convention, not a rule imposed by Steam. Other teams may make different choices. The useful property is that someone reviewing the results later can reconstruct what happened without guessing.
Two examples that work together
These are generic parameter examples, not live campaign links:
| Parameter | Paid Reddit ad | Organic X publication |
|---|---|---|
utm_source |
reddit |
x |
utm_medium |
cpc_social |
social_organic |
utm_campaign |
wishlist_campaign |
organic |
utm_content |
genre_audience |
gameplay_clip |
utm_term |
creative_a |
post_<publication_short_id> |
For Reddit Ads, Coal maps campaign, content and term to the campaign, ad group and ad names, using snake-case slugs. For organic X, organic is the reserved initiative, content identifies the creative family, and the final field identifies the publication.
You can then ask both broad and narrow questions: “How did paid Reddit perform?” and “Which execution within that ad group received recorded wishlist attribution?”
Avoid names that lose their meaning
A useful naming convention survives a handover. test, new_ad and final_final may make sense to the person creating links today, but they become ambiguous across months of activity.
Keep a small register with the complete URL, intended destination, campaign owner, publication date and the plain-language purpose of the creative. A spreadsheet is sufficient. Record the naming decision there before someone copies the link into an ad, creator brief or scheduled post.
Preserve names used in historical reports. If you introduce a new convention, record how old names map to new ones. Renaming a spreadsheet row does not rewrite links already shared with players.
The same discipline matters when a publisher runs several games. Identify the game in the register and destination; keep the platform field consistent across titles.
Test the link you will actually distribute
Use Steam's link-testing tool, then check the final URL from the actual post or ad preview. Valve: Testing a link.
For the team review, ask: does it reach the intended game, contain the agreed values, and identify the execution at the level we want to compare? Repeat this check when someone changes a destination or copies a campaign setup.
How Coal helps
Coal's organic X publishing engine generates the store-link parameters for that workflow. Its Reddit Ads convention follows the paid campaign hierarchy. Keep manually distributed links compatible with those definitions when you want to review them together.
Consistent tags make recorded results easier to organize. They do not recover every missing attribution path. WishlistIQ's UTM guide is another practical reference for connecting tagged outcomes with campaign-cost analysis.
Related: What do Steam's visit types mean? · Did a social post cause a wishlist spike?