UTM Tracking for Reddit Ads: How to Build and Validate Campaign Links
For Reddit Ads, use utm_source=reddit with utm_medium=cpc for paid campaigns (Promoted Posts, Conversation Ads, and all paid Reddit formats). Reddit has no GA4 auto-tagging — there is no equivalent to Google's gclid or Meta's fbclid that automatically populates source and medium data in GA4. Without UTM parameters, Reddit Ads clicks typically appear as reddit.com referral traffic in GA4's Traffic Acquisition report rather than routing to the Paid Social channel group. Using utm_medium=cpc correctly ensures GA4 distinguishes paid Reddit spend from organic Reddit referrals and attributes sessions to the right channel.
Why UTM parameters are essential for Reddit Ads
Reddit is one of the few major ad platforms with no native integration that pushes structured attribution data into GA4 automatically. Unlike Google Ads (which has gclid and auto-tagging) or Meta (which has fbclid), Reddit Ads relies entirely on UTM parameters to communicate with external analytics tools. The consequences of running Reddit Ads without UTM tags:
- Reddit traffic shows as referral, not paid
- GA4 attributes untagged Reddit clicks as referral traffic from
reddit.com. This traffic lands in the Referral channel group — not Paid Social. If you're spending on Reddit Ads and seeing no Paid Social lift in GA4, missing UTM tags are likely the cause. Your paid Reddit spend is invisible in any report that filters by channel. - Reddit's own Ads Manager reports only Reddit-side metrics
- Reddit Ads Manager shows impressions, clicks, CPM, and CPC — but these are Reddit's internal counts. Without UTM parameters flowing into GA4, you have no way to connect Reddit's click count to the sessions, conversions, and revenue that GA4 tracks. ROAS calculations require both sides of this data to be in the same system.
- Reddit's Pixel handles conversion tracking, not GA4 session attribution
- Reddit's Pixel (similar to Meta Pixel) lets you fire conversion events back to Reddit Ads for optimisation and reporting inside Ads Manager. It is not a substitute for UTM parameters — the Pixel reports conversions to Reddit, while UTM parameters bring session attribution into GA4. Both can coexist on the same page: Pixel fires for Reddit's bidding system, UTMs populate GA4's acquisition reports.
- Organic Reddit referrals must be separated from paid
- If you post organically on Reddit or participate in communities that link to your content, those sessions arrive in GA4 as referral traffic from
reddit.com. Without UTM tags on your paid campaigns, GA4 cannot distinguish paid clicks from organic Reddit referrals — and both blend into the same referral row in Traffic Acquisition reports.
The correct utm_source and utm_medium for Reddit Ads
Reddit offers several ad formats. The utm_source is always reddit; the utm_medium depends on whether the campaign is paid or whether you're tagging organic posts:
| Reddit campaign type | utm_source | utm_medium |
|---|---|---|
| Promoted Post (link ad) | reddit |
cpc |
| Conversation Ad | reddit |
cpc |
| Product Ad / Carousel | reddit |
cpc |
| Video Ad | reddit |
cpc |
| Organic Reddit post with link | reddit |
social |
Use utm_medium=cpc for all paid Reddit campaigns. GA4's default Paid Social channel group requires a social platform source (like reddit) paired with a paid medium indicator — and cpc is the most broadly compatible paid indicator in GA4's built-in channel definitions. Some teams use utm_medium=paid-social for Reddit, which works if you create a custom GA4 channel group rule to match it, but cpc is the safest default for out-of-the-box GA4 channel groupings.
For organic Reddit posts (links posted in subreddits or on your own profile), use utm_medium=social. GA4 routes utm_source=reddit&utm_medium=social to the Organic Social channel group, keeping paid and organic Reddit traffic separated in all acquisition reports.
Building Reddit UTM links with mlz build
The mlz build command generates the full tracked URL and normalises all parameter values to lowercase automatically. Reddit campaigns frequently target multiple ad groups and subreddits — use --content to identify which subreddit or ad group drove a session, keeping campaign-level reporting clean in GA4:
# Promoted Post (paid) — basic
$ mlz build \
--url "https://example.com/landing" \
--source "reddit" \
--medium "cpc" \
--campaign "spring-launch-2026"
{
"tracked_url": "https://example.com/landing?utm_source=reddit&utm_medium=cpc&utm_campaign=spring-launch-2026",
"params": {
"utm_source": "reddit",
"utm_medium": "cpc",
"utm_campaign": "spring-launch-2026"
}
}
# With subreddit tracking via --content
$ mlz build \
--url "https://example.com/landing" \
--source "reddit" \
--medium "cpc" \
--campaign "spring-launch-2026" \
--content "r-marketing"
"tracked_url": "...?utm_source=reddit&utm_medium=cpc&utm_campaign=spring-launch-2026&utm_content=r-marketing"
The --content flag maps to utm_content, which appears in GA4's Traffic Acquisition report under the "Session manual term" or "Session content" dimension. This is the recommended way to differentiate subreddit-level performance within a single campaign — without creating separate campaigns for each subreddit target.
Add --validate to check that the destination URL is live and returns HTTPS/200 at build time. This is particularly useful for Reddit Ads where campaigns are reviewed before going live — a 404 destination discovered during Reddit's review cycle wastes the review window.
Validating Reddit campaign links before launch
Reddit Ads pull OG tags (og:title, og:description, og:image) when generating link previews for Promoted Posts in the feed. A missing og:image causes the Promoted Post to render without a visual preview — which typically reduces click-through rates on a platform where image-forward content performs better than text-only links. Use mlz build --validate --inspect to check both URL validity and OG metadata in one pass before submitting to Reddit's review:
$ mlz build \
--url "https://example.com/landing" \
--source "reddit" \
--medium "cpc" \
--campaign "spring-launch-2026" \
--content "r-marketing" \
--validate \
--inspect
{
"tracked_url": "https://example.com/landing?utm_source=reddit&utm_medium=cpc&utm_campaign=spring-launch-2026&utm_content=r-marketing",
"validation": {
"valid": true,
"checks": [
{ "check": "ssl", "status": "pass" },
{ "check": "resolution", "status": "pass", "details": { "status_code": 200 } },
{ "check": "redirects", "status": "pass", "message": "No redirects detected." }
]
},
"inspection": {
"open_graph": {
"title": "Spring Launch 2026 — Example Co",
"image": "https://example.com/og-spring.png",
"description": "Product launch details and offer."
},
"checks": [
{ "check": "open_graph", "status": "pass", "message": "Open Graph tags present: title, description, and image." }
]
}
}
A passing open_graph check confirms Reddit's crawler can fetch your og:image when generating the Promoted Post preview. For a complete pre-publish workflow that also validates post copy length and hashtag limits, use mlz publish-check.
Using utm_content to track subreddit performance
Reddit Ads lets you target specific subreddits at the ad group level. A single campaign might target r/marketing, r/entrepreneur, and r/startups simultaneously. Without utm_content, all three ad groups show up as a single blended row in GA4 under the same campaign name — making it impossible to know which community drove conversions.
Use utm_content to encode the subreddit or ad group name. Convention: use the subreddit slug prefixed with r- to avoid the slash character, which can cause URL encoding issues:
# r/marketing ad group
$ mlz build \
--url "https://example.com/landing" \
--source "reddit" \
--medium "cpc" \
--campaign "spring-launch-2026" \
--content "r-marketing"
# r/entrepreneur ad group
$ mlz build \
--url "https://example.com/landing" \
--source "reddit" \
--medium "cpc" \
--campaign "spring-launch-2026" \
--content "r-entrepreneur"
# r/startups ad group
$ mlz build \
--url "https://example.com/landing" \
--source "reddit" \
--medium "cpc" \
--campaign "spring-launch-2026" \
--content "r-startups"
In GA4's Traffic Acquisition report, filter by Session campaign = spring-launch-2026 and add Session content as a secondary dimension. Each subreddit ad group appears as a separate row — giving you the subreddit-level conversion data that Reddit Ads Manager's own reporting doesn't connect to your GA4 goals.
Reddit Ads tracking gotchas
- Reddit's URL shortener and UTM parameter survival
- Reddit wraps outbound links through its own redirect system. When a user clicks a Promoted Post, the click goes through Reddit's redirect before landing on your destination URL. In standard configurations, UTM parameters survive this redirect — they're part of the destination URL that Reddit passes through. However, if your destination URL uses additional redirects (CDN, link shortener, landing page builder), each hop is an additional point of failure. Validate the full redirect chain with
mlz checkbefore launch to confirm parameters reach the final destination. - Reddit's Pixel and GA4 show different conversion counts
- Reddit's Pixel fires when a conversion event occurs and reports that event back to Reddit Ads for internal attribution. GA4 records the session and conversion when the user arrives via the UTM-tagged URL and completes a goal. These two systems have different attribution models and lookback windows — Reddit Ads uses a 7-day click and 1-day view attribution window by default, while GA4 uses last-click attribution by default. Discrepancies between Reddit Ads conversion count and GA4 goal completions are normal and expected.
- Reddit in-app browsing and UTM parameter survival
- Reddit's mobile app opens links in an in-app browser before routing to the destination. UTM parameters survive this transition in most configurations — they're embedded in the destination URL that Reddit passes to the in-app browser. The more common issue is when users click a Reddit Promoted Post on mobile, switch apps, and return later via a direct bookmark or shared link without the original UTM parameters.
- Conversation Ads use a different link format
- Reddit's Conversation Ads (formerly carousel ads) show an expandable comment-style ad unit with a CTA button that links to your destination. The destination URL on the CTA button is where you set UTM parameters — not in the ad headline. Ensure UTM parameters are applied to the CTA destination URL in Ads Manager, not to the ad unit's display URL.
- Avoid "Reddit" with capital R in utm_source
- GA4 is case-sensitive for UTM parameter values.
utm_source=redditandutm_source=Redditappear as two separate traffic sources in GA4 reports. Always use lowercase — themlz buildCLI normalises values to lowercase automatically, preventing this fragmentation at the source.
Reddit UTM naming conventions
Consistent naming across all Reddit campaigns is the foundation of reliable GA4 attribution. GA4 is case-sensitive, so the same source with different capitalisation creates separate rows in every acquisition report:
- utm_source:
reddit(always lowercase — never "Reddit" or "REDDIT") - utm_medium:
cpcfor all paid Reddit campaign formats,socialfor organic Reddit posts - utm_campaign: lowercase hyphen-separated, e.g.
spring-launch-2026orq2-brand-awareness - utm_content: subreddit or ad group identifier, e.g.
r-marketingorr-entrepreneur - utm_term: not typically used for Reddit Ads (Reddit targets by interest and subreddit, not keyword); omit unless you have a specific reason to populate it
For a full cross-channel naming reference that covers all five UTM parameters, see the UTM naming conventions guide. For the GA4 case sensitivity mechanics that explain why lowercase enforcement matters, see Are UTM parameters case sensitive in GA4?
FAQ
- Does Reddit have auto-tagging like Google Ads?
- No. Reddit has no equivalent to Google's gclid auto-tagging that automatically sends structured source and medium data to GA4. Reddit's Pixel provides conversion data back to Reddit Ads for bidding and reporting within Ads Manager, but it does not populate GA4's Traffic Acquisition reports with source, medium, or campaign data. UTM parameters are the only mechanism for Reddit Ads attribution in GA4.
- What utm_medium should I use for Reddit Ads — cpc or paid-social?
- Use
utm_medium=cpcfor reliable routing to GA4's default Paid Social channel group without any custom configuration. GA4's built-in Paid Social channel group conditions match a social platform source (likereddit) combined with a paid medium indicator — andcpcis the most consistently matched paid indicator in GA4's default channel definitions. Usingutm_medium=paid-socialworks if you create a custom GA4 channel group rule for it, but requires ongoing maintenance.cpcis the safer default for most setups. - How do I track which subreddit an ad group targets?
- Use
utm_contentto encode the subreddit name or ad group identifier. The recommended convention is to use the subreddit slug prefixed withr-to avoid URL encoding issues with the forward slash inr/subredditformat. For example, a campaign targetingr/marketingwould useutm_content=r-marketing. In GA4's Traffic Acquisition report, addSession contentas a secondary dimension to see performance broken down by subreddit. - Will UTM parameters survive Reddit's redirect?
- In standard configurations, yes — UTM parameters are part of the destination URL that Reddit's redirect system passes through to the final page. The more common point of failure is additional redirects on your own infrastructure (CDN, link shortener, landing page platform) after Reddit's redirect. Validate the complete destination URL chain with
mlz checkbefore launch to confirm parameters are preserved through every hop. - Can I use both Reddit's Pixel and UTM parameters on the same page?
- Yes, and you should. Reddit's Pixel fires JavaScript events that report conversions back to Reddit Ads for bidding optimisation and internal Ads Manager reporting. UTM parameters are query string values that GA4 reads on session start to populate Traffic Acquisition reports. They are independent systems serving different purposes and do not interfere with each other. Using both gives you Reddit Ads' own conversion optimisation signals plus complete GA4 attribution for cross-channel analysis.
Related reading
Build Reddit UTM links from the terminal
Pass --source "reddit" --medium "cpc" to mlz build and get a normalised, validated URL ready for your Reddit Ads destination field. Lowercase normalisation means GA4 routes every session to the Paid Social channel group correctly. Add --content "r-subreddit" to track subreddit-level performance, and --validate --inspect to confirm the destination is live and OG tags are present before your campaign starts spending.
npm install -g missinglinkz
Free plan: 50 links/month. No credit card. See the UTM tracking for developers guide for the full programmatic workflow.