TL;DR, Quick Answer
7 min readVirality rate divides shares by the number of times a post was seen, then multiplies by 100. No platform returns it as a field, so you assemble it yourself from two numbers the platform does return. Choosing impressions as the denominator produces a smaller number than choosing reach, because impressions count the same person twice. LinkedIn is the only major API that hands you both in one object, as impressionCount and uniqueImpressionsCount. Meta has deprecated impressions on Instagram media created after July 2, 2024, and marks post_impressions on Facebook as deprecated above Graph API v25, so the impressions denominator is quietly disappearing on both.
What is virality rate?
A post's virality rate is the share of its audience that passed it on, written as shares divided by the number of times the post was seen. It is a spread metric, not an interest metric. A like tells you someone stopped. A share tells you someone put their own name behind your post and handed it to an audience you do not own.
That distinction matters because shares are the only interaction that grows the denominator of the next measurement. Everything else happens inside the reach you already had.
No platform returns this metric. There is no virality_rate field in the Instagram Graph API, no virality column in LinkedIn's share statistics, no such metric in the YouTube Analytics API. It is a formula that analysts assemble from two numbers the platform does publish, which is exactly why two tools can report two different virality rates for the same post.
What is the virality rate formula?
The formula is shares divided by the number of times the post was seen, times 100:
virality rate = (shares / impressions) * 100Some analysts use reach instead:
virality rate = (shares / reach) * 100A post with 40 shares and 20,000 impressions has a virality rate of 0.2 percent. The same post, if those 20,000 impressions came from 8,000 unique accounts, has a virality rate of 0.5 percent against reach. Same post, same shares, one number two and a half times the other.
This is the same structural problem that makes engagement rate impossible to compare across tools, where the denominator can be followers or reach. Virality rate inherits it, with the added difficulty that the numerator is also ambiguous.
Should the denominator be impressions or reach?
Reach is the better denominator, and impressions is the more available one.
Meta states the difference plainly in its own Instagram documentation, describing reach as the "Number of unique Instagram users that have seen the reel at least once" and adding that "Reach is different from impressions, which can include multiple views of a reel by the same account."
That sentence is the whole argument. Virality rate asks a question about people: of everyone who saw this, what fraction passed it on? Only one of those numbers counts people. Impressions counts screens. A reel that autoplays four times for the same viewer contributes four impressions and one reach, so the impressions denominator inflates and the resulting rate deflates, by a factor that varies with format. Feed carousels, reels and stories each have different rewatch behaviour, which means an impressions-based virality rate is not even comparable between two formats on the same account.
The case for impressions is practical, not theoretical. It is the number more platforms hand you, it is not labelled as estimated, and it is stable across the reporting window. Reach is estimated on Meta surfaces and depends on a deduplication window that Meta does not publish.
Pick one, write it down, and never mix the two in the same chart. If you want the full argument about what each number counts, reach and impressions measure genuinely different things.
Which platforms publish the numbers the formula needs?
Only LinkedIn hands you shares, impressions and unique impressions in a single API response. Everywhere else you get one denominator or none.
| Platform | Share metric | Impressions | Reach or unique |
|---|---|---|---|
shares | impressions, deprecated for media created after July 2, 2024 | reach, marked estimated | |
| Facebook Pages | post_activity_by_action_type, broken out by action | post_impressions, "Deprecated above Graph API v25" | post_impressions_unique, same deprecation note |
shareCount | impressionCount | uniqueImpressionsCount | |
| X | retweet_count plus quote_count | public_metrics.impression_count | none published |
| Threads | reposts, quotes, shares | views | none published |
| TikTok | share_count | none in the Display API | none in the Display API |
| YouTube | shares | ad, card and annotation impressions only | none |
| Bluesky | repost counts in the app | none | none |
The TikTok row is the starkest. The Display API's video object exposes exactly four counters, like_count, comment_count, share_count and view_count, and there is no impressions or reach field at all. A TikTok virality rate is therefore shares over views, which is a third denominator with its own definition.
YouTube is similar in a different direction. The YouTube Analytics API does expose shares, defined as the number of times users shared a video through the Share button, but the impressions metrics it offers are ad impressions, card impressions and annotation impressions. Thumbnail impressions, the number every creator means when they say impressions, live in Studio's Reach tab and not in the API.
AdaptlyPost
Start Your 7-Day Free Trial
All-platform analytics
Social Inbox
AI-powered assistant
Bluesky publishes no first-party analytics endpoint at all, so a Bluesky virality rate has to be reconstructed from the firehose or from the app's visible counts.

What counts as a share on each platform?
The numerator is not one thing. X splits it into two fields, public_metrics.retweet_count and public_metrics.quote_count, and X's own documentation notes that repost count "Does not include quote posts." Add them and you overcount anyone who reposted and then quoted. Use only reposts and you miss the quote that actually carried the post into a new timeline.
Threads splits it three ways, into reposts, quotes and shares, where the last one covers sending a post outside Threads. Meta lists both views and shares on Threads as in development, which is its label for a metric whose definition may still change.
Instagram gives you one undifferentiated shares counter and defines it only as the number of shares of the media, with no breakdown of where those shares went. Facebook's post_activity_by_action_type is described in the Graph API reference as the number of stories created about your Page post, by action type, and the reference does not enumerate the action types on that page, so you have to inspect a live response to find the share bucket. LinkedIn warns that time-bound shareCount will not match the lifetime figure, because the time-bound data excludes instant reposts.
So before the denominator argument even starts, five platforms disagree about what a share is.
Where the inputs are quietly disappearing
Impressions is being retired underneath this formula on both Meta surfaces.
The Instagram media insights reference states that impressions is deprecated for media created after July 2, 2024, and remains available only for media created before that date. Meta's replacement, views, is described as the total number of times the media has been played on Instagram, which is a plays number rather than an on-screen number. Instagram's move from impressions to views changed what the denominator counts, not just its name.
On Facebook, the Graph API insights reference marks both post_impressions and post_impressions_unique as "Deprecated above Graph API v25." That is the post-level impressions number and the post-level reach number, on the same deprecation notice.
If your virality rate is built on impressions, it has a shelf life on Meta surfaces. A rate built on reach or on views will survive longer, at the cost of not being comparable to the numbers you calculated last year.

What is a good virality rate?
Neither Meta, LinkedIn, X, TikTok nor YouTube publishes a benchmark for virality rate, because none of them defines the metric. Any industry average you see quoted comes from a vendor's own sample of the accounts it happens to manage, calculated with a denominator that vendor chose.
The usable version is internal. Fix the denominator, calculate the rate for every post over a long enough window, and compare each new post against your own distribution. A post in your top decile for virality rate is telling you something real about the format and the hook, regardless of whether 0.4 percent is good in the abstract.
Frequently asked questions
Is virality rate the same as amplification rate?
They are the same shape with different denominators. Amplification rate as commonly written divides shares by follower count, which measures spread relative to the audience you own. Virality rate divides shares by impressions or reach, which measures spread relative to the audience a post actually reached. A post that reached far beyond your followers can show a high amplification rate and a low virality rate at once.
Can I calculate virality rate on TikTok?
You can calculate shares over views. The TikTok Display API video object returns share_count and view_count and no impressions or reach field, so views is the only denominator available through the API. Label it as such, because a views-based rate is not comparable to an impressions-based rate on another network.
AdaptlyPost
Start Your 7-Day Free Trial
All-platform analytics
Social Inbox
AI-powered assistant
Does a repost with a comment count as a share?
That depends on the platform and you have to decide. X counts it in quote_count, separately from retweet_count, and its documentation says the repost count excludes quote posts. Threads counts it in quotes, separately from reposts. If you include quotes in your numerator, include them on every platform and every period.
Why do two tools report different virality rates for the same post?
Because one of them divided by impressions and the other divided by reach, or one counted quote posts in the numerator and the other did not. No platform defines the metric, so every tool picks its own inputs. Ask any vendor which two fields they divide before comparing their number to yours.
Does Instagram still return impressions?
Only for older media. The Instagram media insights reference states the metric is deprecated for media created after July 2, 2024, and still available for media created before that date. New posts return views, reach and shares instead.
Which API gives me every input in one call?
LinkedIn's organizationalEntityShareStatistics endpoint returns shareCount, impressionCount and uniqueImpressionsCount in the same totalShareStatistics object, so you can compute both denominators from a single response. Note that the endpoint returns organic data only within a rolling 12-month window, and that sponsored activity is excluded.
How does virality rate differ from engagement rate?
Engagement rate divides interactions like likes and comments by followers or reach, the same denominator problem that makes it hard to compare across tools. Virality rate divides only shares by impressions or reach, isolating the one interaction that grows the audience beyond the people already reached. Both numerators are ambiguous: LinkedIn counts clicks, likes, comments and shares as engagement, and shares are counted differently on every platform.
Why can't I compare virality rate across formats like reels and carousels?
Feed carousels, reels and stories each have different rewatch behaviour, and impressions count every replay while reach counts a person once. A reel that autoplays four times for the same viewer racks up four impressions and one reach, so the impressions-based rate drops by a factor that shifts with the format. Use reach as the denominator if you need to compare virality rate across formats on the same account.
Does LinkedIn's time-bound shareCount match the lifetime figure?
LinkedIn's time-bound shareCount does not match the lifetime figure. LinkedIn's own documentation says the time-bound data excludes instant reposts, which explains the gap. Treat the time-bound number as a partial count, not a substitute for the lifetime one.
What replaced impressions on Instagram?
Views. Meta describes views as the total number of times the media has been played on Instagram, a plays number rather than an on-screen number like impressions was. New Instagram posts return views, reach and shares in place of impressions.
Put this into practice with AdaptlyPost
Was This Article Helpful?
Let us know what you think!
See us more often in Google
One click marks AdaptlyPost as a preferred source, so our articles sit higher in your Top Stories, AI Mode, and AI Overviews.
Before you go...
AdaptlyPost
Schedule your content across all platforms
Manage all your social media accounts in one place with AdaptlyPost.
All-platform analytics
Social Inbox
AI-powered assistant
Related Glossary Terms


Social Media Engagement Rate and Average Shares per Post
Engagement rate divides interactions by followers or by reach. Where average shares per post sits in that formula, plus benchmarks by industry.


How a Bluesky threadgate Decides Who Can Reply to a Post
A Bluesky threadgate limits replies to mentioned users, followers, people you follow or a list. How the record works, and the postgate that stops quotes.


Why Your Social Media Scheduler Keeps Disconnecting Accounts
A social media scheduler keeps disconnecting when a token expires or dies early. Token lifetimes for Meta, LinkedIn, X and TikTok, and what kills them.
Related Articles


What Instagram's content_publishing_limit Endpoint Returns
Instagram's content_publishing_limit endpoint returns quota_usage plus a config block holding quota_total 50 and quota_duration 86400 seconds.


The Facebook Long Lived Access Token and Its 60-Day Clock
A Facebook long lived access token lasts about 60 days, and the Page token you derive from it has no expiry date at all. The exchange call and the caveats.


The Instagram Caption Limit Meta's API Actually Enforces
Meta sets the Instagram caption limit at 2200 characters, 30 hashtags and 20 @ tags, and returns code 36004 subcode 2207010 when a caption runs long.

