What actually drives engagement on X
We scan posts across our tracked X catalog and measure every one against its own author's median, so format and timing effects show through instead of account size. Everything below is an association observed in that sample, not a proven cause, and where a difference is too small to matter we say so instead of leaving it out.
The short version
Across 1,673,303 original posts from 58,046 tracked accounts, every post is compared with the same account's other posts, so account size drops out of the comparison and what is left is the format or the timing. Each account counts once, however much it posts. Nothing we can measure moves engagement by more than 2% either way once the comparison runs account by account. On this data, format and timing are not the lever.
- Images and video
Not measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
No measurable effect - Video specifically
Not measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
No measurable effect - How many images
Not measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
No measurable effect - Outbound links
Not measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
No measurable effect - Post length
Not measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
No measurable effect - Hashtags
Not measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
No measurable effect - Mentioning other accounts
Not measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
No measurable effect - Posting client
Not measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
No measurable effect - Gap since the last post
Not measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
No measurable effect - Threads
Not measurable. X exposes the conversation link on almost none of the posts we sample, so we cannot separate posts that open a thread from posts that stand alone. We would rather say that than publish a thread finding built on a handful of posts.
No measurable effect
Every dimension we test appears in this list, including the ones where the answer was "no difference". Bar length is the size of the effect on a single scale shared by every chart on this page.
Is your engagement rate good?
Work out your own first: take the median number of likes, reposts, replies and quotes across your last 20 original posts, divide by your follower count and multiply by 100. Median, not average, so one good post does not rewrite your baseline. Then find that number on the ladder below.
Show the percentile table
| Percentile | Engagement rate |
|---|---|
| 10th percentile | 0.002% |
| 25th percentile | 0.012% |
| 50th percentile | 0.08% |
| 75th percentile | 0.43% |
| 90th percentile | 2.10% |
| 99th percentile | 160.7% |
| Band | Engagement rate | Accounts |
|---|---|---|
| Top 1% | 160.7% and above | 361 of 36,054 |
| Top 10% | 2.10% to 160.7% | 3,245 of 36,054 |
| Top 25% | 0.43% to 2.10% | 5,408 of 36,054 |
| Above the median | 0.08% to 0.43% | 9,014 of 36,054 |
| Below the median | 0.012% to 0.08% | 9,014 of 36,054 |
| Bottom 25% | below 0.012% | 9,014 of 36,054 |
This ladder is built from the 36,054 accounts in our tracked X catalog with enough scanned posts to measure, every one of them above 948 followers, with a median of 98K. It is not a sample of X as a whole, and it is not representative of small accounts: engagement rate falls as follower counts rise, so a smaller account will normally place higher here than the comparison really justifies. Use it to locate a large account among its peers, not to grade a new one.
Follower count is not reach. For the median account in this group a typical post is seen by about 5.02% of its follower count, and 1.23% of those impressions turn into an interaction. That is why the follower-based rates on this page look so much smaller than the ones quoted in social media guides, which usually divide by impressions instead.
A percentile is a rank inside this group, not a grade. It says how many of the accounts we measure sit below a given rate, and nothing about whether that rate is good for your audience, your niche or what you post.
Every dimension we tested
Each bucket is compared with the same accounts' other posts, so a bucket below zero underperformed the people who posted it rather than underperforming X as a whole. Every chart shares one scale, the whisker is the 95% confidence interval, and the evidence column counts accounts rather than posts. Note the buckets overlap: a post with video is also a post with media.
Images and video
Not measurableNot measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
| Images and video | Effect chart | Effect | 95% interval | Accounts |
|---|---|---|---|---|
| With image or video(not conclusive) | +102% | +97% to +106% | 20K | |
| Text only(not conclusive) | -48% | -49% to -47% | 23K |
Video specifically
Not measurableNot measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
| Video specifically | Effect chart | Effect | 95% interval | Accounts |
|---|---|---|---|---|
| With video(not conclusive) | +48% | +46% to +50% | 24K | |
| No video(not conclusive) | -28% | -29% to -27% | 18K |
How many images
Not measurableNot measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
| How many images | Effect chart | Effect | 95% interval | Accounts |
|---|---|---|---|---|
| 2-3 images(not conclusive) | +9% | +7% to +10% | 13K | |
| 4+ images(not conclusive) | +3% | +1% to +4% | 7.6K | |
| 1 image(not conclusive) | -7% | -8% to -6% | 9.2K |
Outbound links
Not measurableNot measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
| Outbound links | Effect chart | Effect | 95% interval | Accounts |
|---|---|---|---|---|
| No link(not conclusive) | +80% | +77% to +83% | 14K | |
| With a link(not conclusive) | -43% | -44% to -42% | 19K |
Post length
Not measurableNot measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
| Post length | Effect chart | Effect | 95% interval | Accounts |
|---|---|---|---|---|
| Over 280 characters(not conclusive) | +14% | +13% to +16% | 19K | |
| 180 - 280 characters(not conclusive) | -2% | -3% to -1% | 25K | |
| 80 - 180 characters(not conclusive) | -4% | -4% to -3% | 31K | |
| Under 80 characters(not conclusive) | -5% | -6% to -4% | 24K |
Hashtags
Not measurableNot measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
| Hashtags | Effect chart | Effect | 95% interval | Accounts |
|---|---|---|---|---|
| No hashtags(not conclusive) | +11% | +9% to +12% | 12K | |
| 1 hashtag(not conclusive) | -6% | -7% to -4% | 15K | |
| 2 hashtags(not conclusive) | -6% | -8% to -5% | 8.2K | |
| 3+ hashtags(not conclusive) | -7% | -9% to -6% | 6.5K |
Mentioning other accounts
Not measurableNot measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
| Mentioning other accounts | Effect chart | Effect | 95% interval | Accounts |
|---|---|---|---|---|
| No mentions(not conclusive) | +22% | +20% to +25% | 9.6K | |
| 1 mention(not conclusive) | -14% | -15% to -12% | 15K | |
| 2+ mentions(not conclusive) | -22% | -24% to -20% | 6.5K |
Posting client
Not measurableNot measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
| Posting client | Effect chart | Effect | 95% interval | Accounts |
|---|---|---|---|---|
| X app(not conclusive) | +18% | +15% to +21% | 5.2K | |
| Scheduler or API(not conclusive) | -9% | -12% to -7% | 7.5K |
Gap since the last post
Not measurableNot measurable yet. No bucket here clears both tests we require - at least 30 independent accounts behind it, and a confidence interval that stays on one side of zero. Until both hold, a difference here cannot be told apart from ordinary variation between accounts.
| Gap since the last post | Effect chart | Effect | 95% interval | Accounts |
|---|---|---|---|---|
| More than a day after the last post(not conclusive) | +7% | +6% to +8% | 26K | |
| 6 - 24 hours after the last post(not conclusive) | +4% | +3% to +5% | 33K | |
| 1 - 6 hours after the last post(not conclusive) | 0% | 0% to +1% | 31K | |
| Within an hour of the last post(not conclusive) | -13% | -14% to -12% | 26K |
Threads
Not measurableNot measurable. X exposes the conversation link on almost none of the posts we sample, so we cannot separate posts that open a thread from posts that stand alone. We would rather say that than publish a thread finding built on a handful of posts.
| Threads | Effect chart | Effect | 95% interval | Accounts |
|---|---|---|---|---|
| Opens a thread(not conclusive) | +19% | +17% to +22% | 10.0K | |
| Single post(not conclusive) | -16% | -18% to -14% | 4.4K |
When posts land
By hour posted (UTC)
Across 1.6M posts, 21:00 UTC is the strongest hour at -1% and 04:00 UTC the weakest at -6%, a spread of 5 points. Each hour is measured against the same accounts posting at other hours, so this is a timing pattern rather than a map of when the big accounts happen to be awake.
Show engagement by hour posted, utc as a table
| Hour (UTC) | Vs author median | Posts |
|---|---|---|
| 00:00 UTC | -1% | 50K |
| 01:00 UTC | -2% | 51K |
| 02:00 UTC | -4% | 49K |
| 03:00 UTC | -4% | 53K |
| 04:00 UTC | -6% | 42K |
| 05:00 UTC | -4% | 41K |
| 06:00 UTC | -4% | 47K |
| 07:00 UTC | -5% | 51K |
| 08:00 UTC | -4% | 60K |
| 09:00 UTC | -3% | 68K |
| 10:00 UTC | -2% | 71K |
| 11:00 UTC | -3% | 77K |
| 12:00 UTC | -2% | 85K |
| 13:00 UTC | -2% | 93K |
| 14:00 UTC | -3% | 96K |
| 15:00 UTC | -2% | 99K |
| 16:00 UTC | -3% | 96K |
| 17:00 UTC | -2% | 89K |
| 18:00 UTC | -2% | 83K |
| 19:00 UTC | -2% | 79K |
| 20:00 UTC | -1% | 73K |
| 21:00 UTC | -1% | 65K |
| 22:00 UTC | -1% | 57K |
| 23:00 UTC | -2% | 51K |
By day of week
Across 1.7M posts, Sunday is the strongest day at +4% and Friday the weakest at -3%. The edge is small, but it points the opposite way to the "post on weekdays" advice most guides repeat.
Show engagement by day of week as a table
| Day | Vs author median | Posts |
|---|---|---|
| Sunday | +4% | 228K |
| Monday | 0% | 281K |
| Tuesday | -2% | 270K |
| Wednesday | -1% | 249K |
| Thursday | -2% | 242K |
| Friday | -3% | 250K |
| Saturday | +3% | 225K |
Hours are UTC because that is how the posts are stored. Your audience's local clock is what matters, so read these as a shape rather than as a schedule.
What X's own ranking code says
X open-sourced its ranking stack, so some of this does not have to be guessed at. Where our measurements agree with it we say so, and where they point somewhere else we say that too.
X's ranking weights are public. In the open-sourced code, a reply is worth 10 times a like, a quote or a DM share matches a reply, and a copy-link share is the single largest positive signal. Profile clicks and raw dwell time are weighted at zero.
Source: xai-org/x-algorithm, published January 2026 and still updated
What we see: Our engagement figure counts likes, reposts, replies and quotes equally, so an account that earns replies rather than likes is worth more to the timeline than our rate suggests. Nothing on this page can see a copy-link share at all.
Negative signals dominate. A report, a mute, a block or a 'show less often' tap carries far more weight than any positive action.
Source: xai-org/x-algorithm ranking parameters, August 2026
What we see: None of this is visible from outside X, so no engagement rate published anywhere, ours included, can see the half of the ledger that punishes accounts.
There is no coded penalty for outbound links. X's head of product said in July 2026 that links no longer need to go in a reply, and that this had been the case for over a year. No URL rule appears in the published ranking code.
Source: Nikita Bier and Elon Musk, July 2026; xai-org/x-algorithm
What we see: We still measure posts carrying a link running well below the same accounts' other posts, and the gap shows up in impressions as well as in interactions. That is consistent with the ranking code and with the statements above: the likelier explanation is what link posts tend to BE - announcements, cross-promotion, automation - rather than a rule that punishes the URL.
Ranking now runs through a Grok-based model rather than hand-written rules, with X stating the goal of removing manual heuristics entirely.
Source: X engineering, January 2026 release; Elon Musk, October 2025
What we see: There is no rule left to game, which is worth holding on to while reading anything below. What we measure is how audiences behave around a format, not a setting anybody can toggle.
Only one post per conversation branch survives into the timeline: the pipeline keeps the highest-scored candidate and drops the rest. A thread is not several chances at distribution.
Source: Analysis of the published home-mixer pipeline, January 2026
What we see: We cannot check this. X stops exposing the conversation link on almost everything we sample, which is why the threads row on this page reports itself as unmeasurable rather than guessing.
Hashtags are deprecated. X banned them in promoted posts and its own leadership has asked people to stop using them, because retrieval no longer depends on them.
Source: X, 2024-2025
What we see: Our measurement agrees with the direction: across the catalog, posts carrying no hashtags outperform the same accounts' hashtagged posts. Whether that is the hashtag or the kind of post that tends to carry one is not something an observational dataset can separate.
There is no post-age decay function in the published ranking code, which is the basis for the widely repeated claim that a post is finished after 30 minutes.
Source: xai-org/x-algorithm ranking scorer, 2026
What we see: Our hour-of-day and day-of-week spreads are far narrower than our format effects, which is what you would expect if timing mattered much less than the advice industry says it does.
Strongest engagement for their size
Ranked by where each account's engagement rate falls among the accounts closest to it in follower count, so a focused account can outrank a much larger and sleepier one. The right-hand column is the number of original posts behind each row, because a rate measured on nine posts and a rate measured on ninety are not the same claim.
| Account | Followers | Engagement rate | Vs accounts its size | Typical post | Posts measured |
|---|---|---|---|---|---|
| Khyle. @khyleri | 2.2M | 7.23% | beats 100%Top 10% for its size | 159K | 14 |
| masoq @masoq095 | 755K | 19.4% | beats 100%Top 10% for its size | 147K | 10 |
| 니키 (qdeoks) @rubberdeokies | 843K | 10.1% | beats 100%Top 10% for its size | 85K | 8 |
| ⁷⚯͛☔ @inuot7 | 9.9K | 828.1% | beats 100%Top 10% for its size | 83K | 12 |
| 茅原クレセ👑「ヒマチの嬢王」ドラマ化👑 @kayaharakurese1 | 483K | 11.8% | beats 100%Top 10% for its size | 57K | 16 |
| yes. ✭ @iAmTerrace | 9.8K | 326.8% | beats 100%Top 10% for its size | 32K | 12 |
| Fran @FranYaoi | 89K | 33.6% | beats 100%Top 10% for its size | 30K | 35 |
| Chocolate Mint @Player1_Please | 94K | 24.6% | beats 100%Top 10% for its size | 23K | 44 |
| 佐野勇斗 @sanohayatodazo | 686K | 18.4% | beats 100%Top 10% for its size | 125K | 15 |
| Nick shirley @nickshirleyy | 1.8M | 4.25% | beats 100%Top 10% for its size | 76K | 11 |
| Sarah Andersen @SarahCAndersen | 852K | 8.16% | beats 100%Top 10% for its size | 69K | 9 |
| Things that make ya go Hmmm...🤔 @RichardBouselli | 10.0K | 593.3% | beats 100%Top 10% for its size | 59K | 20 |
| 野口 衣織 @noguchi_iori | 547K | 8.68% | beats 100%Top 10% for its size | 47K | 23 |
| 𝑩𝒓𝒐𝒐𝒌𝒆 𝑪𝒉𝒓𝒊𝒔𝒕𝒊𝒏𝒆 ★ @barbiebrookeecc | 100K | 28.3% | beats 100%Top 10% for its size | 28K | 49 |
| Majid 🇵🇸 @NeverGoyAgain_ | 9.9K | 235.4% | beats 100%Top 10% for its size | 23K | 13 |
| amb :3 @amburrne | 99K | 22.8% | beats 100%Top 10% for its size | 21K | 12 |
| You Maniac เดี๋ยวจะรักซะให้บ้า @YouManiacSeries | 91K | 22.1% | beats 100%Top 10% for its size | 20K | 8 |
| 冨樫義博 @Un4v5s8bgsVk9Xp | 3.9M | 3.88% | beats 100%Top 10% for its size | 151K | 8 |
| キュルZ @kyuryuZ | 901K | 6.92% | beats 100%Top 10% for its size | 62K | 8 |
| porsuppakarn @porsuppakarn | 614K | 9.24% | beats 100%Top 10% for its size | 56K | 28 |
| ♡graciepoo♡ @9wacie | 10.0K | 493.0% | beats 100%Top 10% for its size | 49K | 37 |
| SWAGUU @seyi_vibez | 520K | 8.19% | beats 100%Top 10% for its size | 43K | 8 |
| ella⁷ @minjiiminie | 99K | 26.7% | beats 100%Top 10% for its size | 26K | 10 |
| もちもちもっちゃん @motimoti_seizin | 99K | 21.7% | beats 100%Top 10% for its size | 20K | 29 |
| Egotistical (Replaying GTA5) @TristanBeMe101 | 88K | 21.7% | beats 100%Top 10% for its size | 19K | 20 |
Buy or sell X accounts - escrow-protected
PlayerSells is an escrow marketplace for X accounts. Every deal is protected, with no middleman risk.
How we measure this
- What counts as a good engagement rate on X?
- Among the 36,054 accounts we can measure, the median engagement rate is 0.08% of followers and the top 10% start at 2.10%. Those accounts are all very large, and engagement rate falls as accounts grow, so a smaller account should expect a higher number. For an outside reference point, RivalIQ's 2024 industry benchmark report put the median X engagement rate at 0.029% of followers using the same denominator. Figures in the low single-digit percentages that get quoted elsewhere are almost always dividing by impressions, not by followers, and the two are not comparable.
- What is this built from?
- Engagement aggregates for 58,046 X accounts in our tracked catalog, built from 2,679,249 posts captured in the current scanning windows. Aggregates and best-post records are kept permanently; raw post text is not.
- How is engagement rate calculated here?
- Median interactions (likes, reposts, replies and quotes) on an account's original posts over a 30-day window, divided by its follower count. Medians rather than averages, because one viral post would otherwise make a quiet account look busy. Replies to other people, reposts and quote-posts of others are excluded from the sample - only the account's own original posts count.
- What does the multiple mean?
- Every post is measured against its own author's other posts. A 2.0x post did twice as well as that account normally does. Comparing raw like counts across accounts of different sizes would only tell you which formats large accounts happen to prefer, which is a fact about our catalog rather than about X.
- How do you decide an effect is real?
- Two tests, and a bucket has to pass both. First, at least 30 independent accounts have to have posted in and out of that bucket, because tweets from one account are not independent observations of how X behaves - accounts are. Second, the 95% confidence interval around the effect has to stay on one side of zero. Anything that fails either test is reported as no measurable effect rather than quietly left out, which is what the earlier version of this page did.
- Why compare accounts within a size band?
- Engagement rate falls predictably as accounts grow, so a flat threshold would just re-measure follower count. Each account is ranked against the follower decile it sits in, and the result is a percentile: 50 is the middle of that group, 90 is the top tenth. A percentile is uniform by construction, so the label is a statement of fact rather than an opinion about what good looks like.
- Are these effects causes?
- No, and we will not write them that way. We observe posts that already happened; we never assign an account to post at 9pm or to add a video. Every figure on this page is an association measured across a large sample, which is useful for spotting where to look and worthless as a promise. Where the number is small we say it is small.
- Do impressions cover the same posts as follower counts?
- Yes. View counts come back on effectively every original post we sample, so the impression-based rate and the follower-based rate rest on the same posts. They are still very different numbers: a typical post in our catalog reaches a small fraction of its account's follower count, so the impression-based rate is far higher. When you see an engagement rate quoted anywhere, check which denominator it used before comparing it to anything here.
- How current are these numbers?
- Counters are read at scan time and reflect the moment they were captured, not a live figure. A post keeps accumulating engagement after we look at it, so recent posts are measured slightly early. Aggregates are recomputed on a rolling schedule and the page shows when the freshest one ran.
What this cannot tell you
- This is our tracked catalog, not X. The accounts with enough scanned posts to measure skew very large, so nothing here should be read as a benchmark for a small or new account.
- We measure posts, not people. An account that engages heavily in replies to others will look quieter here than it is, because replies are excluded from the sample every rate is built on.
- Accounts choose their own formats. An account that only uses video on its best material will show a video effect that is really a material effect, and no amount of sample size fixes that - it is why these are associations and not causes.
- A difference of a few percent can be beyond statistical doubt and still be worthless. Where a dimension shows nothing, or shows something too small to matter, we say so rather than dropping it.
- We cannot see deleted posts or anything from protected accounts, and we do not model reply quality, dwell time or negative feedback - all of which X's own ranking uses and none of which is visible from outside.
Go deeper on one question
- What is a good engagement rate on X?
Engagement rate percentiles across every large X account we measure, with the median, the quartiles and the gap between mean and median.
- What time should you post on X?
Median engagement by hour of the day in UTC, all 24 hours, with the hours that measurably underperform called out.
- What is the best day to post on X?
Median engagement by day of the week, including the one weekday that measurably underperforms every other.
- Do links hurt reach on X?
Posts with an outbound link measured against posts without one - the largest single effect in the dataset.
- Do images get more engagement on X?
Posts carrying an image or video measured against text-only posts, with video split out separately.
- Does post length affect engagement on X?
Median engagement across four length bands, from under 80 characters to over 280.
- Do hashtags work on X?
Median engagement by hashtag count, and what happens to the effect once the sample is large enough to see it.
- What changed in the X research, and when?
A dated log of every finding this research loop published, revised or withdrew, with the run that changed it. Findings are corrected for multiple comparisons and re-tested on every pass.
Every finding on this page is also published as machine-readable JSON with its sample size, 95% interval and measurement date, under CC BY 4.0.