Everyone in influencer marketing quotes an engagement rate. Almost nobody says which formula produced it, and the formulas are not the same across platforms. A rate copied from an Instagram report next to a rate copied from a TikTok report, sitting in the same slide, is usually not a fair comparison, even when both numbers look precise to two decimal places.
The Social Fetch engagement endpoints return the exact formula used for each calculation, alongside the average, the median, and a volatility figure that says how much a single post skews the result. This guide walks through both endpoints using real numbers pulled from a live lookup on National Geographic's Instagram and Khaby Lame's TikTok, and covers what the response can and cannot tell you.
You'll need an API key and curl or the TypeScript SDK. New to the API? Start with the Quickstart.
Just need one account?
If you only need a single lookup, try the free Instagram engagement rate calculator or the TikTok engagement rate calculator. The API below is for when you need this on a schedule or across many accounts.
The formula is not standard
Both engagement endpoints return a formulaDescription field that states exactly what was calculated. Read it before you trust the number, because it changes by platform.
Instagram: "Engagement rate = (likes + comments) ÷ followers × 100, averaged across recent posts with visible counts."
TikTok: "Engagement rate = (likes + comments + shares) ÷ followers × 100, averaged across recent videos with visible counts."
TikTok adds shares to the numerator. Instagram does not. A share is a full participation signal TikTok is willing to count, and a likes-plus-comments rate on Instagram is missing an entire behavior TikTok treats as engagement. Putting the two rates side by side in the same slide compares different measurements, not two readings of the same thing.
| Platform | Formula | Shares counted |
|---|---|---|
| (likes + comments) / followers x 100 | No | |
| TikTok | (likes + comments + shares) / followers x 100 | Yes |
If you need one number that means the same thing on both platforms, compute it yourself from the raw per-post fields (likeCount, commentCount, and on TikTok shareCount) rather than trusting the two pre-averaged metrics to line up out of the box. For the general definition this endpoint is built on, see glossary: engagement rate.
Read an engagement audit
A minimal request against a real handle:
A trimmed version of what comes back:
The same lookup with the SDK, using its Result pattern instead of throwing:
Both routes cost 5 credits per completed lookup, more than a plain profile fetch, because the server pulls a batch of recent posts or videos and analyzes each one before returning an average. meta.creditsCharged and meta.requestId come back on every response, same as the rest of the API.
The equivalent TikTok call is GET /v1/tiktok/profiles/{handle}/engagement, or client.tiktok.getProfileEngagement({ handle }) in the SDK. Full parameters: Instagram engagement docs and TikTok engagement docs. Browse the rest of the routes in the API reference.
Average, median, and volatility
A single average hides how the number was built. Khaby Lame's TikTok sample, 10 recent videos, all usable, returned an averageEngagementRatePercent of 0.75 and a medianEngagementRatePercent of 0.5. The average sits well above the median because a couple of videos performed far better than the rest and pulled the mean up. If you are estimating what a typical sponsored post will do, the median, 0.5, is the more honest number. If you are modeling total reach across a whole content calendar, the average is the one that matches the math.
engagementVolatilityPercent is the other field worth reading before you quote a rate. Khaby's sample came back at 91.85. NatGeo's Instagram sample came back at 162.98, a much larger spread relative to its own average. High volatility means the account is hit-driven: most posts land far from the mean, so any single number pulled from the API is a weaker prediction of what the next post will do. Low volatility means the average is a fair stand-in for a typical post.
Big accounts always look worse
Engagement rate has followers in the denominator, so it falls as an account grows, by construction, independent of content quality. NatGeo has 268,721,569 followers and an average engagement rate of 0.01%, labelled qualityLabel: "low". Khaby Lame has 162,660,780 followers and an average of 0.75%, labelled qualityLabel: "moderate". Comparing those two raw percentages without accounting for audience size tells you almost nothing about which account performs better.
The qualityLabelNote field is where the endpoint tries to say this out loud: NatGeo's response notes that 0.01% sits below typical ranges for an account of that size and suggests verifying with more posts or a longer window before drawing a conclusion. That note is not a flag that the content is failing, it is a reminder of what percentages look like once the denominator hits 268 million.
| Account | Platform | Followers | Avg rate | Quality label |
|---|---|---|---|---|
| @natgeo | 268,721,569 | 0.01% | low | |
| @khaby.lame | TikTok | 162,660,780 | 0.75% | moderate |
If you are building a dashboard that ranks creators by engagement rate, bucket accounts by follower count first, say under 100K, 100K to 1M, 1M to 10M, and 10M+, and only compare within a bucket. A raw sort by averageEngagementRatePercent across size tiers mostly just sorts by account size in reverse.
Sponsored posts in the data
The clearest thing in either sample is not about platform, it's about disclosure. Khaby Lame's TikTok window included two videos with sponsorship markers in the caption, and both were his two worst performers.
Video 7663545266246520095, the worstVideoId in the response, captioned in part "@Holafly | eSIM ... #ad #holafly #esim", scored an engagementRatePercent of 0.09. Video 7660943810477772062, captioned "@Ninja Kitchen AutoBarista ... #ninjapartner", scored 0.10.
His organic videos in the same 10-video window scored 0.12, 0.36, 0.49, 0.51, 0.61, 1.49, 1.64, and 2.13 percent, a median around 0.5. The two sponsored videos ran roughly 4x to 20x below that organic median.
One account, one window
This is a real pattern in a single 10-video sample from one creator, not a general law about sponsored content. Treat it as a reason to check the actual per-video numbers before valuing a deal, not as a formula.
That said, it is exactly the kind of check the per-video array makes possible: pull the videos array, flag anything with #ad, #sponsored, partner, or a brand tag in the caption, and compare its engagementRatePercent against the account's own medianEngagementRatePercent before signing off on a rate card number.
Check the sample before you quote the number
Three fields exist specifically so you do not over-trust a single percentage.
sampleCoverage reports how many recent posts or videos were actually usable. NatGeo's sample used all 12 of 12 recent posts, with zero skipped and zero missing likes or comments. The TikTok sample used 10 of 10. A rate built from 3 usable posts out of 12 recent ones deserves far less confidence than one built from 12 of 12, even if the two percentages look identical. Always read sampleCoverage before quoting the number in a deck.
canCalculateEngagement is a boolean, and it is false when there is not enough usable data, a private account, a creator who just started posting, or a sample where every recent post is missing like or comment counts. Branch on it before reading metrics at all:
isOutlierHigh and isOutlierLow, set per post or per video, flag results far from the account's own average. NatGeo's best post, Dbru79IAdH-, with 206,751 likes and 1,413 comments, is marked isOutlierHigh: true at an 0.08% rate, eight times the account average. Exclude flagged outliers before quoting a rate to a client who is paying based on typical performance, not a single viral post. skipReason explains why a specific post did not factor into the average, so a skipped post is not silently dropped, it shows up in sampleCoverage.skippedReasons instead.
What this endpoint will not tell you
Followers, not reach. The denominator is follower count, not views, so content that reaches far outside a creator's follower base still divides by the smaller number. One NatGeo post pulled 1,379,662 views on a 268M-follower account and still landed at 0.01% engagement, the same as the account average. If you care about how hard a specific piece of content worked relative to how many people saw it, you want a views-based rate, and this endpoint does not compute one. You would need to derive it yourself from videoViewCount or viewCount on the raw post or video records.
No history unless you store it. Each call returns a snapshot built from the account's current recent posts. There is no built-in trend line, so tracking a rate over months means calling the endpoint on a schedule and storing the results yourself.
No audience quality signal. The formula counts likes, comments, and on TikTok shares. It does not look at who is doing the liking, so it will not flag bot followers or an engagement pod on its own.
One platform's number is not another's. Repeating the point from the top of this guide: an Instagram rate and a TikTok rate come from different formulas and are not directly comparable without recomputing both from raw counts.
Recent posts only. Both endpoints sample recent activity, not a creator's full history, so a single viral post from a year ago will not show up in the average.
If you are deciding whether to build this in-house or use a vetting platform instead, see how Social Fetch compares to Modash, Phyllo, and Apify, or browse the full comparison hub.
FAQ
What is a good engagement rate on Instagram or TikTok?
It depends heavily on follower count, which is why comparing raw percentages across account sizes is close to meaningless. NatGeo (268.7M followers) averaged 0.01% and was labelled low; Khaby Lame (162.7M followers) averaged 0.75% and was labelled moderate. Bucket accounts by follower size before comparing rates, and read the endpoint's own qualityLabel and qualityLabelNote rather than relying on a single external benchmark.
Why do Instagram and TikTok use different engagement rate formulas?
Because the platforms count different actions as engagement. Instagram's formula is likes plus comments divided by followers. TikTok's formula adds shares to the numerator. Both formulas come back verbatim in the formulaDescription field on each response, so you can see exactly what was calculated rather than guessing. See The formula is not standard.
Can I compare an Instagram engagement rate directly to a TikTok engagement rate?
Not without adjusting for the formula difference. Because TikTok includes shares and Instagram does not, a TikTok number tends to run higher for the same underlying behavior. If you need a true cross-platform comparison, pull the raw per-post fields, likes, comments, and shares where available, and compute the same formula on both sides yourself.
How much does an engagement rate lookup cost?
Both the Instagram and TikTok engagement endpoints cost 5 credits per completed lookup, more than a plain profile fetch, because the server fetches and analyzes a batch of recent posts or videos to build the average. The exact charge for any call is always in meta.creditsCharged.
What does canCalculateEngagement mean?
It is a boolean returned alongside the metrics, and it is false when there was not enough usable data in the recent sample to produce a reliable rate, for example a private account or one where recent posts are missing like and comment counts. Check it before reading metrics at all, since a false value means there is no rate to show.
Should I use average or median engagement rate for a campaign?
Use the median when you want a realistic estimate of what a typical single post or video will do, since it is not pulled upward by one or two hits. Use the average when you are modeling total reach across many pieces of content, since totals are naturally sensitive to the same hits. In the TikTok example above, the average was 0.75% and the median was 0.5%, so picking the wrong one changes a campaign estimate by half.
Does the API detect fake followers or bought engagement?
No. The engagement endpoints compute a rate from likes, comments, and on TikTok shares, on an account's own recent posts. They do not evaluate who is doing the liking, and they do not flag bot followers or engagement pods. Reading engagementVolatilityPercent and checking individual posts against isOutlierHigh can surface unusual spikes worth a manual look, but that is a different check from fraud detection.
Is there a free engagement rate calculator?
Yes, for a single account at a time. The free Instagram engagement rate calculator and TikTok engagement rate calculator run in the browser with no signup, and are rate limited on purpose. The API is worth setting up once you need this on a schedule or across more accounts than you want to check by hand.
Next steps: Free Instagram calculator · Free TikTok calculator · Cross-platform creator profiles · Quickstart · Pricing