Formulas

Bounce rate formula: how GA4 calculates it

Bounce rate in Google Analytics 4 is the share of sessions that were not engaged.

That is a different definition from the one older versions of Google Analytics used, and most of the confusion about bounce rate in GA4 comes from reading the new number with the old meaning. The formula itself is a subtraction and a division.

The formula

GA4 defines engagement rate as engaged sessions ÷ sessions, and bounce rate as the rest:

Bounce rate = 1 − engagement rate = (sessions − engaged sessions) ÷ sessions

An engaged session is one that lasted longer than ten seconds, had a key event, or had at least two page views. The ten seconds is the default, and can be set anywhere from 10 to 60 seconds per web data stream, under Admin, then Data streams, then the stream, then Configure tag settings, then Adjust session timeout. Source: Google Analytics Help, Adjust the timer for engaged sessions. A session that did none of those is a bounce.

In Google Sheets, with sessions in column B and engaged sessions in column C:

=IF(B2=0, "", (B2-C2)/B2)

Format as a percentage. The old definition was single-page sessions ÷ sessions, so a page someone read for five minutes and then left was a bounce; under GA4 it is not. Do not compare a GA4 bounce rate with one from before the switch.

A worked example

Landing pageSessionsEngaged sessionsEngagement rateBounce rate
/home5,0003,00060.00%40.00%
/blog/guide2,00080040.00%60.00%
/pricing1,00076076.00%24.00%
All pages8,0004,56057.00%43.00%

The total row uses total sessions and total engaged sessions: =(B5-C5)/B5, which is 3,440 ÷ 8,000 = 43.00%.

The common mistake

=AVERAGE(E2:E4) returns 41.33%. The site figure is 43.00%.

An average of page rates gives the pricing page, with 1,000 sessions, the same weight as the home page, with 5,000. Here it understates the bounce rate; with a different mix it could overstate it. Divide totals, not rates, and do the same when you combine channels or weeks. GA4's own reports already do this for any row that totals others, which is why the figure in the interface will not match an average of the rows beneath it.

What counts as good

It depends on what the page is for. A blog post that answers the question in the first paragraph can have a high bounce rate and be doing its job. A category page with a high bounce rate is losing people who came to browse. Compare pages of the same kind with each other and with their own history. A published figure, if you want one for comparison: the median GA4 bounce rate across the agency accounts AgencyAnalytics reports on was 56.15% for US sites and 49.16% for UK sites in August 2025, with Advertising and Marketing sites at 61.43% and Retail at 45.35% (AgencyAnalytics, 2025); Orbit Media's earlier study of 65 sites put the average engagement rate at 55%, which is a 45% bounce rate (Orbit Media). Conversion rate is usually the more useful number for a page that is meant to sell.

Keeping the inputs current

A scheduled Fresh Sheets report can keep Sessions and Engaged sessions by landing page in a tab of its own, for example one called GA4.

Fresh Sheets replaces that tab's contents on every refresh, so keep your formulas on a separate tab. This version finds each column by its heading, so it still works if you add a field and the columns move:

=1 - SUM(INDEX('GA4'!A:Z, 0, MATCH("Engaged sessions", 'GA4'!1:1, 0))) / SUM(INDEX('GA4'!A:Z, 0, MATCH("Sessions", 'GA4'!1:1, 0)))
Start free trial

30 days of Plus, free from sign-up. No card needed.

Sign in with Google or a work or school Microsoft account.

Add to Google Sheets

Prefer to stay in Google Sheets? Add the add-on and start from the Extensions menu.