# GA4 UTM Campaign Report: Source, Medium and Campaign Results

- URL: https://betteranalyst.com/data-connectors/google-analytics/utm-campaign-report
- Published: 2026-11-01
- Updated: 2026-11-01
- Author: David Bressler, Founder (https://betteranalyst.com/authors/david-bressler)

> **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.

Data source: [Google Analytics](https://betteranalyst.com/data-connectors/google-analytics)

Report on UTM-tagged campaigns in GA4 by session source, medium and campaign name: sessions, key events and revenue, plus how to catch broken tagging.

## 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

*Metrics and dimensions in this report*

| 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

1. In Better Analyst, open Connectors, choose Add Connector, then Google Analytics.
2. 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.
3. Pick the GA4 account and property from the dropdowns and click Connect. Universal Analytics properties are not supported.
4. Ask for sessions, engagement rate, key events and revenue by session source / medium and campaign for the campaign window.
5. 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.

*Sample data: October campaigns (illustrative)*

| 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

- [Google Analytics connector](https://betteranalyst.com/data-connectors/google-analytics)
- [ROAS formula](https://betteranalyst.com/metrics/roas)
- [Alerts](https://betteranalyst.com/product/alerts)
- [Better Analyst for marketing teams](https://betteranalyst.com/solutions/marketing-teams)

[Try Better Analyst free](https://betteranalyst.com/signup)

## Frequently asked questions

### Which GA4 dimension holds utm_campaign?

sessionCampaignName holds the campaign for each session; sessionSource and sessionMedium hold utm_source and utm_medium, and sessionSourceMedium combines them. First-user versions (for example firstUserCampaignName) show the campaign that first acquired the user.

### Why are my campaign sessions showing as (direct) or (not set)?

Common causes are redirects that strip query parameters, links opened in apps that drop UTMs, or tags with typos. Test the final landing URL to confirm the parameters survive.

### Are UTM values case-sensitive in GA4?

Yes. 'Email' and 'email' become separate rows, and non-standard mediums can fall out of the default channel groups. Agree on lowercase values and a fixed list of mediums.

## Related reports

- [GA4 Channel Performance Report: Traffic to Revenue](https://betteranalyst.com/data-connectors/google-analytics/channel-performance-report)
- [Ad Spend Pacing Report in Google Sheets: Budget vs Spend](https://betteranalyst.com/data-connectors/google-sheets/ad-spend-pacing-report)
