Skip to main content

How do I measure engagement rate and reach on X?

Engagement rate is (likes + retweets + replies + quotes) divided by impressions, times 100. Reach is the number of unique accounts that saw the post, which X does not publish, so it has to be estimated from impressions.

Engagement rate is the one with a definition everyone agrees on:

JAVASCRIPT
const m = tweet.public_metrics
const engagements = m.like_count + m.retweet_count + m.reply_count + m.quote_count
const rate = (engagements / m.impression_count) * 100

Impressions are not reach

An impression is a view. One person scrolling past a post three times is three impressions and one person reached. X publishes impressions and does not publish reach, so every reach number you see anywhere is an estimate. The usual working assumption is that reach lands somewhere around 60 to 80 percent of impressions, and the ratio moves with how much of your audience is returning rather than new.

Treat that band as a rough guide and not as a measurement. If a number matters, say which of the two it is.

What you can read on accounts you do not own

Impressions are public. X has reported view counts on public posts since 2023, so public_metrics.impression_count is there for any post you can read, and an engagement rate for a third party works the same way as for your own.

What stays owner-only is non_public_metrics, the extras that are not on the post itself: link clicks, profile clicks and video view quartiles. Those need a token for the account that wrote the post.

Related

Last reviewed 2026-10-31.