“Instagram API” means two very different things, and the confusion costs developers real time. One is Meta's official Instagram Graph API (formerly Instagram Basic Display API, now folded into the Instagram Platform) — a permissioned interface for managing accounts that have explicitly connected to your app. The other is a scraping API — a third-party service that reads public Instagram data directly, the way a browser would, without needing the target account's permission.
If you came here after your Graph API app returned an empty result for someone else's profile, or after hitting a wall in Meta's app review process, you are not missing a parameter. You are using the wrong tool for the job.
What the Graph API is actually built for
Meta's Instagram Platform documentation is explicit: it is a collection of APIs that let your app manage Instagram professional (business or creator) accounts. It is built for cases like:
- A business publishing content to its own connected Instagram account.
- A social-media-management tool reading and replying to comments on accounts its users have authorized.
- An app showing a business its own post insights and audience metrics.
Every one of those cases requires the Instagram account owner to go through Meta's OAuth flow and grant your app permission. There is no endpoint that takes an arbitrary username and returns that account's public posts or follower count unless that account owns the access token your app is using.
Where developers get stuck
| What you want | What the Graph API requires |
|---|---|
| Read a competitor's public profile or posts | Not possible — you can only read accounts that connected to your app |
| Monitor an industry hashtag | Limited hashtag search exists but only for a connected business account's own recent-media context, with strict rate ceilings |
| Pull data without the account owner's involvement | Not possible — every account must complete OAuth with your app first |
| Go live with more than a handful of test users | App review: business verification, a written use-case, often a screencast, and a waiting period that can run days to weeks |
| Personal (non-business) account data | Largely out of scope; most useful endpoints require a professional account |
None of this is a bug. Meta built the Graph API as a permissioned management layer, not a public data API, specifically so that arbitrary apps cannot pull data about accounts that never agreed to it. The friction — OAuth, business verification, app review — is the access-control model working as designed.
If your use case is competitive research, influencer vetting, lead sourcing, or any workflow that needs data from accounts you do not own or manage, the Graph API was never going to serve that request, no matter how the permissions are configured.
What a scraping API does differently
A scraping API reads the same public information a signed-out browser or the Instagram app would show for a public account — profile fields, posts, followers count, stories while they're live, hashtag pages — without requiring that account to authorize anything. The trade-offs run the other way from the Graph API's:
- No OAuth from the target account, because you are reading public data, not managing a connected account.
- No app review, because there is no Meta permission being granted.
- Private accounts return nothing, by design: a scraping API can only surface what is actually public, the same as a logged-out visitor would see.
- No official support or SLA from Meta, since the provider is not Meta — endpoint stability depends entirely on the provider keeping up with Instagram's front-end changes.
A side-by-side request
The practical difference shows up immediately in what each call can target:
GET https://graph.instagram.com/me?fields=id,username,media_count
&access_token=TOKEN_FROM_THAT_ACCOUNTS_OAUTH_FLOWcurl --get \
"https://gramscraper.com/api/instagram/v1/user/by/username" \
--header "Authorization: Bearer $GRAMSCRAPER_API_KEY" \
--data-urlencode "username=natgeo"The Graph API call only works if natgeo's own Instagram account completed your app's OAuth flow and granted that token. The second call works for any public username, with no action required from that account, because it reads public data rather than acting on behalf of an authorized one.
When you genuinely need the Graph API instead
If your product publishes content to a business's own Instagram account, reads that business's own comments and insights, or needs official write access, the Graph API is the correct and only compliant path — a scraping API cannot post, reply, or act on an account's behalf, and should not be used to try. Build for OAuth and plan for app review time from the start.
When a scraping API is the right tool
If your product needs public data about accounts that have no relationship with your app — competitor tracking, influencer vetting, lead lists, market research, content discovery — a scraping API is the tool built for that, and the Graph API was never going to grant it no matter how you configure permissions. GramScraper covers profiles, posts, stories, reels, comments, hashtags, locations, and audio data for public Instagram accounts, plus documented TikTok routes, billed per request from a prepaid credit balance that does not expire.
Where to go next
For a working profile call end to end, see the API documentation. If you're evaluating providers rather than just the access model, see five Instagram scraping APIs compared. If you've already started with a DIY scraper and are hitting platform pushback, read the blocked and challenge triage guide.
Frequently asked questions
Can the Instagram Graph API get data from any public account?
No. The Graph API only returns data for Instagram professional accounts that have explicitly connected to your Meta app through OAuth. It cannot fetch posts, followers, or profile data for an arbitrary public account you don't control.
Why does my Instagram Graph API app need app review?
Most Graph API permissions beyond basic profile access are restricted until Meta reviews your app's use case, which requires a business verification, a use-case description, and often a screencast. This can take days to weeks and can be rejected.
What should I use instead of the Graph API for public competitor or market data?
A scraping API that reads public Instagram data directly, without requiring the target account to authorize your app. It trades official support for not needing account ownership, business verification, or app review.
Get 100 free API credits
Pull public Instagram profile and post data without OAuth, business verification, or app review.
Create a free account →