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 to get all my top Linkedin content? I regularly upload it to one Notion doc.

Go here to download it for FREE.