On the surface, everything is fine.
You add UTMs to your email links. GA4 picks them up. Traffic appears under email. Campaigns have sessions, conversions, revenue. Looks clean enough.
So the team thinks: ok, we can measure email now.
Then you send a campaign, check the report, and something feels off. Clicks are there. Sales are there. But part of the traffic shows up as direct.
Cool. Let’s look deeper.
This often breaks on mobile email clients: Gmail app, Outlook app, Apple Mail, and others. A person taps a link in the email, lands on your website, but part of the context can get lost on the way. GA4 records the visit as direct.
No clean source. No useful medium. Just a user who appeared from nowhere.
If your email audience is mostly mobile, this becomes a real reporting problem. Email drives people to the site, but part of its impact quietly disappears into direct.
From the outside it looks like:
“Email is not performing that well.”
But the real issue might be:
“We are not seeing all email traffic correctly.”
I’ve seen this many times as an external Head of Marketing Analytics. The team debates whether email is worth the budget. Someone compares email to paid search. Someone says campaigns are underperforming.
Then we check BigQuery and see a direct traffic spike right after the email send.
Same timing. Similar behavior. Same landing pages. Mobile-heavy traffic.
The channel did not disappear. The attribution did.
What I would fix first:
- Enforce UTMs on every email link: utm_source, utm_medium, utm_campaign at minimum.
- In BigQuery, use collected_traffic_source or event_params for session attribution, not traffic_source - that field is about the user’s first source, not the current session.
- Keep a clear email send calendar.
- Check direct traffic spikes in the first hours after each campaign.
- Compare those sessions by landing page, device, timing, conversion rate, and behavior.
Then email stops being a channel that “seems to work”. You can measure open-to-conversion, compare campaigns, defend the budget, and understand what email really contributes.
Email attribution looks solved when you only look at the standard report.
In BigQuery, you often find that part of email has been sitting inside direct for months.

Want all my best GA4-BQ queries in one place? I turned them into a Chrome extension — top SQL queries you can search and copy in seconds.
Go here to install it for FREE.
Prefer the web version? It’s here.

