Understanding how different channels contribute to user acquisition vs. user retention is critical for optimizing spend and strategy. In GA4, while you get some visibility into user types, a more detailed analysis often requires BigQuery SQL.
This guide walks you through:
- Why this analysis matters
- How GA4 tracks user types
- Step-by-step: Build a New vs. Returning User breakdown by marketing channel using BigQuery
- Key insights to act on
Why This Analysis Matters
Most marketing teams ask:
- Are we just getting clicks, or are people coming back?
- Which campaigns drive long-term value, not just first visits?
- Is email working for re-engagement?
- Do paid ads convert once, or create loyal users?
By breaking down New vs. Returning Users by Channel, you can double down on channels that drive loyalty, not just top-funnel awareness.
How GA4 Tracks New and Returning Users
| Concept | Explanation |
|---|---|
| New User | Determined by GA4 using the user_first_touch_timestamp. If it’s the user’s first event, they are marked as “new.” |
| Returning User | Any session after the first one. Not tracked by default in GA4 reports, but can be derived using SQL. |
| Channels | Tracked via session_source, session_medium, session_campaign, etc. in GA4 export. |
GA4 Documentation: Measure New and Returning Users
How to Do It in BigQuery
Step 1: Start with GA4 BigQuery Export
We’ll use the events_YYYYMMDD table that includes all session data and event-level parameters.
WITH base AS (
SELECT
user_pseudo_id,
MIN(event_timestamp) AS first_seen,
user_first_touch_timestamp,
session_source,
session_medium,
session_campaign,
event_date
FROM
`your_project.analytics_XXXX.events_*`
WHERE
_TABLE_SUFFIX BETWEEN '20250801' AND '20250806'
AND event_name = 'session_start'
GROUP BY
user_pseudo_id,
user_first_touch_timestamp,
session_source,
session_medium,
session_campaign,
event_date
),
classified AS (
SELECT
*,
CASE
WHEN event_timestamp = user_first_touch_timestamp THEN 'New'
WHEN event_timestamp > user_first_touch_timestamp THEN 'Returning'
ELSE 'Unknown'
END AS user_type
FROM base
)
SELECT
session_source,
session_medium,
user_type,
COUNT(DISTINCT user_pseudo_id) AS users
FROM classified
GROUP BY 1, 2, 3
ORDER BY users DESC;
Example Output
| Channel Source | Medium | User Type | Users |
|---|---|---|---|
| cpc | New | 2,340 | |
| cpc | Returning | 980 | |
| New | 320 | ||
| Returning | 1,150 |
Interpretation:
- Google Ads (CPC) brings in lots of new users but has lower return rates.
- Email, while driving fewer new users, is excellent for bringing people back.
Key Considerations
- Attribution Window: This SQL uses first-touch attribution; customize if needed.
- Session Accuracy: Check how session_source is populated in your setup.
- Cross-device Tracking: If you’re not using User-ID, returning users on a new device may appear “new.”
Tips for Marketers
- Prioritize retention-focused campaigns (email, push) if LTV is key.
- Use GA4 Audiences to retarget Returning Users with different messaging.
- Test channel-specific onboarding flows — what makes a new user return?
