How to scrape Instagram data: 3 methods and honest tradeoffs
There are three practical ways to get Instagram data into a spreadsheet or a database. None is best for everyone. Here is what each one really involves.
Method 1: the official Graph API
What it reads: your own professional account in full, and other professional accounts through Business Discovery: followers, media count, and likes, comments and views per post source.
What it takes: a Meta app, a professional Instagram account, and for serving accounts you do not own, Advanced Access through App Review and Business Verification source. Plan for review time.
Limits: no personal accounts, no comments on other people's posts, and hashtag search capped at 30 unique hashtags per 7 days source.
Pick it when you report on accounts you own or manage, or your product needs to publish.
Method 2: instaloader
instaloader is a free, open-source Python tool. One command saves a public profile's posts, captions and metadata:
pip install instaloader
instaloader --comments --no-videos natgeo
Or as a library:
import instaloader
L = instaloader.Instaloader(download_pictures=False, download_videos=False)
profile = instaloader.Profile.from_username(L.context, "natgeo")
print(profile.followers, profile.mediacount)
for i, post in enumerate(profile.get_posts()):
print(post.date_utc, post.likes, post.comments)
if i >= 20:
break
Tradeoffs, from its own docs:
- Hashtags, locations, stories and your feed need a login source. That means requests run under your personal Instagram account.
- Anonymous access from cloud servers, VPNs and shared IPs may get much stricter limits; you will see 429 errors and the tool waits and retries source.
- It is not affiliated with Instagram, and its docs say to use it at your own risk source.
Pick it when you need a one-off archive of a few public profiles from your own machine, and cost matters more than time.
Method 3: a hosted API
A hosted API does the collection and returns JSON. You send an HTTP request and get structured data back.
curl "https://scrapeio.com/v1/instagram/user/reels?handle=natgeo" \
-H "x-api-key: YOUR_KEY"
Tradeoffs: you pay per call or per month, and you depend on the vendor's uptime and field choices. In return there is no login, no server upkeep, and coverage of personal and professional accounts alike. Vendors differ a lot in price model, so compare them on your own test set. Our Instagram API comparison lists seven.
Pick it when data feeds a product, a dashboard or an AI agent, and has to work every day.
The three side by side
| Graph API | instaloader | Hosted API | |
|---|---|---|---|
| Money cost | None | None | Per call or monthly |
| Time to first data | Days to weeks (review) | Minutes | Minutes |
| Personal accounts | No | Public ones | Public ones |
| Comments on others' posts | No | Yes | Yes |
| Your own private insights | Yes | No | No |
| Maintenance | Version upgrades | You fix breakages | Vendor's job |
The legal side
This is not legal advice. Talk to a lawyer about your specific use.
One court decision is often cited. In Meta Platforms v. Bright Data (N.D. Cal., January 23, 2024), Judge Edward Chen granted summary judgment to Bright Data on Meta's breach-of-contract claim, finding that scraping public data while logged off was not "use" of Facebook and Instagram under Meta's terms. Other claims remained, and it is one district court ruling Farella Braun + Martel summary. The point most people take from it: logged-in collection is a different situation, because then you have agreed to Meta's terms.
Separately, privacy law such as GDPR applies to personal data even when it is public. Collect the minimum, and do not profile individuals.
A checklist before you start
- Write down the exact fields you need. Most projects need fewer than ten.
- Decide how fresh the data must be: hourly, daily or once.
- Estimate volume: accounts times posts per account times refreshes.
- Pick the method from the table above.
- Store
fetched_aton every row.
Doing it with ScrapeIO
ScrapeIO is a hosted API for public data only. The instagram profile API, instagram user reels API and instagram hashtag API cost 1 credit per call, and calls that fail or find nothing are free. Credits never expire, so a one-off project does not leave a subscription running.
Sources
Checked on 8 November 2026 from each vendor's own pages. Prices and limits change; follow the links before you decide.
- https://developers.facebook.com/docs/instagram-platform/overview
- https://developers.facebook.com/docs/instagram-platform/instagram-api-with-facebook-login/business-discovery
- https://developers.facebook.com/docs/instagram-platform/instagram-api-with-facebook-login/hashtag-search
- https://instaloader.github.io/
- https://instaloader.github.io/basic-usage.html
- https://instaloader.github.io/troubleshooting.html
- https://www.fbm.com/post/102kqw7/
100 free credits, no card. Credits never expire.
Get API key