Open GA4's Reports section and navigate to Acquisition. You'll find two reports sitting next to each other: User acquisition and Traffic acquisition. Both show sources, mediums, and campaigns. Both show conversions. The numbers are different. Most people pick one, assume it's the right one, and never look at the other again.
The problem is that neither report is universally "the right one" — they answer different questions, and using the wrong one for a given business question will consistently produce misleading conclusions. Understanding the attribution logic behind each is the prerequisite for reading either correctly.
The core difference: when the channel is attributed
The fundamental distinction between the two reports comes down to a single question: which visit counts?
User Acquisition
Attributes a user to the channel that brought them to your site for the very first time. This attribution is set once and never changes, no matter how many times the user returns via different channels in the future. It answers: where did we first find this user?
Traffic Acquisition
Attributes each session to the channel that brought the user to the site for that specific visit. The attribution resets with every new session. It answers: where did this visit come from?
A concrete example makes this clear. Imagine a user who:
- Finds your site for the first time via a Google Ads click in January
- Returns two weeks later via an organic Google search
- Returns again in February directly, having bookmarked the site, and converts
In User Acquisition, this user — and their eventual conversion — is attributed to google / cpc (the paid ad that first brought them). That attribution never changes regardless of how they return.
In Traffic Acquisition, the three sessions are attributed separately: google / cpc for session 1, google / organic for session 2, and direct / none for session 3. The conversion in session 3 is attributed to direct / none.
This is why the numbers in the two reports never match. User Acquisition counts unique users grouped by their first-ever channel. Traffic Acquisition counts sessions grouped by each session's entry channel. A single user with three sessions across three channels appears once in User Acquisition and three times across three rows in Traffic Acquisition. The totals will always differ.
The dimension names are different too
Beyond the attribution logic, the two reports also use different dimension names — which is a further source of confusion when you're building custom reports or querying BigQuery.
| Dimension | User Acquisition label | Traffic Acquisition label | What it represents |
|---|---|---|---|
| Source | First user source | Session source | The referring domain or system — google, facebook, newsletter |
| Medium | First user medium | Session medium | The marketing channel type — cpc, organic, email, referral |
| Campaign | First user campaign | Session campaign | The UTM campaign name applied to the URL |
| Default channel | First user default channel group | Session default channel group | GA4's automatic channel grouping — Organic Search, Paid Search, Direct, Email, etc. |
These dimension names matter most when you're building custom Explorations in GA4 or writing queries in BigQuery. Using Session source in a report intended to show where users first came from — or vice versa — produces silently wrong results. The dimension labels are GA4's way of signalling which attribution model is in use.
When to use each report
The choice between User Acquisition and Traffic Acquisition should be driven by the business question you're answering, not by habit or preference.
Use User Acquisition when:
- Evaluating channel efficiency for new customer acquisition. If you want to know which channels are bringing genuinely new users to your business — people who had never visited before — User Acquisition is the correct report. This is the right view for measuring the effectiveness of top-of-funnel campaigns.
- Calculating lifetime value by acquisition channel. Understanding which channel brought a user originally lets you compare long-term retention, repeat purchase rate, and lifetime value across acquisition sources. A user acquired through paid search may behave very differently over 12 months than one acquired through organic, even if both converted at the same session.
- Reporting on new user growth. User Acquisition directly answers "how many new users did we acquire this month, and from where?" Traffic Acquisition cannot answer this cleanly because it counts sessions, not new users per channel.
Use Traffic Acquisition when:
- Evaluating campaign performance for a specific period. If you want to know how a paid campaign performed this month — clicks, sessions, conversions — Traffic Acquisition is correct. It attributes the session (and any conversion in that session) to the campaign that drove the visit, regardless of whether the user is new or returning.
- Understanding what's driving current traffic volume. Day-to-day traffic analysis — which channels are sending the most sessions, where is a spike or drop coming from — belongs in Traffic Acquisition. You're asking about visits, not about users.
- Reporting on returning user behaviour by channel. Traffic Acquisition captures all sessions including those from returning users. If email newsletters are your primary retention channel, Traffic Acquisition will show the sessions and conversions they drive — User Acquisition will not, because those users were likely acquired elsewhere first.
For most paid media reporting, Traffic Acquisition is the right starting point. Google Ads, Meta, and most advertising platforms attribute conversions to the session in which the ad click occurred — which aligns with Traffic Acquisition's session-level logic. Comparing GA4's User Acquisition data to your ad platform's conversion reporting will almost always produce discrepancies because they're measuring different things. Traffic Acquisition is the closer equivalent.
Lead acquisition — a third framing for B2B and service businesses
If you run a B2B business, a professional services firm, or any site where the primary conversion is a form submission or consultation booking rather than an e-commerce transaction, there's a third way to frame acquisition that neither of GA4's standard reports handles natively: lead acquisition.
Lead acquisition asks: which channel generated this lead? That sounds like a simple question, but it sits awkwardly between the two GA4 reports:
- If a lead submits a form on their first ever visit, both User Acquisition and Traffic Acquisition will attribute the lead to the same channel — there's no ambiguity.
- If a lead submits a form on their third visit, after originally finding the site via paid search and returning twice via organic, you have a genuine attribution question: does the lead belong to the channel that first brought them (User Acquisition) or the channel that brought them on the visit when they converted (Traffic Acquisition)?
Neither answer is objectively correct — they reflect different business philosophies about what "credit" means. But the practical recommendation for most lead generation businesses is:
Use Traffic Acquisition for lead reporting
Attribute the lead to the channel that drove the converting session. This aligns with how your ad platforms report conversions and makes it easier to reconcile GA4 data with Google Ads or Meta conversion counts. It's the most actionable view for optimising current campaigns.
Use User Acquisition for pipeline quality analysis
When you're asking whether leads from paid search close at a higher rate than leads from organic — a question that requires connecting your CRM pipeline data to GA4 — User Acquisition's first-touch attribution is often more useful, because it reflects the original acquisition investment.
The most robust lead attribution approach combines both: use Traffic Acquisition for volume and campaign optimisation, and User Acquisition when comparing lead quality across channels over longer time horizons. BigQuery makes it straightforward to run both analyses from the same raw data, which we'll cover in the next sections.
GA4's default channel groupings can misclassify B2B lead sources. GA4 automatically groups traffic into channels like Organic Search, Paid Search, and Email — but the rules it uses are designed for consumer e-commerce patterns. B2B traffic from LinkedIn, industry directories, or partner referrals often lands in Unassigned or gets misclassified. Always check your UTM tagging on non-Google channels and review the Unassigned row in your acquisition reports — if it's significant, there's a UTM coverage gap to fix.
How acquisition data is stored in BigQuery
When GA4 exports event data to BigQuery, both User Acquisition and Traffic Acquisition dimensions are included — as separate fields in the same event row. Understanding which field maps to which report is essential for building accurate acquisition queries.
| GA4 report dimension | BigQuery field | Attribution logic |
|---|---|---|
| First user source | user_first_touch_timestamp + collected_traffic_source.manual_source on first_visit event |
Set on the user's very first event — never changes |
| First user medium | collected_traffic_source.manual_medium on first_visit event |
Set on the user's very first event — never changes |
| First user campaign | collected_traffic_source.manual_campaign_name on first_visit event |
Set on the user's very first event — never changes |
| Session source | traffic_source.source |
Set per session — reflects the channel for that specific visit |
| Session medium | traffic_source.medium |
Set per session — reflects the channel for that specific visit |
| Session campaign | traffic_source.name |
Set per session — reflects the channel for that specific visit |
The traffic_source fields on each event row reflect the session-level channel, not the event-level channel. In BigQuery, every event in a session carries the same traffic_source values — the source, medium, and campaign that started that session. This is how you can attribute any event (including a conversion event like generate_lead) to the session channel that preceded it, without needing to join across multiple rows.
Querying User Acquisition in BigQuery
To replicate GA4's User Acquisition report in BigQuery, you need to identify each user's first-ever session and extract the channel from that session only. The cleanest way to do this is to filter for the first_visit event, which GA4 fires exactly once per user — on their very first page view.
BigQuery SQL — User Acquisition report (first-touch channel per new user)
WITH first_touch AS (
SELECT
user_pseudo_id,
event_date AS acquisition_date,
traffic_source.source AS first_source,
traffic_source.medium AS first_medium,
traffic_source.name AS first_campaign
FROM
`your-project.analytics_XXXXXXXXX.events_*`
WHERE
_TABLE_SUFFIX BETWEEN '20260101' AND '20260630'
AND event_name = 'first_visit' -- fires exactly once per user
),
conversions AS (
SELECT
user_pseudo_id,
COUNT(*) AS leads
FROM
`your-project.analytics_XXXXXXXXX.events_*`
WHERE
_TABLE_SUFFIX BETWEEN '20260101' AND '20260630'
AND event_name = 'generate_lead'
GROUP BY
user_pseudo_id
)
SELECT
f.first_source,
f.first_medium,
f.first_campaign,
COUNT(DISTINCT f.user_pseudo_id) AS new_users,
COALESCE(SUM(c.leads), 0) AS total_leads,
ROUND(
SAFE_DIVIDE(
COALESCE(SUM(c.leads), 0),
COUNT(DISTINCT f.user_pseudo_id)
) * 100, 1
) AS lead_rate_pct
FROM
first_touch f
LEFT JOIN conversions c USING (user_pseudo_id)
GROUP BY
f.first_source, f.first_medium, f.first_campaign
ORDER BY
new_users DESC
This query gives you a true User Acquisition view: new users by their first-ever channel, with the total leads those users ever generated (across all their subsequent visits), and the lead rate per channel. The LEFT JOIN means users who never converted still appear in the results — they just show zero leads.
This is where User Acquisition becomes most powerful. By joining the first-touch channel to all subsequent conversions from that user — not just conversions in the same session — you can answer questions like "users acquired via paid search: what is their lifetime lead submission rate over 6 months?" GA4's UI cannot show you this. BigQuery can.
Querying Traffic Acquisition in BigQuery
Traffic Acquisition attributes each conversion to the session in which it occurred. In BigQuery, this means joining the conversion event to the traffic_source fields on that same event row — which already carry the session-level channel.
BigQuery SQL — Traffic Acquisition report (session-level channel attribution)
SELECT
traffic_source.source AS session_source,
traffic_source.medium AS session_medium,
traffic_source.name AS session_campaign,
COUNT(DISTINCT
CONCAT(user_pseudo_id, '-',
CAST(
(SELECT ep.value.int_value
FROM UNNEST(event_params) ep
WHERE ep.key = 'ga_session_id') AS STRING
)
)
) AS sessions,
COUNT(DISTINCT user_pseudo_id) AS users,
SUM(CASE WHEN event_name = 'generate_lead'
THEN 1 ELSE 0 END) AS leads,
ROUND(
SAFE_DIVIDE(
SUM(CASE WHEN event_name = 'generate_lead'
THEN 1 ELSE 0 END),
COUNT(DISTINCT
CONCAT(user_pseudo_id, '-',
CAST(
(SELECT ep.value.int_value
FROM UNNEST(event_params) ep
WHERE ep.key = 'ga_session_id') AS STRING
)
)
)
) * 100, 1
) AS lead_rate_pct
FROM
`your-project.analytics_XXXXXXXXX.events_*`
WHERE
_TABLE_SUFFIX BETWEEN '20260101' AND '20260630'
GROUP BY
session_source, session_medium, session_campaign
ORDER BY
sessions DESC
The session count uses CONCAT(user_pseudo_id, ga_session_id) as a composite key — because ga_session_id alone is not unique across users, only unique within a user. Combining both fields gives you a globally unique session identifier to count distinct sessions accurately.
Running both together for a complete picture
For lead generation businesses, the most useful BigQuery output combines both attribution models side by side — so you can see, for each channel, both how many new users it brought in and how many converting sessions it drove.
BigQuery SQL — User acquisition vs traffic acquisition side by side
WITH user_acq AS (
SELECT
CONCAT(traffic_source.source, ' / ', traffic_source.medium) AS channel,
COUNT(DISTINCT user_pseudo_id) AS new_users
FROM `your-project.analytics_XXXXXXXXX.events_*`
WHERE
_TABLE_SUFFIX BETWEEN '20260101' AND '20260630'
AND event_name = 'first_visit'
GROUP BY channel
),
traffic_acq AS (
SELECT
CONCAT(traffic_source.source, ' / ', traffic_source.medium) AS channel,
COUNT(DISTINCT
CONCAT(user_pseudo_id, '-',
CAST(
(SELECT ep.value.int_value FROM UNNEST(event_params) ep
WHERE ep.key = 'ga_session_id') AS STRING
)
)
) AS sessions,
SUM(CASE WHEN event_name = 'generate_lead'
THEN 1 ELSE 0 END) AS leads
FROM `your-project.analytics_XXXXXXXXX.events_*`
WHERE
_TABLE_SUFFIX BETWEEN '20260101' AND '20260630'
GROUP BY channel
)
SELECT
COALESCE(u.channel, t.channel) AS channel,
COALESCE(u.new_users, 0) AS new_users,
COALESCE(t.sessions, 0) AS sessions,
COALESCE(t.leads, 0) AS leads,
ROUND(
SAFE_DIVIDE(
COALESCE(t.leads, 0),
COALESCE(t.sessions, 0)
) * 100, 1
) AS lead_rate_pct
FROM
user_acq u
FULL OUTER JOIN traffic_acq t USING (channel)
ORDER BY
sessions DESC
The output of this query gives you, for each channel: how many new users it brought (user acquisition view), how many sessions it generated (traffic acquisition view), how many leads those sessions produced, and the lead rate. Seeing all four numbers side by side is often where the most useful insights emerge — a channel with high new user volume but low session volume is good at acquisition but poor at retention; a channel with low new users but a high lead rate is producing quality converting traffic that isn't being scaled.
Common pitfalls in acquisition reporting
Acquisition reporting in GA4 and BigQuery is particularly prone to a handful of recurring errors that distort channel credit and lead to misallocated budget.
- Missing UTM parameters on paid campaigns. Any paid traffic arriving without UTM parameters gets classified as direct / none or misassigned to an incorrect channel. Always tag every paid URL — Google Ads with auto-tagging enabled, all other paid channels with manual UTM parameters. Check the Unassigned and direct / none rows in your acquisition reports for volume that shouldn't be there.
- Inconsistent UTM casing. GA4 treats
utm_source=Googleandutm_source=googleas two different sources. Standardise all UTM values to lowercase across every campaign and every team member applying tags. A lookup table in BigQuery can be used to normalise historical inconsistencies, but prevention is far easier. - Comparing User Acquisition and Traffic Acquisition numbers directly. Because they use different attribution logic and count different things (users vs. sessions), the two reports cannot be used for apples-to-apples comparison. If your paid search row in User Acquisition shows 500 users and Traffic Acquisition shows 1,200 sessions, that's not a discrepancy — it means paid search users are returning an average of 2.4 times each. That's a meaningful insight, not a data quality problem.
- Ignoring the Unassigned channel group in GA4. A large Unassigned row in either acquisition report means GA4 cannot classify that traffic into a default channel group — usually because UTM parameters don't follow a recognised pattern. This is fixable by either adjusting your UTM strategy or creating custom channel groups in GA4 Admin to capture non-standard patterns.
- Filtering BigQuery on
traffic_source.sourcewithout accounting for null values. Sessions that arrive via direct navigation often have null values in thetraffic_sourcefields rather than'direct'. When writing BigQuery queries that filter or group by source, always handle nulls explicitly —COALESCE(traffic_source.source, 'direct')— or your direct traffic will disappear from the results without an error.
Add a UTM coverage check to your regular BigQuery queries. A simple query counting sessions where traffic_source.source IS NULL OR traffic_source.source = '' gives you a running measure of how much of your traffic is arriving without source attribution. If that number is growing, something in your campaign tagging or referral exclusion setup has changed.
Choosing the right report for your stakeholders
Different stakeholders in a business typically need different acquisition views, and giving everyone the same report leads to confusion when the numbers don't match their intuition or their ad platform dashboards.
Paid media team
Traffic Acquisition, filtered to paid channels. They need to see sessions, lead volume, and lead rate by campaign — which aligns with how Google Ads and Meta report their own conversion data. User Acquisition will undercount their impact on conversions from returning users.
SEO and content team
Both reports are useful. Traffic Acquisition shows the current value of organic search sessions. User Acquisition shows how many new users organic is bringing in — a better measure of SEO's role in growing the audience rather than just serving returning users.
Business leadership
User Acquisition for new customer and new user growth metrics. Traffic Acquisition for overall lead volume and conversion rate by channel within a reporting period. Both together for a complete picture — built in BigQuery and surfaced in Data Studio where both can be shown side by side.
CRM and sales team
Neither standard report directly — but the BigQuery query joining GA4 first-touch data to CRM records via transaction ID or user ID. This is the only way to connect acquisition channel to downstream pipeline and closed revenue, which is what sales cares about most.
The most maintainable approach for businesses with multiple stakeholders is to build acquisition views in BigQuery that clearly label which attribution model they use, then surface them as separate pages or tabs in a Data Studio dashboard. That way each team gets the view that answers their question, without confusion about why the numbers look different.
Getting conflicting numbers from your acquisition reports?
Acquisition attribution is one of the most common sources of confusion in GA4 — and one of the most consequential for budget decisions. We audit GA4 acquisition setups, fix UTM coverage gaps, and build BigQuery-powered dashboards that give each team the right view of channel performance. Book a free 30-minute audit and we'll show you exactly where your current reporting is misleading you.