Instagram Business Discovery API: Read Other Accounts

By Nick ReyesPublished 7 min read

The short answer

The Instagram business discovery API reads another Business or Creator account's public profile and recent posts by username. You query your own Instagram user with business_discovery.username(handle) on graph.facebook.com, using instagram_basic, instagram_manage_insights and pages_read_engagement. It returns follower and media counts, likes, comments and Reels views, but no Stories, insights or personal accounts. Adeli runs the lookup for accounts your customers connect.

The Instagram business discovery API lets an app read another Instagram Business or Creator account's public data by username: bio, follower count, post count, and recent posts with their likes, comments, and Reels views. There's no separate endpoint: you request the business_discovery field on your own connected Instagram account, and Meta answers on that account's behalf.

Marketing platforms use it for competitor dashboards: a customer types a rival's handle, and the product charts that account's posting rhythm and engagement next to their own. This guide covers the request, the fields you get back, permissions, rate limits, Reels views, and the things it can't read, like Stories.

What do you need to use Instagram business discovery?

Business discovery needs the Instagram API with Facebook Login, a Business or Creator account of your own, and three permissions: instagram_basic, instagram_manage_insights, and pages_read_engagement. Meta's business discovery reference lists these requirements:

Requirement Detail
API setup Instagram API with Facebook Login, on graph.facebook.com
Token Facebook User access token
Permissions instagram_basic, instagram_manage_insights, pages_read_engagement
Extra permission ads_management or ads_read, if the user's Page role came through Business Manager
Your account An Instagram Business or Creator account linked to your app
Target account Any Business or Creator account that isn't age-gated

Instagram Login can't do this. Apps on graph.instagram.com have no business discovery field, so a product that started with Instagram Login needs a Facebook Login connection before it can look up other accounts. And because the permissions need Advanced Access for real users, plan for Meta app review. Our Instagram API permissions guide explains each scope.

How do you call business discovery in the Instagram Graph API?

Send GET /<YOUR_IG_USER_ID>?fields=business_discovery.username(<handle>){...}, listing the target's fields inside the braces. The ID in the path is your connected account, not the account you're looking up.

curl -G "https://graph.facebook.com/v26.0/<YOUR_IG_USER_ID>" \
  -H "Authorization: Bearer <FB_USER_ACCESS_TOKEN>" \
  --data-urlencode "fields=business_discovery.username(examplecoffee){username,biography,website,followers_count,media_count,media.limit(12){id,caption,media_product_type,timestamp,permalink,like_count,comments_count,view_count}}"

The response nests everything under business_discovery (values shortened for illustration):

{
  "business_discovery": {
    "username": "examplecoffee",
    "followers_count": 52000,
    "media_count": 840,
    "media": {
      "data": [
        {
          "id": "<MEDIA_ID>",
          "media_product_type": "REELS",
          "like_count": 1200,
          "comments_count": 35,
          "view_count": 41000
        }
      ],
      "paging": { "cursors": { "after": "QVFIUk..." } }
    },
    "id": "<TARGET_IG_USER_ID>"
  },
  "id": "<YOUR_IG_USER_ID>"
}

Validate the handle before you build the request. Instagram usernames are letters, digits, periods, and underscores, up to 30 characters. The handle goes inside a field expression, so a username containing braces or commas could reshape your query.

Which fields can business discovery return?

Business discovery returns fields Meta marks as public on the account and on its media. Private data, such as insights, demographics, and anything from a personal account, stays out. These are the public fields in Meta's IG User and IG Media references:

Level Public fields
Account id, username, biography, website, followers_count, media_count, alt_text
Media id, caption, media_type, media_product_type, media_url, permalink, shortcode, thumbnail_url, timestamp, username, comments_count, view_count, reposts_count, total_comments_count, total_like_count

A few fields behave differently when you read someone else's account:

  • like_count can disappear. Meta omits it when the owner has hidden like counts. Treat a missing value as hidden, not as zero.
  • media_url can disappear. Meta drops it for video with copyrighted or licensed audio and for Reels whose owner turned off downloads. Fall back to permalink or thumbnail_url.
  • follows_count isn't public. It isn't on Meta's public list, so don't build a feature around it for other accounts.

Our guide to getting Instagram posts with the Graph API explains each media field in depth, and the followers count guide covers followers_count for your own accounts.

How do you page through another account's posts?

Business discovery pages with before and after cursors, and you build the next request yourself. Meta's reference notes that the response includes the cursors but not the next or previous URLs that other Graph API edges return. Pass the cursor back through field expansion:

curl -G "https://graph.facebook.com/v26.0/<YOUR_IG_USER_ID>" \
  -H "Authorization: Bearer <FB_USER_ACCESS_TOKEN>" \
  --data-urlencode "fields=business_discovery.username(examplecoffee){media.limit(12).after(QVFIUk...){id,timestamp,like_count,comments_count}}"

Every page is a full business discovery call, and each one counts toward your rate limit. For a dashboard, read the first page or two of recent posts and store them, rather than walking an account's whole history on every view.

How do Reels views work in business discovery?

Business discovery returns Reels views in the view_count field, which Meta added in June 2025 and offers only through business discovery. Meta's media reference describes it as the view count for Reels, paid and organic combined. It's the one performance number for another account's Reels beyond likes and comments.

The definition has shifted, so date your data:

  • June 16, 2025. view_count arrives for Reels, available only through business discovery, per the Instagram Platform changelog.
  • December 3, 2025. Meta says business discovery's view_count still counts Instagram views only, while the new crossposted metrics live in the Insights API.
  • April 22, 2026. Meta changes that: view_count now returns combined Instagram and Facebook views for crossposted video when you read another account through business discovery.

If you stored view_count before late April 2026, the numbers after that date may jump for accounts that crosspost Reels to Facebook. Mark the change on any trend chart so your customers don't read it as a viral week.

Can business discovery read Stories?

No. Business discovery returns an account's feed posts and Reels through media, but it has no Stories field. Meta's /stories edge works only on an account that authorized your app, and even there a Story disappears after 24 hours. You can't watch a competitor's Stories through Meta's official API.

You also can't read insights (reach, saves, shares) or follower demographics for another account. Business discovery gives counts that anyone could see on the public profile, in a form your code can store. For what you can do with Stories on your own connected accounts, see our Instagram Stories API guide.

What are the business discovery rate limits?

Business discovery falls under Meta's Platform Rate Limits, not the Business Use Case limits that cover most Instagram endpoints. Meta's rate limiting overview says so directly: "Business Discovery and Hashtag Search API are subject to Platform Rate Limits."

What that means for your code:

  • Different header. Platform limits report usage in X-App-Usage, with call_count, total_cputime, and total_time as percentages over a rolling hour. The X-Business-Use-Case-Usage header you watch for other Instagram calls doesn't cover these lookups.
  • Different errors. Code 4 means the app hit its limit. Code 17 means the user whose token you're using hit theirs. Back off and retry later rather than retrying in a loop.
  • The token's user carries the load. Every lookup runs through one connected account's token, and Meta doesn't publish the per-user call count. Spread lookups across your customers' own tokens instead of routing everyone through one account.

A competitor dashboard that refreshes 50 rival accounts every 5 minutes will hit these limits. Refresh once or twice a day and cache the snapshot. Our Instagram API rate limit guide covers both limit systems in more detail.

Why does business discovery return "Invalid user id"?

Business discovery returns error code 110, subcode 2207013, "Invalid user id", when the username isn't a professional account Meta will describe: it doesn't exist, it's personal, or it's age-gated. Developers on Meta's forum also report it for accounts that used to work:

While calling the Business Discovery API to retrieve Instagram public page data, the following error is encountered

— Siddhi on the Meta Developer Community

The user in question has a pro account, and this has previously been retrievable.

— 押川 正樹 on the Meta Developer Community

It seems that the issue has been resolved on its own, even though I didn't make any changes.

— 押川 正樹, following up in the same thread

Handle it in two steps. Show "not a public business or creator account" to the user when the lookup fails, since that's the usual cause. If a handle you've read before suddenly fails, retry it later before you delete its history: the thread above shows Meta-side failures that cleared on their own.

How do marketing platforms use business discovery?

Marketing platforms use business discovery to put a customer's Instagram numbers next to their competitors'. The pattern that fits the limits:

  1. The customer names up to a handful of competitor handles in your product.
  2. A daily job runs one business discovery call per handle, through that customer's own connected account.
  3. You store a snapshot: followers_count, media_count, and the recent posts with likes, comments, and Reels views.
  4. Your dashboard charts the snapshots: follower growth, posts per week, and average engagement per post against the customer's own account.

Store the snapshots yourself, because business discovery returns only the current state. Follower history exists only if you saved yesterday's number. The AI marketing platforms page shows how Adeli fits into products built this way.

Does Adeli offer business discovery?

Yes. Adeli looks up other Instagram Business and Creator accounts through business discovery, on behalf of an account your customer connected, so you don't need your own Meta app, Facebook Login, or App Review for it. The lookup returns the other account's public profile and recent media, read live and never stored, and it works for accounts connected through Meta's Unified Login.

Adeli also covers the accounts your customers connect. The analytics API reads Instagram account insights (views, reach, interactions, accounts engaged) for those accounts, alongside TikTok, Facebook Page, and YouTube insights, and Adeli's Instagram API publishes feed posts, Reels, Stories, and carousels for them. A competitor dashboard can pull the customer's own numbers and their rivals' public numbers through Adeli. Adeli is free to start; see pricing for how it scales with your customers.

faq

Frequently asked questions

Does the Instagram business discovery API work with Instagram Login?

No. Meta documents business discovery for the Instagram API with Facebook Login, on graph.facebook.com. An app built on Instagram Login, which runs on graph.instagram.com, has to add a Facebook Login connection before it can look up other accounts.

Can business discovery look up a personal Instagram account?

No. Business discovery only returns Instagram Business and Creator accounts, and Meta excludes age-gated business accounts too. A personal or age-gated username comes back as an error, usually code 110 with subcode 2207013, rather than as an empty result.

Do I need app review to use business discovery?

Yes, for any account beyond your own test users. The three permissions it relies on, instagram_basic, instagram_manage_insights and pages_read_engagement, need Advanced Access before people outside your app's roles can grant them.

Power your next project
with one ads & 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.