How to Build a Simple UTM Campaign Report in GA4 (Without a Data Analyst)

You tagged every link. You sent the campaign. Now you open GA4 and stare at a wall of menus, cards, and numbers that don’t answer the one question you actually have: which campaign worked?
I’ve watched smart marketers freeze at this exact moment. Not because they’re bad at their job. Because GA4 looks like it was designed for a data team, not for the person who built the links.
Here’s the thing. You do not need a data analyst to build a UTM campaign report in GA4. You need about 15 minutes and the right two reports. I’ll show you both. The fast one for a quick answer, and a proper custom report you can reuse every month.
Real talk: I built these exact reports for my own campaigns before linkutm existed. The steps below are the ones I still use.
What You Need Before You Build the Report
Clean UTM tags. That’s the whole prerequisite. GA4 can only report on data you actually sent it.
If your links weren’t tagged, or were tagged inconsistently, no report will save you. GA4 will bucket those clicks into “Direct” or “(not set)” and your campaign will look invisible. So before you touch any report, confirm two things.
First, every campaign link carries a source, medium, and campaign value. If you need a refresher on creating them, I covered how to build tagged links with the Campaign URL Builder step by step.
Second, your team uses the same spelling every time. “facebook” and “Facebook” become two rows in GA4. “spring_sale” and “spring-sale” split your data in half. The fix is boring but it works: lock down a naming convention and make everyone follow it.
One honest limitation here. If past campaigns were tagged messily, this report won’t retroactively clean them. GA4 stores what it received. You can only fix tagging going forward.

The Fastest Report: Traffic Acquisition
The quickest UTM campaign report in GA4 already exists. It’s called Traffic acquisition, and it’s a standard report you don’t have to build.
Use this when you want a fast answer: which campaigns drove sessions, engagement, and conversions. Here’s the path.
- Open GA4 and click Reports in the left sidebar.
- Go to Acquisition, then Traffic acquisition.
- At the top of the table, find the dimension dropdown. It usually defaults to “Session default channel group”.
- Click it and switch to Session campaign. Now every row is one of your campaigns.
- To narrow further, click the blue + next to the dimension and add Session source / medium as a secondary dimension.
That’s it. You now see sessions, engaged sessions, engagement rate, and key events per campaign. Sort by key events to see which campaign actually drove action, not just clicks.
The trade-off with this report: it’s fixed. You can change dimensions on the fly, but you can’t save a custom layout or combine four dimensions at once. For that, you need an Exploration. More on that below.

Which UTM Parameter Shows Up Where in GA4
GA4 renames your UTM parameters. This trips up everyone. Your utm_source does not appear as “utm_source” anywhere in the interface. It becomes “Session source”.
Here’s the full map so you always know which dimension to pick.
| What you tagged | GA4 dimension to select |
|---|---|
| utm_source | Session source |
| utm_medium | Session medium |
| utm_campaign | Session campaign |
| utm_content | Manual ad content |
| utm_term | Manual term |
A few notes that save hours. “Session” versions tie the value to the visit that started the session, which is what you want for campaign reporting. GA4 also has “First user” versions of these dimensions, which credit the very first time someone arrived. Use Session dimensions for campaign performance. Use First user dimensions when you care about which campaign originally acquired a customer.
Your campaign name lives in the utm_campaign value, so “Session campaign” is the dimension you’ll reach for most. The one limitation: utm_content and utm_term only appear in Explorations and some custom reports, not in every standard report card.
Build a Reusable Campaign Report With an Exploration
Explorations are where GA4 stops being a dashboard and starts being a report builder. This is the part people assume needs an analyst. It doesn’t.
Use an Exploration when you want a custom campaign report you can save, reuse, and export every month. Follow these steps exactly.
- In the left sidebar, click Explore.
- Click Free form to start a blank report.
- Find the Variables column on the left. Next to Dimensions, click the + sign.
- Search and tick: Session campaign, Session source / medium, and Session medium. Click Import.
- Next to Metrics, click the + sign. Tick Sessions, Engaged sessions, Engagement rate, Key events, and Total revenue if you track it. Click Import.
- Now drag Session campaign from Variables into the Rows box in the middle Settings column.
- Drag Sessions and Key events into the Values box.
- Your table builds instantly. Each row is a campaign with its real numbers.
Want to compare two campaigns side by side? Drag Session source / medium into Rows underneath Session campaign. GA4 nests the data so you see which channel inside each campaign performed best.
Rename the tab at the top to something like “Monthly Campaign Report” and it saves automatically. Next month, change the date range and it repopulates. No rebuild.
The honest catch: Explorations sample data on very high-traffic properties. For most small and mid-size accounts you’ll never hit sampling, but on big accounts your numbers can become estimates rather than exact counts.

Add Conversions So the Report Shows Results, Not Just Clicks
A campaign report that only shows sessions is half a report. The point is to see which campaign drove signups, sales, or leads. In GA4, those are key events.
To make your report show outcomes, the conversion has to be marked as a key event first.
- Go to Admin, then Events (under Data display).
- Find the event you care about, like
purchase,generate_lead, orsign_up. - Toggle Mark as key event on.
- Wait up to 24 hours for GA4 to start counting it in reports.
Once that’s on, the Key events metric in both Traffic acquisition and your Exploration fills with numbers per campaign. Add Total revenue as a metric and you can see revenue per campaign directly.

Keep one thing in mind about credit. The number GA4 assigns to each campaign depends on the attribution model GA4 applies. By default that’s data-driven attribution, which spreads credit across touchpoints. So a campaign’s key-event count is its share of credit, not always a whole conversion. That’s normal, not a bug.
Why Your Campaign Report Looks Wrong (And Quick Fixes)
If your report is empty, full of “(not set)”, or dumping everything into Direct, the problem is almost never the report. It’s the data feeding it. Here are the three issues I see most.
Everything shows as Direct or Unassigned. This means GA4 received clicks with no recognizable source. Usually the links weren’t tagged, or a redirect stripped the parameters. I broke down every cause of the Unassigned channel and how to fix each one.
Source/medium reads “(not set)”. This is a tagging or timing gap, not a reporting error. The source/medium showing (not set) issue has seven common causes, and most trace back to inconsistent campaign URLs. Around 62% of GA4 source/medium problems come from broken or messy tagged links, per Search Engine Journal’s 2024 analysis.
Numbers don’t match your ad platform. They never will exactly. GA4 counts sessions in its own way and uses its own attribution window and model. Facebook and Google Ads each count conversions their way. Treat GA4 as your neutral referee, not as a second copy of each platform’s dashboard.
A quick gut check: filter your Exploration to a single known campaign and confirm the traffic source matches what you tagged. If it does, your pipeline is healthy.
What This Setup Can and Can’t Do Without an Analyst
Let me be straight about the ceiling here, because pretending there isn’t one helps nobody.
What this setup handles well:
- Monthly campaign performance by source, medium, and campaign
- Which campaigns drive sessions, engagement, and key events
- Revenue per campaign when you track ecommerce
- A reusable report you build once and refresh forever
Where you’ll eventually want more:
- Multi-touch path analysis across long sales cycles
- Blending GA4 with CRM or ad-spend data for true ROI
- Custom channel groupings beyond GA4 defaults
- Automated alerts when a campaign tanks
For most marketers, the four bullets in the first list cover 90% of what you report on. The second list is where an analyst or a tool like Looker Studio earns its keep. You don’t need that on day one.
If waiting on GA4’s processing delay frustrates you, real-time click analytics in linkutm show campaign clicks the moment they happen, alongside your GA4 numbers. I built that because I got tired of refreshing GA4 and seeing yesterday’s data.
Frequently Asked Questions
Where do I find UTM data in GA4?
UTM data lives under Reports > Acquisition > Traffic acquisition, and inside any Exploration. GA4 renames your parameters, so look for “Session source”, “Session medium”, and “Session campaign” rather than the raw utm_ labels. Switch the table dimension to one of those to see your tagged campaigns.
Which GA4 report shows campaigns?
The Traffic acquisition report shows campaigns fastest. Open it, then change the primary dimension to Session campaign. For a custom, saveable view with multiple dimensions at once, build a Free form Exploration under the Explore menu. Both pull from the same data.
Why does my GA4 campaign report show (not set) or Unassigned?
Both mean GA4 couldn’t read a clean source for those visits. “(not set)” usually points to missing or malformed UTM tags. “Unassigned” means the traffic didn’t match any channel rule. Fix the tagging on your links and the buckets shrink. Past data won’t backfill, only new traffic improves.
Do I need an Exploration, or is the standard report enough?
The standard Traffic acquisition report is enough for a quick monthly check. Build an Exploration when you want to combine campaign, source, medium, and revenue in one saved layout, or export a clean table for a deck. Most marketers start with the standard report and graduate to Explorations within a month.
How long until UTM data shows up in GA4?
Standard reports typically update within 24 to 48 hours. Realtime shows tagged traffic within minutes, which is the fastest way to confirm a new link works. If a campaign still shows nothing after two days, the issue is almost always the tagging, not GA4.
Can I see revenue per campaign in GA4?
Yes, if you track ecommerce or assign value to your key events. Add the Total revenue metric to your Exploration and drag Session campaign into Rows. Each campaign then shows its attributed revenue, split according to GA4’s attribution model.
Start With One Clean Report
You don’t need a data team. You need clean tags and the two reports above. Build the Traffic acquisition view today for a fast answer, then spend 15 minutes on an Exploration you’ll reuse every month.
To make sure the data feeding those reports is clean from the start, tag your next campaign with linkutm’s UTM builder and watch the rows show up exactly where you expect them.