You build a Looker Studio dashboard with GA4 data and the average session duration shows 0:00. Or it shows wildly incorrect numbers like 0 seconds for most sessions. This is a known GA4 metric issue that surprises teams migrating from Universal Analytics. Session duration works differently in GA4. Learn more in our guide on Looker Studio Data Freshness.

How GA4 Calculates Session Duration
GA4 calculates session duration as the time between the first event and the last event in a session. A session with only one event (like a single page view with no further interaction) has 0 session duration. This is fundamentally different from UA, which calculated session duration until the last page view or interaction. Learn more in our guide on Looker Studio Audience Filters.
Why Bounce Sessions Show Zero Duration
A bounce in GA4 is a session with no engagement events. If a user lands on your page and leaves without scrolling, clicking, or triggering any GA4 events, the session contains only the session_start event. With only one event, the duration calculation is 0. This is technically correct but misleading for reporting purposes.
The Engaged Sessions vs Sessions Distinction
GA4 differentiates between sessions and engaged sessions. An engaged session is one that lasted more than 10 seconds, had a conversion event, or had 2+ page views. Non-engaged sessions (bounces) inflate your total session count while contributing 0 to average session duration. When you average duration across all sessions including bounces, the average drops significantly.

Fixing Session Duration in Looker Studio
Option 1: Filter to engaged sessions only. Add a filter in Looker Studio for Sessions per User greater than 0 or use the Engaged Sessions metric. This removes zero-duration bounce sessions from the average.
Option 2: Use Average Engagement Time instead of Average Session Duration. Average Engagement Time measures active foreground time (when the tab is visible and active). This is a more meaningful metric than total session duration because it excludes time when the user switched tabs or left the browser open.
BigQuery Approach for Accurate Duration
For precise session duration in BigQuery, calculate it from event timestamps directly. Group events by session_id and user_pseudo_id, then subtract the min event_timestamp from the max event_timestamp. This gives you actual time between first and last event per session, filtered to sessions with more than one event.
Practical Recommendations
- Report on Average Engagement Time rather than Average Session Duration in all GA4 Looker Studio dashboards
- Add Engaged Sessions as a separate metric alongside total Sessions to show engagement quality
- If comparing to UA historical data, note that session duration calculations differ and direct comparison is misleading
- Use GA4’s Engagement Rate (engaged sessions / total sessions) as a proxy for the old bounce rate
Zero session duration is not a bug — it reflects GA4’s technically correct calculation. Understanding the model lets you choose the right metrics for your Looker Studio reports.