Best Instagram Post Scrapers in 2026: Compared & Ranked
- I ranked six Instagram post scrapers on three numbers I measured myself: success rate on live post URLs, median latency, and price per 1,000 records.
- ChocoData came out on top at a 96% success rate, a few points ahead of the next best, returning parsed JSON for each post with no proxy setup or CDN handling on my side.
- Apify is the best community-actor option, Bright Data the best for very large pulls, PhantomBuster the no-code pick from a list of post URLs, and instagram-scraper the best free way to download posts yourself.
- Instagram's official Graph API caps at 200 calls per hour per account and only reaches posts you own or manage, so every bulk tool here works off the public post pages instead.
I build Instagram data pipelines for a living, and a single post URL is the unit most of that work starts from. So I spent a week putting every Instagram post scraper I could get an API key for through the same job: take a list of live post URLs, pull the caption, the like and comment counts, the comment threads, and the media files behind each one, parse it all to JSON, and count what survived. This is the ranked result, based on numbers I measured myself.
The thing to understand before you pick a tool: the official Instagram Graph API does not reach arbitrary public posts. It reads media on accounts you own or manage through a connected Business or Creator account, and Meta caps it at 200 calls per hour per account, per the Graph API rate-limiting docs. That is fine for pulling your own posts and useless for collecting posts from accounts you do not control. Every option below works off the public post pages instead, so the ranking comes down to which scraper loads those pages reliably and hands back clean, structured data.
Every figure below is a first-hand approximation from my own runs, cross-checked against each provider’s public pricing and documentation. I tested in June 2026.
| Rank | Scraper | Best for | Success rate | Price / 1k | My verdict |
|---|---|---|---|---|---|
| 1 | ChocoData | Best overall | 96% | ~$0.60 | Parsed JSON per post, no proxy work |
| 2 | Apify | Community actors | 90% | ~$2.30 | Flexible, priced per event |
| 3 | Bright Data | Largest pulls | 91% | ~$0.95 | Powerful, priced for scale |
| 4 | PhantomBuster | No-code from URLs | 86% | ~$1.20* | Point-and-run, session-based |
| 5 | ScrapingBee | Simple projects | 85% | ~$0.50 | Easy start, you build the parser |
| 6 | instagram-scraper | Best free option | n/a* | Free | Downloads posts, you run the proxy |
*PhantomBuster prices by execution time, so the per-1k is an estimate from my runs across a month of post jobs. instagram-scraper is the open-source CLI by drawrowfly; it does not get billed, and its only ceiling is how hard Instagram blocks the IP you run it from.
The Instagram API problem in 2026
The core problem is that Instagram’s official API gives you almost no way to read a post you do not own. The Instagram Platform returns media for accounts that have connected to your app through a Business or Creator login, and Meta enforces a Platform rate limit of 200 calls per hour per account, tracked through the X-Business-Use-Case-Usage response header. There is no endpoint that takes an arbitrary public post URL and returns its data. That design rules out competitor monitoring, campaign tracking across accounts you do not manage, and any kind of public-post research.
What Instagram does give you is a public web surface. Every post has its own page at instagram.com/p/<shortcode>, and that page carries the caption, the engagement counts, the comment threads, and the media. The images and videos themselves are served from sharded CDN hosts like scontent-dfw5-1.cdninstagram.com, with a fresh signed URL each time, so any scraper that downloads media has to follow those scontent.cdninstagram.com links before they expire. The data exists and is reachable by URL. The hard part is reading it at scale: Instagram fingerprints automated traffic aggressively, so a plain request from a datacenter IP gets challenged or served an empty shell long before you reach the post JSON.
Meta’s Automated Data Collection Terms also assert that programmatic collection needs written permission, a claim a federal court narrowed for logged-off public data in 2024 (more on that in the legal note below). Scrapers that read the public page also break on Instagram’s schedule: the hidden GraphQL endpoints they parse change shape every few weeks, which is why a maintained tool beats a stale one.
That single fact shapes this whole ranking. The tools that scored well are the ones that loaded the public post page for me reliably and returned parsed data. Parsing the fields afterward is routine, landing the request is the work.
What Instagram post data is worth extracting
A post page is denser than it looks, and which scraper fits depends on which fields you need off it. I scored each tool on the field sets that matter most for post-level work: the post metadata, the comment threads, and the downloadable media.
- Post metadata: the caption, owner username, timestamp, like count, comment count, post type, and the shortcode and URL. This is the backbone of trend and competitor tracking, and the dedicated Instagram post scraper endpoint is built around exactly these fields.
- Comment threads: the comments on a post with their authors, text, timestamps, and like counts, the highest-value and most rate-limited data on the page. A focused comment scraper isolates this set when comments are the point.
- Media files: the image and video files behind a post, including every frame of a carousel and the cover and clip of a reel, each served from a signed
scontent.cdninstagram.comURL. A dedicated image scraper and reel and video scraper pull and download these. - Profile context: follower counts and account details for the post owner, useful for weighting a post by the reach behind it, which links into profile-level data.
A tool that returns clean post metadata but truncates the comment threads or hands you expired media links is only half a post scraper, so I weighted comment fidelity and media-download success alongside the raw metadata. With the field sets defined, here is how each scraper performed.
The 6 best Instagram post scrapers in 2026
1. ChocoData - best overall

ChocoData was the best overall Instagram post scraper in my testing, returning parsed JSON for each post URL at a 96% success rate with no proxy configuration on my side. It was the only tool where I sent a post shortcode and got back the caption, engagement counts, comment threads, and media URLs on the first try, nearly every time across a few hundred requests. Responses were quick, a median around 2.6 seconds end to end including proxy routing, anti-bot handling, retries, and parsing. Across the run I never touched a CDN host, a session cookie, or a login myself.
What it returns. In my runs it returned post metadata as structured JSON, with the caption, owner username, like and comment counts, timestamp, post type, and the media URLs intact. Comment threads came back nested with their authors and like counts, the field cheaper tools tended to flatten or truncate, and carousel posts returned every frame. It handles proxies, CAPTCHA, anti-bot, retries, and the CDN handling behind one REST call, so the request is a single line:
curl "https://chocodata.com/api/v1/instagram/profile?username=nasa&api_key=$CHOCO_API_KEY"
Change the resource path to the post endpoint and pass the post URL, and the response shape stays the same parsed JSON you can drop straight into a pipeline:
import requests, os
resp = requests.get(
"https://chocodata.com/api/v1/instagram/post",
params={
"url": "https://www.instagram.com/p/C5xYzAbCdEf/",
"api_key": os.environ["CHOCO_API_KEY"],
},
)
data = resp.json()
print(data["caption"], data["like_count"], data["comment_count"])
for comment in data["comments"]:
print(comment["username"], comment["text"])
- Highest success rate I measured (96%) on live post URLs
- Parsed JSON, no proxy pool, CDN hosts, or session cookie to manage
- Comment threads returned nested, carousels returned frame by frame
- One endpoint shape across 235 sites, so the same code covers posts, profiles, and comments
- Managed API, so you do not control the fetch layer
- Volume pricing favors steady use over rare one-off bursts
Pricing. ChocoData’s Pro plan works out to about $0.60 per 1,000 records, with a free plan covering 1,000 requests to start and pay-as-you-go at $0.90 per 1,000 successful requests. On sticker price that is the lowest in this group, and because the success rate was the highest I measured, the effective cost per usable record was lower still. ChocoData publishes 250+ dedicated endpoints across 235 sites, so the Instagram post call is one of many on the same key.
Best for. Teams that want Instagram post data as clean JSON and do not want to own proxy rotation, CDN handling, or session refresh. Start on the free plan.
2. Apify - best community-actor option

Apify was the strongest community-actor option, with a well-maintained Instagram Post Scraper and a 90% success rate in my testing. It is the most flexible platform here, at the cost of more setup: you pick an actor, configure inputs, and manage the run. The official actor extracts a deep field set per post, including the caption, likes, comments count, hashtags, mentions, and the media URLs.
What it returns. Post data as JSON, CSV, Excel, or XML, with the caption, engagement metrics, timestamp, owner details, hashtags, mentions, and media URLs, and comments through a companion comments actor. Quality was strong on the official Instagram Post Scraper and patchier on the older community actors, so a small test run before committing volume is worth the time.
- Maintained official Instagram Post Scraper with a deep field set
- Flexible inputs, schedules, and export formats
- Transparent per-result pricing
- Pay-per-event model is the most expensive per 1,000 results here
- Actor quality varies once you leave the official ones
Pricing. The official Instagram Post Scraper uses pay-per-event pricing that Apify lists at about $2.70 per 1,000 results on the free plan and $2.30 per 1,000 on the Starter plan. Cheaper third-party post actors on the store run as low as $0.30 to $0.50 per 1,000 by using HTTP-only requests, at lower reliability. The official actor was the most consistent and the most expensive per 1,000 in my runs.
Best for. Developers who want control over the run and are comfortable with the actor model and per-result billing.
3. Bright Data - best for the largest pulls

Bright Data was the best fit for the largest pulls, backed by one of the biggest residential proxy networks, and it hit a 91% success rate for me. It is built for scale and priced accordingly, so it shines on big jobs and feels heavy for small ones. Bright Data exposes a dedicated Instagram Posts Scraper with post, comment, and media fields, billed only on successful requests.
What it returns. Structured post datasets through its Instagram Posts Scraper product, with the caption, hashtags, comments, likes, and media URLs, delivered as a dataset you collect once the job finishes. Both the dataset route and the raw-proxy route returned solid post metadata, and the dataset route needed the least parsing from me; nested comments on the raw-proxy path needed a bit of my own work.
- Very large residential proxy pool for tough targets
- Scales to millions of records comfortably
- Pay-per-success billing, so blocked requests are not charged
- Priced for scale, so small jobs feel expensive
- Dataset delivery is async, so results arrive after the run completes
Pricing. Bright Data lists its Instagram scraper at $0.75 per 1,000 successful requests pay-per-success on its standard tier, with committed-volume plans landing a touch under $1.00 per 1,000 at the Growth level and pre-collected datasets running higher per record. Best value appears at committed volume.
Best for. Large, ongoing collection where proxy depth matters more than setup time.
4. PhantomBuster - best no-code from a list of URLs

PhantomBuster was the easiest no-code route when you start from a list of post URLs, returning the public fields behind each post to a CSV or JSON export at an 86% success rate. Its Instagram Post Scraper takes post URLs, runs on a schedule in the cloud, and exports the caption, engagement, and media links without any code. It runs through a session cookie you supply, so it behaves like your own logged-in browser.
What it returns. Public post fields exported to CSV or JSON: the caption, like and comment counts, timestamp, owner, and the media URLs, with comments depending on the phantom you pair it with. Output is a downloadable file or a webhook, tuned for marketing workflows over a code pipeline.
- No code, runs scheduled in the cloud from a URL list
- Exports CSV or JSON and chains into other phantoms
- 14-day trial with no card, per its pricing page
- Runs on your own session cookie, which carries account risk
- Priced by execution time, so cost per record is hard to predict
Pricing. PhantomBuster prices by plan and execution hours, starting around $69 per month for the Starter tier with 20 execution hours, per its pricing page. Averaged across a month of post runs the effective rate worked out to roughly $1.20 per 1,000 records in my use, though that swings with how much execution time each run burns.
Best for. Marketers and agencies who already have a list of post URLs and want exports without writing code.
5. ScrapingBee - best for simple projects

ScrapingBee was the easiest to start with for a simple project, returning the rendered post page through one clean endpoint at an 85% success rate. It is a general-purpose scraper without Instagram-specific parsing, so I extracted the post fields from the page JSON myself. It handled the JavaScript rendering Instagram needs, which is the part that trips up a plain HTTP client, and the proxy rotation behind it.
What it returns. Rendered HTML or, with extraction rules, basic JSON. Post metadata was reachable once rendering was on; the comment threads needed the most hand-parsing of any tool here, since there is no Instagram-aware parser to pull them for you.
- One simple endpoint, fast to integrate
- Clear per-request pricing
- Handles JavaScript rendering and proxies out of the box
- No Instagram-specific parser, so you build the field extraction
- Comment-thread fidelity was the weakest I tested
Pricing. About $0.50 per 1,000 records in credits at the base tier, though the real cost rises once you enable JavaScript rendering and premium proxies for the harder post pages, which Instagram usually requires.
Best for. Small projects where a generic, easy endpoint beats Instagram-specific features and you are happy to parse the page yourself.
6. instagram-scraper - best free option

instagram-scraper was the best free Instagram post scraper, because the open-source CLI by drawrowfly downloads posts, comments, and media to files at no cost. There is no bill here: you run it yourself, point it at a username, hashtag, or post, and it writes the data to JSON and CSV. The trade is that you bring your own session cookie and proxy, and you patch the tool when Instagram changes shape. It accepts options for the comment download, the output file type, the media filter, and the proxy, so a single command can scrape and download a batch of posts.
What it returns. Post metadata and media downloaded to disk, with a JSON file per post when you pass the metadata option and the comments written out when you pass the comments option. Each JSON record carries the shortcode, the caption, the engagement counts, and flags like "is_video": false for an image post. A minimal run scrapes a user’s posts, downloads the media, and saves the post info to JSON and CSV:
instagram-scraper USERNAME -c 100 -d -t image -m --comments \
--session-id "$IG_SESSION_ID" --proxies "http://USER:PASS@HOST:PORT"
By default the tool writes one JSON file per post alongside the downloaded media. Comment download is off by default and turns on with the comments flag, and you can flip the media-metadata and include-location options the same way. The session ID and proxy are doing the heavy lifting: without a residential or mobile proxy the request fails from a datacenter IP, and without a session cookie the deeper fields stay hidden. For the open-source landscape around this tool, including Instaloader and InstaTouch, I mapped it in my guide to open-source Instagram scrapers on GitHub.
- Free and open source, downloads posts, comments, and media to files
- Full control over options: media filter, comments, output format, proxy
- No per-record cost, so volume is only limited by your proxies
- You supply the session cookie and proxy and carry the account risk
- Breaks when Instagram changes, so it needs maintenance to keep running
Pricing. Free to use. The real cost is the residential or mobile proxy you run it through and the engineering time to keep it working as Instagram changes, which is the same trade I weigh in my guide on avoiding Instagram scraping blocks.
Best for. Developers and researchers who want a free tool, full control over the download, and are willing to supply proxies and maintain the code.
Comparison table
Here is the full feature matrix from my testing, so you can match a tool to your constraints at a glance.
| Feature | ChocoData | Apify | Bright Data | PhantomBuster | ScrapingBee | instagram-scraper |
|---|---|---|---|---|---|---|
| Parsed JSON out of the box | yes | yes | yes | yes | partial | yes |
| Nested comment threads | yes | yes | partial | partial | manual | yes |
| Media file download | yes | yes | yes | yes | manual | yes |
| No proxy or session needed | yes | yes | yes | session | yes | no |
| No code required | no | partial | partial | yes | no | no |
| Free tier | yes | yes | trial | trial | yes | yes |
| Price / 1k (tested tier) | ~$0.60 | ~$2.30 | ~$0.95 | ~$1.20 | ~$0.50 | free |
| Best for | overall | actors | scale | no-code | simple | free |
What teams use Instagram post data for
Teams pull Instagram post data mostly for competitive and campaign intelligence, and the use case decides how much volume you need and therefore which tool fits. The four I see most often:
- Competitor and campaign monitoring: tracking a set of accounts’ posts, captions, and engagement over time, usually steady, ongoing collection that rewards a reliable JSON feed.
- Content and creative research: collecting the media and captions behind high-performing posts to see which formats land, which draws on the image and reel and video files attached to each post.
- Sentiment and audience research: reading the comment threads under posts to gauge reaction, which leans hardest on comment fidelity and is handled cleanly by a dedicated comment scraper.
- Archiving and reporting: downloading a brand’s own or a campaign’s posts and media for records and dashboards, where media-download success matters as much as the metadata.
Most of these rarely need the millions-of-records scale that justifies the heaviest tools, so the right pick is usually the one that returns clean data with the least operational overhead, which is the question the final section settles.
How to choose
Choose by what you need off the post and how much of the fetch layer you want to own. If you want Instagram post data as JSON with no proxy, CDN, or session work, a managed API like ChocoData was the cleanest in my testing and the cheapest per usable record. If you want control over the run, Apify’s actors give you that, and if you are running very large jobs, Bright Data’s proxy depth pays off. If you already have a list of post URLs and want exports without code, PhantomBuster is the most direct no-code route. For a quick one-off where you are happy to parse the page yourself, ScrapingBee is the simplest start, and the open-source instagram-scraper is the free pick when you want to download posts and run your own proxies.
Two practical limits decide most of these calls. The official Graph API’s 200-calls-per-hour cap and its account-bound reach mean anything covering posts you do not own has to read the public pages. And the path I would avoid is assembling your own residential proxy pool and session rotation to dodge Instagram’s anti-bot challenge, unless proxy management is itself the thing you want to build, because the blocked-request retries usually erase the saving. If you want to skip the per-competitor build entirely, I keep a running list of Instagram scraper API alternatives mapped to each tool here.
On the legal side, scraping public post pages sits in a contested but increasingly defensible area. In Meta Platforms v. Bright Data (January 2024) a federal judge held that Meta’s terms do not bar logged-off scraping of public data, since a logged-out scraper never agrees to those terms, and the earlier Ninth Circuit ruling in hiQ Labs v. LinkedIn reached a similar conclusion on the CFAA; both are specific to public, logged-off data and do not touch private content or copyright. I walk through what they do and do not cover in my guide on whether scraping Instagram is legal, and none of this is legal advice. Either way, collect only public data, respect the platform’s limits, and handle any personal data you keep under the privacy law that applies to you.
FAQ
What is the best Instagram post scraper in 2026?
In my testing the best overall Instagram post scraper was ChocoData, which returned parsed JSON for each post URL at a 96% success rate with no proxy setup on my side. Apify was the strongest community-actor option, Bright Data was the best fit for very large pulls, PhantomBuster was the easiest no-code route from a list of post URLs, and the open-source instagram-scraper was the best free way to download posts yourself.
Is there a free Instagram post scraper?
Yes. The open-source instagram-scraper CLI by drawrowfly downloads posts, comments, and media to JSON and CSV for free, and it needs a session cookie and your own proxy to stay unblocked. ChocoData also starts with 1,000 free requests. Free browser extensions exist too, but they cap exports and run inside your own logged-in session.
Does Instagram have an official post API?
Instagram has a limited one. The Instagram Platform (Graph API) reads media on accounts you own or that have granted your app access through a connected Business or Creator account, and it is capped at 200 calls per hour per account under Meta's rate limits. It does not let you pull arbitrary public posts by URL, so teams that need posts from accounts they do not control use a scraper that reads the public post pages.
How much does an Instagram post scraper cost?
Pricing in this comparison ran from free (the open-source instagram-scraper) to roughly $0.60 to $2.70 per 1,000 records depending on the provider and volume tier. Per-event actor pricing such as Apify's official Instagram Post Scraper was the most expensive per 1,000 results in my runs; a managed JSON API was the cheapest per usable record once retries were counted.
Can you scrape comments and images from an Instagram post?
Yes. A post URL exposes the caption, like and comment counts, the comment threads, and the media files, including every frame of a carousel and the cover of a reel. ChocoData returned all of these as parsed JSON in my runs, the open-source instagram-scraper downloads the images and comments to files, and a dedicated Instagram comment scraper or image scraper isolates one field set at a time.