In the GA4 BigQuery export, session_start is often treated as the moment a visit begins. The name invites that reading, but relying on it alone distorts entry analysis and funnel timing.
session_start is a housekeeping event: it records that GA4 opened a new session after inactivity or on a new visit. It says nothing about what the user came to do. A user who follows an email link that triggers an add_to_cart API call before any page_view renders still generates a session_start, but the add_to_cart, if it is tracked (for example server-side with Robin Signals), is the event that carries the intent and value of that session.
Timing matters too. When session_start precedes the first page_view or view_item by several seconds, measures such as time on the first page or immediate conversion rate shift. The effect is largest in single-page applications and fast journeys, and it changes which touchpoint is credited as the entry.
A better approach is to model a session_first_event_timestamp in dbt. Take MIN(event_timestamp) across the events in each session, keyed on user_pseudo_id plus ga_session_id (the session ID alone is not unique across users) and excluding housekeeping events such as session_start and first_visit, then record the event name at that timestamp. Entry analysis can then group by the actual first interaction. In some implementations that first event is a click, a scroll or a custom event rather than the assumed page_view.
Where a session starts feeds everything downstream, from lifetime value models to causal estimates of conversion rates. Modelling the first meaningful event explicitly, instead of inheriting session_start, keeps that foundation aligned with what users actually did.
Viktor Kvant
Senior Web Analyst specialising in data ownership, advanced tracking implementations, and translating data into strategic business value.
Connect on LinkedIn