Many analysts begin their session logic in BigQuery by filtering for session_start. It feels intuitive, structured, and aligned with GA4’s terminology. Unfortunately, it also introduces one of the most common sources of inaccurate session counts.

Why the issue appears:

• The session_start event is not guaranteed to fire for every session. Mobile SDK delays, offline activity, background launches, or atypical event sequences can all result in a valid session without this marker.

• Some events contain ga_session_id but never receive a corresponding session_start. When you rely only on the event, you overlook real sessions that GA4 did track internally.

A more dependable approach:

• Treat each combination of user_pseudo_id and ga_session_id as a unique session
• Apply your time filter
• Count distinct pairs instead of relying on a single event signal

This method reflects GA4’s internal logic far more accurately and dramatically reduces session undercounting.

If you want reliable analytics, avoid shortcuts. Build sessions explicitly.

Want a stronger data analyst role or a raise? Grab the FREE Product Analyst Playbook and get the exact roadmap to your next offer.