Engagement rate formula: social media and GA4
Engagement rate means two different things depending on who is asking.
On social media it is interactions as a share of an audience. In Google Analytics 4 it is the share of sessions that counted as engaged. Both are simple divisions, and in both the mistakes come from the denominator.
The formula
For a social post:
Engagement rate = interactions ÷ audience
Interactions are likes, comments, shares and saves. The audience is one of three numbers, and you have to say which: followers, reach (people who saw the post) or impressions (times it was shown). In Google Sheets, with interactions in B2 and the audience in C2:
=IF(C2=0, "", B2/C2)
For a website in GA4:
Engagement rate = engaged sessions ÷ sessions
GA4 counts a session as engaged when it lasts longer than 10 seconds, has a key event, or has two or more page or screen views (Google Analytics Help, Engagement rate and bounce rate). Bounce rate is the opposite: the share of sessions that were not engaged.
A worked example
One post, three denominators:
| Audience | Size | Interactions | Engagement rate |
|---|---|---|---|
| Followers | 40,000 | 1,200 | 3.00% |
| Reach | 15,000 | 1,200 | 8.00% |
| Impressions | 24,000 | 1,200 | 5.00% |
The post did not change between rows. Only the choice of what to divide by did, and the answer moved from 3% to 8%.
For the website version, two channels in one month:
| Channel | Sessions | Engaged sessions | Engagement rate |
|---|---|---|---|
| Organic Search | 6,000 | 3,900 | 65.0% |
| Paid Social | 2,000 | 700 | 35.0% |
| Total | 8,000 | 4,600 | 57.5% |
The total row divides total engaged sessions by total sessions:
=IF(SUM(B2:B3)=0, "", SUM(C2:C3)/SUM(B2:B3))
The common mistake
Averaging rates. The mean of 65.0% and 35.0% is 50.0%, but the site's real engagement rate that month was 57.5%, because organic search brought three times as many sessions. Always add up the counts and divide once.
On social, the matching mistake is comparing your rate with a published one built on a different denominator. Rival IQ's benchmark report, for example, divides interactions by follower count (Rival IQ, 2025 Social Media Industry Benchmark Report), so its figures will sit well below a rate you worked out per reach.
What counts as good
It depends on the platform, the denominator and, for websites, on how many visitors arrive from places that were never going to read on. Your own rate over the last few months, split by channel, is the useful comparison. A bounce rate page covers the same GA4 numbers from the other side.
Keeping the inputs current
For social engagement, work from the platform's own export. The website version comes from Google Analytics 4: a scheduled Fresh Sheets report can keep Sessions and Engaged sessions by Channel group 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 adds up the counts rather than averaging a rate column, and finds each column by its heading, so it still works if a field is added and the columns move:
=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)))