Knowledge Base / "(not set)" session source in Google Analytics 4 reports

"(not set)" session source in Google Analytics 4 reports

Topics:

Server-Side Tracking
Ad Tracking and Attribution

Question

Why does the "session source / medium" dimension show "(not set)" for some sessions and conversions in my GA4 report, and how do I find out where those visitors actually came from?

Answer

A "(not set)" session source in Google Analytics 4 means that GA4 could not attach the event to a session with known traffic source information. Session source and medium are recorded once, at the start of a session, from the session_start event. If an event arrives without a corresponding session start, or outside of an active session, GA4 has nothing to attribute it to and reports the session source as "(not set)".

This is different from "direct / (none)", where a session did start but carried no referrer or UTM parameters, and from "Unassigned", which is the channel group GA4 uses when the source and medium don't match any default channel rule. "(not set)" is specifically a missing session, not an unrecognised one.

Common causes of a "(not set)" session source

Session timeout. GA4 ends a session after 30 minutes of inactivity by default. A visitor who leaves a checkout or booking page open, returns later and completes the purchase triggers a conversion event with no new page view before it, so the event falls outside of any session. This is the most frequent cause for purchase and lead events. The timeout can be extended in the GA4 property settings; see Google's guide to adjusting the session timeout.

Server-side and offline events. Conversions sent through the Measurement Protocol, such as payments confirmed by a webhook or offline sales imported later, often arrive hours after the visit. Unless they carry a valid session_id from an active session, GA4 reports their session source as "(not set)". Able CDP's server-side Google Analytics integration handles this by recording the original client and session identifiers and sending them with each conversion.

Processing delay. Session source is populated during data processing, which can take 24 to 48 hours. Recent conversions in standard reports, and all events in the Realtime report, can show "(not set)" temporarily and resolve on their own.

How to find the real traffic source

Start by identifying the affected sessions in GA4's User Explorer, where you can open an individual journey and see whether the conversion fired after a long gap or without a preceding page view. The Able Dashboard shows the same visitor's full history, including the first-touch source, which is useful for confirming the pattern.

For the complete picture, Able CDP keeps first-touch and last-touch attribution for every lead and purchase independently of GA4 sessions. Basic first-touch attribution reporting is available by clicking "Explore" next to a chart in the Able Dashboard.

To dig into a specific set of "(not set)" conversions, connect Able's marketing attribution MCP server to Claude, ChatGPT or another AI assistant. You can then ask in plain language which sources the affected purchases originated from, break them down by UTM campaign or referrer, or compare them with the sessions GA4 did attribute, without writing queries or exporting data. The analytics MCP server is the recommended way to investigate attribution gaps because it works directly on Able's visitor-level data.

If you need the raw data in your own warehouse, the BigQuery connector syncs every conversion with its UTM parameters and referrer URLs, so you can join the "(not set)" conversions against their known traffic sources by visitor ID.

What's next?