GA4 UTM Campaign Report: Source, Medium and Campaign Results
Summary
A GA4 UTM campaign report groups sessions by the utm_source, utm_medium and utm_campaign values on your links (sessionSource, sessionMedium and sessionCampaignName in the API) and shows sessions, key events and revenue for each. It is how you compare newsletters, partner links and paid campaigns on one scale, and it quickly exposes inconsistent tagging.
On this page
Who this report is for
Campaign and lifecycle marketers, and agencies, who tag links with UTM parameters and need to see which campaigns produced engaged traffic and conversions.
What the report includes
| Metric | Source field | Why it matters |
|---|---|---|
| Source / medium | sessionSourceMedium | Combined utm_source and utm_medium, the quickest way to spot inconsistent tags like 'Email' vs 'email'. |
| Campaign | sessionCampaignName | The utm_campaign value, grouping all links from one campaign. |
| Sessions | sessions | Traffic each campaign delivered. |
| Engagement rate | engagementRate | Filters campaigns that send many but uninterested visitors. |
| Key events | keyEvents | Goal completions credited to the campaign's sessions. |
| Revenue | totalRevenue | Revenue from those sessions, for ecommerce or paid products. |
How to build it in Better Analyst from Google Analytics
- In Better Analyst, open Connectors, choose Add Connector, then Google Analytics.
- Click Connect with Google and sign in with an account that has Viewer or Admin access to the GA4 property. Better Analyst requests read-only access.
- Pick the GA4 account and property from the dropdowns and click Connect. Universal Analytics properties are not supported.
- Ask for sessions, engagement rate, key events and revenue by session source / medium and campaign for the campaign window.
- Ask Better Analyst to list source and medium values that differ only by capitalisation or spelling, so you can fix your tagging convention.
Questions to ask
- “Show sessions, key events and revenue by campaign name for October, sorted by revenue.”
- “Which newsletter campaigns had the highest key event rate this quarter?”
- “List source/medium pairs that look like the same thing tagged differently.”
- “Compare the spring-sale campaign's revenue across email, social and partner sources.”
Sample output
Sample data for illustration, not real account data.
| Campaign | Source / medium | Sessions | Key events | Revenue |
|---|---|---|---|---|
| oct-newsletter | newsletter / email | 3,820 | 214 | $18,450 |
| fall-sale | partner-blog / referral | 1,460 | 61 | $7,320 |
| fall-sale | instagram / social | 5,930 | 89 | $9,870 |
| webinar-nov | linkedin / social | 1,120 | 176 | $0 |
Charts to use
- Revenue by campaign and source (Stacked bar chart): Each campaign's revenue split by the source that delivered it.
- Key events per 1,000 sessions (Bar chart): Normalised conversion efficiency so small campaigns can be compared with big ones.
Keep it up to date
Schedule a weekly campaign summary during active launches, delivered to the marketing Slack channel, and set an alert when a running campaign's sessions fall to zero, which usually means a broken link or removed tag.
Further reading
Frequently asked questions
Which GA4 dimension holds utm_campaign?
Why are my campaign sessions showing as (direct) or (not set)?
Are UTM values case-sensitive in GA4?
Related reports
GA4 Channel Performance Report: Traffic to Revenue
Build a GA4 channel performance report by default channel group: sessions, engagement, key events and revenue, with sample output and setup in Better Analyst.
Ad Spend Pacing Report in Google Sheets: Budget vs Spend
Track ad spend pacing from Google Sheets: spend to date vs prorated monthly budget by platform and campaign, projected month-end spend, and pacing alerts.