Instagram Insights API: Metrics, Permissions, Limits
The Instagram insights API is two Graph API endpoints: GET /<IG_ID>/insights for account metrics and GET /<IG_MEDIA_ID>/insights for post metrics. Both need instagram_business_manage_insights (Instagram Login) or instagram_manage_insights (Facebook Login). Meta replaced impressions and plays with views in 2025. Data can lag 48 hours. Adeli returns account views, reach, interactions, and accounts engaged over 28 days with one API key.
The Instagram insights API is part of the Instagram API: GET /<IG_ID>/insights returns account metrics and GET /<IG_MEDIA_ID>/insights returns metrics for a single post, Reel, or Story. Both need the insights permission, both only work for Business and Creator accounts that authorized your app, and both can lag up to 48 hours.
This guide covers the metrics each endpoint returns, the ones Meta has deprecated, the permission for each login, and the limits behind most "my insights are empty" bugs.
What does the Instagram insights API return?
Two endpoints, two scopes of data. Meta's insights guide splits them like this:
| Account insights | Media insights | |
|---|---|---|
| Request | GET /<IG_ID>/insights |
GET /<IG_MEDIA_ID>/insights |
| What it measures | The whole professional account over a period | One feed post, Reel, or Story |
| Retention | Up to 90 days | Up to 2 years |
| Data delay | Up to 48 hours | Up to 48 hours |
| Main metrics | views, reach, accounts_engaged, total_interactions, follows_and_unfollows, follower_demographics |
views, reach, likes, comments, saved, shares, total_interactions, ig_reels_avg_watch_time |
The host is graph.instagram.com with Instagram Login and graph.facebook.com with Facebook Login. The examples below use Instagram Login and v26.0, the version in Meta's current examples.
Which permission does the Instagram insights API need?
instagram_business_manage_insights with Instagram Login, or instagram_manage_insights with Facebook Login. Both lists come from the account insights reference.
| Instagram Login | Facebook Login | |
|---|---|---|
| Base permission | instagram_business_basic |
instagram_basic |
| Insights permission | instagram_business_manage_insights |
instagram_manage_insights |
| Also required | Nothing else | pages_read_engagement, plus ads_management and ads_read if the Page role came through Business Manager |
Standard Access covers accounts you own or manage. If your customers connect their own Instagram accounts, you need Advanced Access, which means App Review and Business Verification. Our Instagram API permissions guide covers every scope, including a spot where Meta's docs disagree about whether the Instagram Login insights permission is listed.
How to get Instagram account insights
Ask for the metrics, a period, and a metric type. Most account metrics only support period=day with metric_type=total_value, which returns one number for the range:
curl -G "https://graph.instagram.com/v26.0/<IG_ID>/insights" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
--data-urlencode "metric=views,reach,accounts_engaged,total_interactions" \
--data-urlencode "period=day" \
--data-urlencode "metric_type=total_value" \
--data-urlencode "since=<UNIX_START>" \
--data-urlencode "until=<UNIX_END>"The account metrics in Meta's reference:
| Metric | What it counts | Breakdowns |
|---|---|---|
views |
Times your content was played or displayed | follower_type, media_product_type |
reach |
Unique accounts that saw your content at least once, including in ads (estimated) | media_product_type, follow_type |
accounts_engaged |
Accounts that interacted with your content, including in ads (estimated) | None |
total_interactions |
Interactions across posts, Stories, and Reels | media_product_type |
likes, comments, saves, shares, replies, reposts |
Each interaction type on its own | Varies |
profile_links_taps |
Taps on the business address, call, email, and text buttons | contact_button_type |
follows_and_unfollows |
Follows and unfollows in the period | follow_type |
follower_demographics |
Followers by age, city, country, or gender | age, city, country, gender |
engaged_audience_demographics |
Engaged accounts by the same dimensions | Same |
Before you build a dashboard on it:
- Breakdowns only work with
total_value. Atime_seriesresponse drops them, and asking for a breakdown a metric doesn't support returns "An unknown error has occurred." - Demographics need a
timeframe. Usethis_weekorthis_month.timeframeoverridessinceanduntil, and only the top 45 values come back. - No range means 24 hours. Leave out
sinceanduntiland you get the last day. - Meta still labels some metrics "in development", including
viewsandcommentson accounts, so expect definitions to shift.
How to get insights for an Instagram post or Reel
Call insights on the media ID you got back from media_publish. Media metrics return lifetime values:
curl -G "https://graph.instagram.com/v26.0/<IG_MEDIA_ID>/insights" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
--data-urlencode "metric=views,reach,likes,comments,saved,shares,total_interactions"Which metrics apply depends on the media type, per the media insights reference:
| Media type | Metrics you can request |
|---|---|
| Feed post | views, reach, likes, comments, saved, shares, reposts, follows, profile_visits, profile_activity, total_interactions |
| Reel | views, reach, likes, comments, saved, shares, reposts, ig_reels_avg_watch_time, reels_skip_rate, crossposted_views, facebook_views, total_interactions |
| Story | views, reach, replies, shares, follows, navigation, profile_visits, profile_activity, link_clicks, total_interactions |
Three things catch people out on the media side:
- Carousel children have no insights. Meta says insights aren't available for any media inside an album. Query the carousel's own ID.
- Stories expire in 24 hours. Read them before then. Stories with fewer than 5 viewers return error 10, "Not enough viewers for the media to show insights."
- Ad activity is separate.
likes,comments, andviewscount organic activity only. The ad-inclusivetotal_likes,total_comments, andtotal_viewswork only with Facebook Login.
If you're building reporting into a product, Adeli's analytics API reads Instagram account insights for connected accounts without your own Meta app or token refresh job.
Which Instagram insights metrics are deprecated?
impressions, plays, video_views, and a set of profile action metrics no longer work. Meta's Instagram Platform changelog lists each removal:
| Deprecated metric | Level | Removed from all versions | Use instead |
|---|---|---|---|
impressions |
Account and media | April 21, 2025 | views |
plays |
Media (Reels) | April 21, 2025 | views |
clips_replays_count |
Media (Reels) | April 21, 2025 | views |
ig_reels_aggregated_all_plays_count |
Media (Reels) | April 21, 2025 | views |
video_views |
Media | January 8, 2025 | views |
profile_views, website_clicks, email_contacts, phone_call_clicks, text_message_clicks, get_direction_clicks |
Account | January 8, 2025 | profile_links_taps for contact taps |
carousel_album_impressions, carousel_album_reach, carousel_album_engagement, carousel_album_saved, carousel_album_video_views |
Media | December 11, 2023 | The plain metric on the carousel ID |
taps_forward, taps_back, exits |
Media (Stories) | December 11, 2023 | navigation |
audience_gender_age, audience_locale, audience_country, audience_city |
Account | December 11, 2023 | follower_demographics |
One exception: impressions still returns data for media created on or before July 1, 2024, on v21.0 and older. For media created on or after July 2, 2024, the request returns an error. If an old integration starts failing on its metric list, check that list for deprecated names first.
Don't chart views and impressions as one series. Meta defines views as the number of times content was played or displayed, a different count from the old metric. Keep your metric list in config rather than hardcoded, because Meta keeps adding metrics (reposts and reels_skip_rate arrived in December 2025, link_clicks for Stories in June 2026).
What are the Instagram insights API limits?
The limits that bite are about data availability rather than call quotas. From Meta's insights guide and the two references:
- 48-hour delay. Data used to calculate metrics can lag up to 48 hours, so yesterday's numbers are often incomplete.
- 100-follower threshold. Some metrics aren't available for accounts with fewer than 100 followers.
follows_and_unfollowsandfollower_demographicsreturn nothing below it, andengaged_audience_demographicsneeds 100 engagements. - Empty, not zero. A metric with no data returns an empty data set, not
0. Show it as unavailable in your UI. - Retention. Account metrics go back 90 days, media metrics 2 years, Stories 24 hours.
- Professional accounts only. No personal accounts, and live video can only be read while it's broadcasting.
- No insights webhooks with Instagram Login. The
story_insightswebhook exists only with Facebook Login.
Calls still count against Meta's Graph API rate limits. Our Instagram API rate limit guide covers how those are calculated.
Is there a faster way to read Instagram insights?
Yes, if you'd rather not run the Meta side. Reading insights for your customers' accounts means a Meta app, Advanced Access for the insights permission, Business Verification, and a refresh job for every account's token.
Adeli holds the Meta developer app, carried Meta's review, and refreshes every connected account's tokens. You hold one API key. The Instagram account insights endpoint returns views, reach, total_interactions, and accounts_engaged over a rolling 28-day window:
curl -G "https://app.tryadeli.com/api/v1/analytics/instagram/account-insights" \
-H "Authorization: Bearer $ADELI_API_KEY" \
--data-urlencode "accountId=<ADELI_ACCOUNT_ID>"{
"platform": "instagram",
"accountId": "<ADELI_ACCOUNT_ID>",
"profileId": "<ADELI_PROFILE_ID>",
"insights": [{ "name": "reach", "values": [] }],
"fetchedAt": "2026-04-01T12:00:00.000Z"
}What to know about it:
- Meta's numbers, unchanged. The
insightsarray is Instagram's own, passed through. All four metrics are current ones, none from the deprecated list above. - Live reads. Adeli doesn't store history, so each call reads Instagram directly. Store results yourself if you want trends past 28 days.
- Account level only. Per-post Instagram insights aren't part of the current API. Listing posts returns likes and comments for each post.
Your first 3 connected accounts are free on Adeli's pricing, with no credit card.