Instagram Insights API: Metrics, Permissions, Limits

By Mika ReyesPublished 6 min read

The short answer

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. A time_series response drops them, and asking for a breakdown a metric doesn't support returns "An unknown error has occurred."
  • Demographics need a timeframe. Use this_week or this_month. timeframe overrides since and until, and only the top 45 values come back.
  • No range means 24 hours. Leave out since and until and you get the last day.
  • Meta still labels some metrics "in development", including views and comments on 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, and views count organic activity only. The ad-inclusive total_likes, total_comments, and total_views work 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_unfollows and follower_demographics return nothing below it, and engaged_audience_demographics needs 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_insights webhook 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 insights array 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.

faq

Frequently asked questions

Why does the Instagram insights API return an empty array?

Meta returns an empty data set instead of zero when a metric isn't available. Common causes are an account with fewer than 100 followers, a Story older than 24 hours, a child item inside a carousel, or data that hasn't caught up yet, since Meta says metrics can lag up to 48 hours.

Can I get insights for another account's Instagram posts?

No. The insights endpoints only return data for Business and Creator accounts that authorized your app. Personal accounts and accounts you don't have a token for return nothing. Each account has to connect to your app before you can read its metrics.

How far back does Instagram insights data go?

Meta stores account (user) metrics for up to 90 days and media metrics for up to 2 years. Story metrics are only available for 24 hours after posting. If you need longer history, read the metrics on a schedule and store them yourself.

Are Instagram insights available in real time?

No. Meta says the data behind insights metrics can be delayed up to 48 hours, and webhooks for insights aren't supported with Instagram Login. Plan dashboards around daily reads, not live counters.

Power your next project
with one social media API

Give your users publishing, scheduling, and analytics through one integration your team can actually maintain.

Try with agents

Start with free credits. No credit card required.