# Instagram Insights API: Metrics, Permissions, Limits

What the Instagram insights API returns for accounts and media, which metrics Meta deprecated, the permission you need, and the delays and limits.

Canonical page: https://www.tryadeli.com/blog/instagram-insights-api
Last updated: 2026-10-19

By Mika Reyes, Co-founder, Adeli. Published 2026-10-19.

## 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](https://www.tryadeli.com/blog/instagram-api-guide): **`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](https://developers.facebook.com/docs/instagram-platform/insights) 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](https://developers.facebook.com/docs/instagram-platform/api-reference/instagram-user/insights).

| | 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](https://www.tryadeli.com/blog/instagram-api-permissions) 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:

```bash
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](https://developers.facebook.com/docs/instagram-platform/api-reference/instagram-user/insights):

| 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:

```bash
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](https://developers.facebook.com/docs/instagram-platform/reference/instagram-media/insights):

| 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](https://www.tryadeli.com/social-media-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](https://developers.facebook.com/docs/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](https://developers.facebook.com/docs/instagram-platform/insights) 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](https://www.tryadeli.com/blog/instagram-api-rate-limit) 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](https://www.tryadeli.com/product/instagram) 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](https://www.tryadeli.com/docs/api/analytics/instagram-account-insights) returns **`views`, `reach`, `total_interactions`, and `accounts_engaged` over a rolling 28-day window**:

```bash
curl -G "https://app.tryadeli.com/api/v1/analytics/instagram/account-insights" \
  -H "Authorization: Bearer $ADELI_API_KEY" \
  --data-urlencode "accountId=<ADELI_ACCOUNT_ID>"
```

```json
{
  "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](https://www.tryadeli.com/docs/api/posts/list-posts) returns likes and comments for each post.

Your **first 3 connected accounts are free** on [Adeli's pricing](https://www.tryadeli.com/pricing), with no credit card.

## 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.

## Related Adeli pages

- [Social Media Analytics API](https://www.tryadeli.com/social-media-analytics-api.md): Adeli's analytics API: Instagram, TikTok, Facebook Page, and YouTube insights endpoints, plus per-post engagement on every post an account has made.
- [Instagram API for Developers](https://www.tryadeli.com/product/instagram.md): Publish, schedule, and read analytics for Instagram through one API. Adeli owns the Instagram developer app, token refresh, and Meta review. Free to start.
- [All posts on the Adeli blog](https://www.tryadeli.com/blog.md)

## About the author

Mika Reyes is the CEO behind Adeli and a tech and AI content creator. She was previously co-founder and CEO of Parallax, which was acquired by Phantom, and a product lead at LinkedIn. She is a Forbes 30 Under 30 honoree.
