If you’re building anything that needs Instagram data about creators you don’t control, such as a discovery tool, a CRM, or a dashboard of competitor accounts, you’ll hit the same wall: Instagram doesn’t offer a general-purpose API for public profiles.
That leaves three realistic routes. Which one is right depends on whose accounts you need, how many, and how fresh the data has to be.
In short
- The Graph API only covers professional (business and creator) accounts. Personal accounts are off-limits.
- Business Discovery gives you basic public stats for other professional accounts, if you have an approved app.
- For anything else, or for scale, a scraping API is usually cheaper than building and maintaining your own scraper.
What the Graph API gives you
Since Meta retired the Basic Display API at the end of 2024, the Instagram Graph API is the only official way in, and it only works with professional accounts.
For accounts that connect to your app, you get a lot: posts, comments, insights and audience demographics. For everyone else, you have one feature, Business Discovery, which returns public basics for other professional accounts by username: follower count, post count and recent posts with their like and comment counts.
That’s enough for some projects. It isn’t enough if you need personal accounts, reels views, comments on other people’s posts, or thousands of lookups an hour. Our guide to Graph API limits covers the rules in detail.
| What you need | Graph API | Scraping API | Your own scraper |
|---|---|---|---|
| Accounts you manage | Yes | Yes | Yes |
| Other business and creator accounts | Business only | Yes | Yes |
| Personal accounts | No | Yes | Yes |
| Reels and their views | Some | Yes | Yes |
| Comments on others’ posts | No | Yes | Some |
| Thousands of lookups an hour | No | Yes | Some |
Your three options
1. Business Discovery
Free, official and stable. You’ll need a Meta developer app, an Instagram professional account of your own, and to pass App Review. It’s the right choice if you only care about business and creator accounts and modest volumes.
2. A scraping API
A provider collects public data on your behalf and returns it as JSON. You send a username; you get back the profile, posts, reels or comments. You pay per request or per result, and the provider deals with Instagram’s rate limits and blocking.
Quality varies a lot. Some fetch live, some answer from a cache that can be days old, and coverage ranges from profiles only to followers, stories and comments. Our Instagram ranking compares them.
3. Build your own scraper
Possible, but rarely cheaper once you count the work. Instagram changes its internal endpoints without notice and limits logged-out requests per IP address, so you’ll need a pool of proxies and someone to fix things when they break.
Getting started with a scraping API
- Pick two or three providers from our ranking and sign up for their free tiers.
- Run the same 50 to 100 usernames through each, including some small accounts.
- Check a handful of results against the live profiles, and work out the cost per successful request.
- Build retries and caching in from the start.
Most providers work the same way. A minimal request with retries looks like this:
import time, requests
RETRYABLE = {429, 500, 502, 503, 504}
def get_profile(username, retries=3):
for attempt in range(retries):
try:
r = requests.get(
"https://api.[provider].com/v1/instagram/profile",
params={"username": username},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=30,
)
except requests.Timeout:
r = None
if r is not None:
if r.ok:
return r.json()
if r.status_code not in RETRYABLE:
return None # e.g. account not found: don't retry
time.sleep(2 ** attempt) # back off before retrying
return NoneHandling failures
Every provider fails on some requests, because Instagram changes and blocks without warning. Plan for it:
- Retry with backoff on timeouts and server errors, but not on “account not found”.
- Check the payload, not just the status code. Some providers return a success with empty fields.
- Track freshness. Store when each record was fetched so stale data doesn’t look current.
Staying on the right side of the law
Collecting public, logged-out data is generally lawful in the US, and in 2024 a US court ruled that Bright Data’s logged-out scraping of public Instagram and Facebook data didn’t breach Meta’s terms. In the EU and UK, GDPR still applies to public profiles: you need a lawful basis to store personal data, and you should keep only what you need.
This isn’t legal advice. Our guide to the law goes into more detail.
Which provider to choose
For most projects, start with the top of our ranking and weigh price against accuracy:
- 1ScrapeCreatorsMost developers and most jobs8.7
- 2Bright DataLarge companies collecting in bulk8.4
- 3InflushipProfiles, posts and reels at scale, billed after use8.3
If you’re building a production app or an AI agent, Influship is worth a look. Its Instagram profile call returns up to 50 recent posts in one request at a flat $1.80 per 1,000 calls, billed after use like infrastructure, and failed calls are free.
Questions
Can I get personal Instagram accounts through the Graph API?
No. The Graph API only covers professional accounts, and Business Discovery only returns other professional accounts.
Is Business Discovery free?
Yes, but you need an approved Meta app and your own professional Instagram account, and it’s rate-limited.
How much does a scraping API cost?
At published rates, between about $1.00 and $6.67 per 1,000 requests across the providers we rank, depending on the plan and volume.
Do scraping APIs need my Instagram login?
No. They return public data without your credentials, and you shouldn’t share them.


