Instagram Competitor Analysis: What the API Actually Lets You See
The column you can never fill
Open any competitive analysis template for Instagram and you will find the same spreadsheet. Columns for the competitor's reach, their engagement rate, their saves, their shares, their average watch time. Rows for each competitor. Fill it in weekly, the guide says, and you will see who is winning.
You cannot fill it in. Not with an approximation, not with a better tool, not by paying more. Five of those columns describe metrics that Meta returns for exactly one account in the world: yours.
This is not a rate limit or a paywall or a tier you have not bought. It is the shape of the platform. Instagram's Insights API is scoped to media your own app user owns, and everything a third party can learn about anyone else comes off the public surface of the profile - the same surface a person scrolling sees. That gap is small in field count and enormous in meaning, and almost every competitive analysis framework published this year is written as though it does not exist.
First Principle: metrics are owner-scoped, not account-scoped
Meta states the boundary plainly. The Insights guide: "This API returns only data for media owned by Instagram professional accounts." The media insights reference is more specific still, describing itself as "social interaction metrics on your app user's Instagram Media object."
Your app user's. Every insight is a property of a connection, not of a post. The same reel produces sixteen metrics when its owner authorizes a tool, and four when a stranger looks at it.
For a reel you own, Meta documents this metric set:
comments · crossposted_views · facebook_views · ig_reels_avg_watch_time · ig_reels_video_view_total_time · likes · reach · reels_skip_rate · reposts · saved · shares · total_interactions · total_comments · total_likes · total_views · views
For a competitor's reel, the honest list is: view count, like count, comment count, caption. Plus the video and the thumbnail, which matter more than any of the numbers, and which we will come back to.
Meta does provide one sanctioned door onto another account, the Business Discovery endpoint, which "returns data about another Instagram Business or Creator IG User." It is real and it is narrow: the account's followers_count and media_count, and on its media edge the same public counters - like_count, comments_count, view_count, id. The documented limitation is that "Data about age-gated Instagram professional accounts will not be returned." No insights edge exists on that node. There is no version of the request, no permission, no app review that adds one.
So the ceiling is fixed for everybody. Any tool showing you a competitor's reach, saves, shares or watch time is showing you a model output, not a measurement. That may still be useful. It is not the same category of thing as the number in your own dashboard, and it should never be put in the same column as one.
The four you can see are outputs. The twelve you cannot are causes.
Here is why the missing metrics sting more than the count suggests. Sort the owned-reel set by what it tells you, and the split is not random:
| Metric | Visible on a competitor? | What it tells you |
|---|---|---|
views |
Yes | How many plays it ended up with |
likes |
Yes | Lowest-cost approval, after the fact |
comments |
Yes | Reaction volume, after the fact |
reach |
No | How many unique people it actually got to |
reels_skip_rate |
No | "The percentage of views from people who skipped during the first 3 seconds of the reel" |
ig_reels_avg_watch_time |
No | "The average amount of time spent playing the reel" |
ig_reels_video_view_total_time |
No | "The total amount of time the reel was played, including any time spent replaying" |
saved |
No | Intent to return to it |
shares |
No | Intent to hand it to someone else |
reposts |
No | Redistribution |
The visible column is a record of what happened. The hidden column is the mechanism that made it happen. Skip rate is the first three seconds. Average watch time is whether the middle held. Saves and shares are the two behaviours most associated with a reel being pushed beyond an existing audience. Those are the levers a creator can actually pull, and they are precisely the ones the platform reserves for the account owner.
Which produces the trap. Denied the causes, the frameworks reach for a proxy, and the proxy in every template is engagement rate: likes plus comments, divided by follower count. Both halves are broken here.
The numerator is the two weakest signals, the ones a viewer produces without leaving the feed, and it excludes every strong one. The denominator is worse. Follower count as a divisor assumes followers are who saw the post. On a reels-led feed, distribution routinely runs well past an account's own followers, which is the entire reason a small account can post something that travels. Dividing by followers does not correct for audience size, it silently rewards accounts with a bad follower-to-reach relationship and punishes accounts with a good one.
Then the promoted posts land on top of it. A competitor's ad and a competitor's organic reel look identical from the outside, both just posts with view counts. Leave them in the same sheet and the paid ones drag the average up, and you conclude a competitor's organic content is outperforming yours when what you measured was their media budget.
What survives: compare an account to itself
Every problem above is a cross-account comparison problem. None of them apply to a within-account one.
You cannot know whether a competitor's 400,000-view reel beat ours, because we do not know their reach, their audience size relationship, or what they spent. We can know, exactly, whether that reel beat their own normal. Both numbers come off the same surface, collected the same way, subject to the same distortions, so the distortions divide out.
That is the measurement Socioverse actually computes, and the engineering is mostly in the guardrails:
Freshness cutoff first. Posts are filtered to a recent window before anything is measured, because a pinned post from eighteen months ago carries an accumulated view count and would sit at the top of any sort forever.
The median is computed before the sort, not after. This is the subtle one and it is where a naive implementation quietly dies. If you fetch a competitor's posts, keep the top fifteen, then take the median of those fifteen, your baseline is a median of winners. Every post scores near 1.0x and the outlier detector reports that nothing is an outlier. The baseline has to come from the full fresh window, before any slicing, or it is measuring itself.
The score is a multiple of that baseline.
outlier_score = this post's views / that account's median reel views. A 3.4x reel is a reel that did three and a half times what that account normally does. No reach required, no cross-account arithmetic, no follower denominator.Below five same-type posts, the score is null - not a number. A median over two posts is noise wearing a decimal point, and it will confidently report a weak reel as "1.9x" because the baseline happened to be two duds. When the sample is too thin the field is left empty and a view-to-follower ratio carries the signal instead. Refusing to output a number is a feature. A fabricated multiple is worse than a blank, because a blank prompts a question and a fake number ends one.
Ads and paid partnerships are excluded. Promoted posts are flagged and dropped so bought distribution never enters the organic baseline.
What comes out is a defensible statement: this specific post outperformed its own account by this multiple, in this window, organically. That is narrower than the spreadsheet promised. It is also true, which the spreadsheet was not.
The signal nobody is rate-limiting
Now the part the metric argument obscures. While every competitor tool fights over four numbers, the highest-value asset on a competitor's profile is not gated at all: the video itself.
A reel that beat its account's baseline by 3.4x is an experiment that already ran, with the result attached. The numbers tell you it worked. Only the video tells you why - where the hook lands, what tension the first three seconds set up, when the pacing turns, what the viewer is made to feel in order to keep watching. None of that is in an API response. All of it is in a file you can watch.
So the outlier score is not the analysis. It is the filter that decides which videos are worth analyzing. Socioverse takes the reels that cleared their own account's baseline and runs frame-by-frame deconstruction over them, extracting the structure rather than the content: the hook as a reusable formula rather than its words, the emotional journey from first frame to last, the narrative blueprint abstracted away from the topic, the pacing rhythm, the audio and voice treatment. That analysis feeds idea generation and scripting against your own brand knowledge base, so what comes out is your topic in a structure that has already been proven to hold attention.
That is the whole reason we say steal their psychology, not their content. Copying the topic gives you a worse version of a post that already exists. Copying the structure gives you a mechanism, and a mechanism transfers to subjects the original creator never touched.
It also happens to be the part of competitive analysis that no API change can take away. Meta can deprecate a metric - it deprecated impressions for media created after July 2, 2024, and it has redefined more than that (which is its own story). It cannot deprecate the video.
What to actually do with this
- Delete the columns you cannot fill. Competitor reach, competitor saves, competitor shares, competitor watch time. A blank column is honest. An estimated one contaminates every conclusion downstream of it.
- Stop comparing engagement rates across accounts. The denominator does not mean what the template assumes on a distribution-led feed.
- Score each competitor against their own median, over a fresh window, with promoted posts removed, and only when there are enough posts to make a median mean something.
- Treat the score as triage, not the finding. Its job is to point at the four or five videos worth ninety minutes of your attention.
- Do the teardown on the video. Hook, structure, pacing, emotional arc. That is the transferable part, and it is the only part that was never rate-limited.
The uncomfortable summary: most Instagram competitive analysis is an attempt to reconstruct someone else's dashboard from the outside. It cannot be done, and the effort spent trying is subtracted from the one activity that works, which is watching the winners closely enough to understand why they won.
Socioverse runs the filter so you can spend your time on the second part. Competitor tracking, outlier scoring and reel deconstruction are on every paid tier, including Starter at $18/month, and the competitor analysis use case walks through the flow end to end.
Frequently Asked Questions
Can I see a competitor's Instagram reach or impressions?
No. Reach is returned only for media owned by the account that authorized the tool. Meta's Insights API "returns only data for media owned by Instagram professional accounts" connected to your app. No third-party tool can retrieve a competitor's reach, and any figure presented as one is an estimate.
Can I see how many saves or shares a competitor's post got?
No. saved, shares and reposts are owner-scoped metrics on the media insights endpoint. They have no equivalent on the Business Discovery node or on the public profile surface.
What can I legitimately see about a competitor?
Their follower count and media count, and per post the view count, like count, comment count, caption, thumbnail and the video. Meta's Business Discovery endpoint returns this for Business and Creator accounts, excluding age-gated ones. That set is the ceiling for every tool in the category, including ours.
Is competitor engagement rate a valid benchmark then?
Weakly, and it degrades as reels grow as a share of a feed. It is built from the two lowest-intent signals and divided by follower count, which assumes followers are the audience that saw the post. Comparing a post to its own account's median avoids both problems.
Why does Socioverse sometimes show no outlier score for a competitor?
Because there were fewer than five same-type posts in the fresh window, so the median baseline is not trustworthy. Rather than print a misleading multiple, the score is left empty and a view-to-follower ratio is used instead. The number returns as soon as the account posts enough for a real baseline.
Does scraping a competitor's public posts risk my Instagram account?
Reading a public profile is separate from your account connection. Socioverse's Instagram connection uses the official Instagram API with Instagram Login and never handles your password, which is engineered for account safety on the sending side as well.
Sources and References
Meta-attributed quotes and metric lists were taken from the following pages, accessed August 26, 2026.
- Media insights metric list for REELS, and the definitions of
reels_skip_rate,ig_reels_avg_watch_time,ig_reels_video_view_total_time,saved,shares,reachandviews, plus theimpressionsdeprecation for media created after July 2, 2024: developers.facebook.com - Instagram Media Insights - "This API returns only data for media owned by Instagram professional accounts": developers.facebook.com - Insights
- Business Discovery scope ("Returns data about another Instagram Business or Creator IG User"), the available fields, and the age-gated limitation: developers.facebook.com - IG User Business Discovery
- Socioverse: socioverse.io