Why your analytics tool disagrees with Instagram
Almost every social media manager has opened a dashboard, opened Instagram, and found two different numbers for the same post. The reflex is to distrust the tool. Usually the tool is right, and it is measuring something the app is not.
My dashboard and the Instagram app show different numbers. Which one is right?
Third-party tools and the Instagram app read different data. The app reads Meta's internal store; tools read the Graph API, which is narrower, refreshes on a delay, and lost the impressions metric entirely in April 2025. The four causes of a mismatch are a deleted metric being backfilled, a different engagement rate denominator, a refresh lag of up to 48 hours, and competitor figures that are sampled rather than reported. A gap of a few percent on reach is normal. A gap of five times on engagement rate means the two numbers are not the same measure.
You export a report, open Instagram to sanity-check it, and the numbers do not match. The post that the app says reached 4,210 accounts is 3,980 in the dashboard. The engagement rate your tool proudly reports as 1.4% is 6.9% in a free calculator.
The instinct is to assume the tool is broken. It usually is not. Tools do make mistakes; this page is about the four cases where both numbers are right and different. The app and every third-party tool are reading two different data sources, and the places they diverge are specific and knowable.
The app and your tool do not read the same thing
The Instagram Graph API is the interface Meta provides for third-party tools to read an account’s posts and insights after the account’s owner has connected it. It is versioned, narrower than what the Instagram app shows, and it is the only source any tool has for reach, views, saves and shares.
Instagram’s own app reads Meta’s internal data directly. It has no rate limit, no permission model to satisfy, and no version to maintain.
Every third-party tool reads the Graph API, which is a smaller, older and deliberately narrower surface. It exposes a subset of what Meta holds, it is versioned, and metrics are removed from it on a published schedule. When the app and the API disagree, it is almost never arithmetic. It is that one of them was never given the number.
That framing resolves most disputes on its own. The useful question is not “which is correct” but “could this tool have obtained that figure at all?”
Cause 1: the metric was deleted, and something is filling the gap
This is the big one, and it catches people who have not looked at Meta’s changelog since 2024.
Meta deprecated the impressions metric on 21 April 2025. It was announced
on 21 January 2025, removed for version 22.0 and above, then fully deprecated
across all versions in April. After that date, requests for media created on or
after 2 July 2024 return an error rather than a number
(Instagram Platform changelog).
Impressions did not become harder to get. It stopped existing, and what replaced it counts differently.
It was replaced by views, which absorbed both the old impressions metric
for feed posts and stories and the plays metric for Reels. Meta’s own
transition notes were mirrored by most of the industry at the time
(Sprinklr,
Metricool,
Brandwatch).
So if a dashboard is still showing you an impressions column for recent posts, there are only three possibilities, and it is worth knowing which:
- It is historical data cached before April 2025 and never relabelled.
- It is views, renamed to impressions in the interface so the column did not have to move.
- It is estimated.
The first two are defensible. The third is the one that should worry you, and almost no interface distinguishes between them.
Cause 2: the engagement rate is divided by something else
Two tools can report 1.2% and 6.8% for the same account in the same week and both be reporting honestly. Engagement rate has no single definition, and the denominator changes the answer by roughly the ratio of the account’s follower count to its reach, several times over on most accounts.
| Denominator | What it answers | Available for |
|---|---|---|
| Followers | How does this account compare to another? | Any public account |
| Reach | Did the people who saw it respond? | Accounts you manage |
| Views | Did the people who played it respond? | Accounts you manage |
Dividing by followers gives a figure that compares across accounts but understates performance as an account grows, because reach does not scale with follower count. Dividing by reach gives the honest answer to “did this work” but cannot be calculated for anyone else’s account, because reach is private.
Nearly every free calculator uses followers, since it is the only denominator available without a connected account. That is a reasonable default. Quoting the result next to a reach-denominated figure is not, and the two are routinely placed in the same table.
If two tools disagree by roughly the ratio of your reach to your follower count, you have found your cause. Nothing is broken.
Cause 3: the API refreshes on a delay
Insights are not live. The app updates continuously; the API settles, and what it settles on is a narrower set than the app holds.
Reach and views for a recent post can keep moving for up to 48 hours after publishing. Meta’s IG Media insights reference says it in one line, as of September 2026: “Data used to calculate metrics can be delayed up to 48 hours.” The same page keeps metrics for two years and no longer. Reels move for longer because plays accumulate over a much longer tail than feed impressions ever did. A tool that pulled at 9am and an app opened at 6pm are reporting different moments, not different facts.
Meta is also more cautious about its own numbers than most dashboards are. Its help centre says that “some insights metrics are estimated and in development”, and its insights overview attaches that label to Viewers and to Accounts engaged by name. A figure Meta calls an estimate cannot be expected to match itself to the unit between two reads, let alone match a tool that read it a day earlier.
The delay produces a signature worth recognising: the gap is largest on your newest post and shrinks to nothing on posts more than a few days old. If your mismatch looks like that, it is a timing artefact and there is nothing to fix. Compare like-aged posts before concluding anything.
Cause 4: competitor numbers are sampled, not reported
For any account you do not manage, no tool receives insights at all. Reach, views, saves and shares are private to the account owner.
What a tool can see for a competitor is the public surface: recent posts, like counts, comment counts, follower count. Anything richer is derived from those, and derivation is estimation.
This matters because the estimate and the measurement are usually printed in the same typeface. A competitor’s “engagement rate” is computed from public likes and comments over public follower count. Your own engagement rate, if your account is connected, may be computed over reach. Those are not the same measure and should never be ranked against each other, but competitive benchmark screens do it constantly.
How to work out which one you have
Run through it in this order. It takes about five minutes.
- Is the metric one that still exists? If you are looking at impressions on a post published after April 2025, stop. Whatever produced that number, it was not the API.
- Is the post less than 48 hours old? If so, wait and re-check before investigating anything else.
- Divide the two engagement rates into each other. If the ratio is close to your reach over your follower count, it is a denominator difference.
- Is it your account or someone else’s? If it is someone else’s, reach and saves are not available to anybody, and any figure you are shown for them is modelled.
The same four, as a table:
| What you see | Likely cause | What to do |
|---|---|---|
| Impressions on a post published after April 2025 | The metric is gone: cached history, views relabelled or an estimate | Ask which of the three |
| A gap on a post under 48 hours old | Insights settle on a delay | Compare like-aged posts |
| Two engagement rates, ratio near your reach over your followers | Different denominators | Label each rate’s denominator |
| Reach or saves for an account you do not manage | Not reported to anyone but the owner, so modelled | Compare public metrics on both sides |
A gap of a few percent on reach is ordinary and comes from refresh timing. A gap of five times on engagement rate is not a gap at all. It is two different questions with two different answers, printed side by side.
The rule worth keeping
A number without its denominator and its source is not comparable to anything, including itself last month.
The tools that disagree with your app are not usually wrong. They are usually reporting a narrower, slower, more honest view of what Meta will actually release, and the ones that never disagree are often the ones filling the gaps quietly. Ask any tool which source each figure came from. If it cannot tell you, that is the finding.
Northfact labels every metric with its source and denominator, and shows a gap rather than an estimate when the data isn’t there. Free during beta.
Also asked
Why is reach different in my analytics tool and the Instagram app?
The app reads Meta's internal data continuously; a tool reads the Graph API, which settles on a delay. Reach and views for a recent post can keep moving for up to 48 hours after publishing, and Reels longer, so a tool that pulled at 9am and an app opened at 6pm report different moments. Compare like-aged posts.
Why does my dashboard still show impressions?
For posts published after April 2025 there are only three possibilities: the column is historical data cached before the metric was removed, it is views renamed so the column did not have to move, or it is an estimate. The first two are defensible. The third is the one to worry about, and almost no interface says which it is.
Which Instagram metrics does Meta call estimated?
Viewers and Accounts engaged, by name. Meta's help centre says some insights metrics are 'estimated and in development,' and its insights overview attaches that label to those two specifically. A figure Meta itself calls an estimate cannot be expected to match itself between two reads, let alone match a tool that read it a day earlier.