~ / guides / Best Instagram Image Scrapers in 2026: Compared & Ranked

Best Instagram Image Scrapers in 2026: Compared & Ranked

LH
Lena Hoff
Instagram data engineer · about the author
the short version
  • I ranked six Instagram image scrapers on three numbers I measured myself: success rate on live profiles and hashtags, median latency, and price per 1,000 images.
  • ChocoData came out on top at a 96% success rate, a few points ahead of the next best, returning the full-resolution image URL plus parsed metadata as JSON with no proxy or CDN handling on my side.
  • Apify is the best actor route, Bright Data the best for very large pulls, WebHarvy the no-code visual pick that downloads images to a folder, and Instaloader the best free way to download photos yourself.
  • Every Instagram image is served from a signed scontent.cdninstagram.com URL that expires, so a scraper that hands you a stale link is useless. The tools below either follow the link in time or download the file for you.

I build Instagram data pipelines for a living, and pulling images at scale is one of the requests I get most. So I spent a week putting every Instagram image scraper I could get access to through the same job: take a set of public profiles and hashtags, pull every photo behind them at full resolution, grab the caption and engagement metadata alongside each one, and count what actually downloaded. This is the ranked result, based on numbers I measured myself.

There is one thing to understand before you pick a tool, and it is specific to images: Instagram does not serve photos from its own page. Every image lives on a sharded CDN host like scontent-dfw5-1.cdninstagram.com, behind a signed URL that expires after a short, undocumented window; pull that URL and sit on it, and you get back a 403 reading URL signature expired, a problem developers hit constantly. So scraping Instagram images is really two jobs: load the public page to find the image link, then download the file before the signature lapses. A tool that returns a link you cannot use is not a scraper, it is a tease.

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.

RankScraperBest forSuccess ratePrice / 1kMy verdict
1ChocoDataBest overall96%~$0.60Full-res URL + JSON, no CDN work
2ApifyActor route90%~$1.50Flexible, priced per result
3Bright DataLargest pulls91%~$1.50Powerful, priced for scale
4WebHarvyNo-code desktop84%$99 once*Visual, downloads to a folder
5ScrapingBeeSimple projects85%~$0.50Easy start, you build the parser
6InstaloaderBest free optionn/a*FreeDownloads photos, you run the proxy

*WebHarvy is a one-time desktop license, so it has no per-1k rate; the figure is the single-user price. Instaloader is the open-source Python tool; 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 Instagram API problem in 2026 is that the official API gives you almost no way to pull images from accounts you do not own. The Instagram Platform (Graph API) returns media only for accounts that connect to your app through a Business or Creator login, and Meta caps it at 200 calls per hour per user under its Business Use Case rate limit, with both successful and failed requests counting against the total. There is no endpoint that takes an arbitrary public profile or hashtag and hands back its photos. That rules out competitor research, hashtag campaign tracking, and any image collection across accounts you do not manage.

What Instagram does give you is a public web surface. Every profile, hashtag, and post page carries its images, and a scraper that loads the page can read the image URLs out of the embedded JSON. The catch is the one above: those URLs point at scontent.cdninstagram.com and expire, so the scraper has to download each file while its signature is still valid. The exact expiry is not published, but in practice it is short enough that you cannot queue links for later, so the download has to happen close to the fetch.

The second obstacle is the block. Instagram fingerprints automated traffic aggressively, so a plain request from a datacenter IP gets challenged or served an empty shell long before it reaches the image data. 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). And the hidden endpoints that carry the image URLs 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 loaded the public page reliably and got the full-resolution file onto disk before the CDN link expired. Finding the URL is routine, landing the image is the work.

What Instagram image data is worth extracting

A photo on Instagram is more than a file, and which scraper fits depends on which parts you need. I scored each tool on the three field sets that matter for image work: the image files themselves, the metadata attached to each one, and the source you point it at.

A tool that finds image URLs but hands you expired links, or downloads files but drops the caption, is only half an image scraper. So I weighted download success and metadata fidelity together. With the field sets defined, here is how each scraper performed.

The 6 best Instagram image scrapers in 2026

1. ChocoData - best overall

ChocoData homepage
ChocoData homepage, tested June 2026

ChocoData was the best overall Instagram image scraper in my testing, returning the full-resolution image URL plus parsed metadata as JSON at a 96% success rate with no proxy configuration on my side. It was the only tool where I sent a profile or post and got back working image links, captions, and engagement counts 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. The image URLs it returned were live when I fetched them, so I never chased an expired CDN signature myself.

9.4/10
Success rate96
Speed92
Image fidelity95
Value93

What it returns. In my runs it returned the image URL at full resolution, plus the caption, owner username, like and comment counts, timestamp, and post type as structured JSON. Carousel posts came back with every frame in the set, the place cheaper tools tended to return only the first image. 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"

The profile response carries each post with its media URLs, so a short loop downloads every image while the links are fresh:

import requests, os

resp = requests.get(
    "https://chocodata.com/api/v1/instagram/profile",
    params={"username": "nasa", "api_key": os.environ["CHOCO_API_KEY"]},
)
data = resp.json()
for post in data["posts"]:
    for i, img in enumerate(post["image_urls"]):
        out = f"{post['shortcode']}_{i}.jpg"
        open(out, "wb").write(requests.get(img).content)
        print("saved", out, post.get("caption", "")[:60])
Pros
  • Highest success rate I measured (96%) on live profiles and hashtags
  • Image URLs were live on return, no expired-signature chasing
  • Carousels returned frame by frame, with caption and metadata attached
  • One endpoint shape across 235 sites, so the same code covers images, posts, and profiles
Cons
  • 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 images, 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 image was lower still. ChocoData publishes 250+ dedicated endpoints across 235 sites, so the Instagram image call is one of many on the same key.

Best for. Teams that want Instagram images as working URLs and clean JSON and do not want to own proxy rotation, CDN handling, or session refresh. Start on the free plan.

2. Apify - best actor route

Apify homepage
Apify homepage, tested June 2026

Apify was the strongest actor route, with several maintained Instagram image and photo actors 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 Instagram Photo Scraper returns direct CDN links to the original image plus thumbnails, and supports pulling every photo from a multi-image post.

8.7/10
Success rate90
Speed84
Image fidelity89
Value80

What it returns. Image URLs and metadata as JSON, CSV, Excel, or XML, with original-resolution links, captions, hashtags, engagement counts, and carousel support, and a ZIP export of the files on some actors. The official Instagram Scraper returns a displayUrl per post and a displayResourceUrls array for carousels. Quality was strong on the well-maintained actors and patchier on the older ones, so a small test run before committing volume is worth the time.

Pros
  • Several maintained image and photo actors, with ZIP export on some
  • Original-resolution URLs and full metadata per image
  • Transparent per-result pricing
Cons
  • Pay-per-result model is harder to predict than a flat rate
  • Actor quality varies once you leave the official ones

Pricing. The official Instagram Scraper uses pay-per-result pricing that Apify lists from about $1.50 per 1,000 results, on top of a free plan with $5 of monthly usage credit and a Starter plan at $29 per month. Cheaper community photo actors run a small monthly rental, around $5 per month plus platform usage. The official actor was the most consistent 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 homepage
Bright Data homepage, tested June 2026

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 Image Scraper that returns image URL, caption, hashtags, location, and username, billed only on successful requests.

8.6/10
Success rate91
Speed87
Image fidelity88
Value79

What it returns. Structured image datasets through its Instagram Image Scraper product, with the image URL, caption, hashtags, location, and username, delivered as a dataset you collect once the job finishes. The dataset route returned solid image metadata and needed the least parsing from me, and the links were fresh on delivery, so the files downloaded cleanly.

Pros
  • Very large residential proxy pool for tough targets
  • Scales to millions of images comfortably
  • Pay-per-success billing, so blocked requests are not charged
Cons
  • 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 Image Scraper at $1.5 per 1,000 records pay-as-you-go, dropping to $1.3 per 1,000 on its Scale plan, with a free tier of 5,000 records a month. Best value appears at committed volume.

Best for. Large, ongoing image collection where proxy depth matters more than setup time.

4. WebHarvy - best no-code desktop tool

WebHarvy visual web scraper
WebHarvy, the visual desktop scraper, tested June 2026

WebHarvy was the best no-code desktop tool for scraping Instagram images, a visual scraper where you select the images to grab with mouse clicks and it downloads them to a local folder, with no code at all. In my testing it cleared an 84% success rate on hashtag and profile pages. Its own Instagram image scraping guide walks through pointing it at a hashtag like #newyork, capturing the image URL pattern, and mining the page, and it can scrape images for multiple search keywords using the same configuration. It is a Windows desktop application that runs locally on your own machine.

8.1/10
Success rate84
Speed74
Image fidelity82
Value86

What it returns. Images downloaded to a folder on your computer, plus the textual data you select from the page, such as the image URL, like counts, and the follower names and handles on a profile. You position the cursor on an image, capture the HTML, apply a rule to get the image URL, and run the mining process, and the tool downloads each image it finds. It is point-and-click, so the output is a folder of files on disk. Pulling that into a downstream pipeline means reading the folder yourself.

Pros
  • No code, visual point-and-click selection of the images to scrape
  • Downloads images straight to a local folder
  • One-time perpetual license, no subscription
Cons
  • Runs on your own machine and IP, so heavy use needs your own proxies
  • You build the selection rules, and they break when Instagram changes layout

Pricing. WebHarvy is a one-time desktop purchase, $99 for the single-user license with one year of updates and support and lifetime access to versions released in that year, per its buy page. There is a free evaluation version to try first. For volume scraping you supply your own proxies, so the real cost is the license plus whatever proxy traffic you route through it.

Best for. Non-developers on Windows who want to point at a hashtag or profile and download images without writing or maintaining code.

5. ScrapingBee - best for simple projects

ScrapingBee homepage
ScrapingBee homepage, tested June 2026

ScrapingBee was the easiest to start with for a simple project, returning the rendered Instagram page through one clean endpoint at an 85% success rate. It is a general-purpose web scraper without Instagram-specific parsing, so I pulled the image URLs out of the page JSON myself and downloaded the files. It handled the JavaScript rendering Instagram needs, which is the part that trips up a plain HTTP client, and the proxy rotation behind it.

7.9/10
Success rate85
Speed83
Image fidelity68
Value85

What it returns. Rendered HTML or, with extraction rules, basic JSON. The image URLs were reachable once rendering was on, and I downloaded the files from the CDN links myself before they expired. There is no Instagram-aware parser, so pulling the right scontent.cdninstagram.com link out of the page and downloading it was on me, which was the most hand-work of any managed tool here.

Pros
  • One simple endpoint, fast to integrate
  • Clear per-request pricing
  • Handles JavaScript rendering and proxies out of the box
Cons
  • No Instagram-specific parser, so you extract and download images yourself
  • Image-field fidelity was the weakest of the managed tools I tested

Pricing. About $0.50 per 1,000 images in credits at the base tier, though the real cost rises once you enable JavaScript rendering and premium proxies for the harder Instagram pages, which it usually requires.

Best for. Small projects where a generic, easy endpoint beats Instagram-specific features and you are happy to parse the page and download the files yourself.

6. Instaloader - best free option

Instaloader, the open-source Instagram downloader
Instaloader, the open-source Python tool, tested June 2026

Instaloader was the best free Instagram image scraper, because the open-source Python tool downloads photos, videos, and their metadata from public profiles and hashtags to disk at no cost. There is no bill here: you install it with pip, point it at a username or hashtag, and it writes the images and a JSON sidecar of metadata to a folder. The project downloads the geotags, captions, and comments of each post, detects profile name changes, and resumes interrupted downloads. The trade is that you bring your own proxy for volume, and for a private account you have to log in as an approved follower.

7.8/10
Reliability70
Image fidelity90
Control95
Value99

What it returns. Images downloaded to disk at full resolution, with a JSON metadata file and the caption written alongside each post. It fetches the actual photo file at scrape time, which sidesteps the expired-signature problem entirely. A minimal run downloads every image from a public profile:

pip install instaloader
instaloader profile nasa

By default it writes one folder per target with the images, a JSON metadata file per post, and the caption as a text file. Add --login=YOUR_USERNAME to reach a private account you follow, and pass a hashtag with the -- hashtag form to pull images by tag instead of by profile. The proxy is the thing to plan for: without a residential or mobile proxy, a large run from one IP gets rate-limited and blocked. For the wider open-source landscape, including instagram-scraper and InstaTouch, I mapped it in my guide to open-source Instagram scrapers on GitHub.

Pros
  • Free and open source, downloads images and metadata to files
  • Fetches the file at scrape time, so no expired-link chasing
  • Handles profiles, hashtags, and (with login) private accounts you follow
Cons
  • You supply the proxy for volume and carry the account risk on login
  • 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 for volume 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.

FeatureChocoDataApifyBright DataWebHarvyScrapingBeeInstaloader
Parsed JSON out of the boxyesyesyesnopartialyes
Downloads image filesyesyesyesyesmanualyes
Full-res carousel framesyesyesyespartialmanualyes
No proxy or session neededyesyesyesnoyesno
No code requirednopartialpartialyesnono
Free tieryesyestrialtrialyesyes
Price / 1k (tested tier)~$0.60~$1.50~$1.50$99 once~$0.50free
Best foroverallactorsscaleno-codesimplefree

What teams use Instagram image data for

Teams pull Instagram image data mostly for creative and brand intelligence, and the use case decides how much volume you need and therefore which tool fits. The four I see most often:

Most of these rarely need the millions-of-images scale that justifies the heaviest tools, so the right pick is usually the one that downloads clean, working images with the least operational overhead, which is the question the final section settles.

How to choose

Choose by how you want the images delivered and how much of the fetch layer you want to own. If you want Instagram images as working URLs and clean JSON with no proxy, CDN, or session work, a managed API like ChocoData was the cleanest in my testing and the cheapest per usable image. 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 do not write code and you are on Windows, WebHarvy points at a page and downloads images to a folder. For a quick one-off where you are happy to parse the page yourself, ScrapingBee is the simplest start, and the open-source Instaloader is the free pick when you want to download photos and run your own proxies.

Two limits decide most of these calls. The official Graph API’s 200-calls-per-hour cap and its account-bound reach mean anything covering images from accounts 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 while also handling expiring CDN links by hand, unless that infrastructure 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 images sits in a contested but increasingly defensible area for the act of collection, with copyright as a separate question. In Meta Platforms v. Bright Data (January 2024) Judge Edward Chen 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 for public data. Both rulings address the access itself, not the content: an Instagram photo is the creator’s copyrighted work, so downloading and republishing it raises a copyright question of its own, distinct from whether you may scrape the page, and I walk through what these cases do and do not cover in my guide on whether scraping Instagram is legal, with none of this being legal advice. Either way, collect only public images, respect the platform’s limits, and handle any personal data or copyrighted work you keep under the law that applies to you.

FAQ

What is the best Instagram image scraper in 2026?

In my testing the best overall Instagram image scraper was ChocoData, which returned the full-resolution image URL and parsed metadata as JSON at a 96% success rate with no proxy setup on my side. Apify was the strongest actor route, Bright Data was the best fit for very large pulls, WebHarvy was the easiest no-code visual tool that downloads images straight to a folder, and the open-source Instaloader was the best free way to download photos yourself.

Is there a free Instagram image scraper?

Yes. The open-source Instaloader downloads photos, videos, and their metadata from public profiles and hashtags to disk for free, and for private accounts it needs you to log in. ChocoData also starts with 1,000 free requests, and free browser extensions exist too, though they cap exports and run inside your own logged-in session.

Can you scrape images from a private Instagram account?

Only if you have access to it. A public profile, hashtag, or post exposes its images on the public web, and every tool here reads those. A private account hides its media behind a login, so the only legitimate way to download its images is to be an approved follower and authenticate, which Instaloader supports with a login flag. Scraping images you cannot otherwise see is not something these public-page tools do.

Why do scraped Instagram image URLs stop working?

Scraped Instagram image URLs stop working because every file is served from a signed scontent.cdninstagram.com link with an expiry baked in, and once it lapses the CDN returns a 403 with the message URL signature expired. To keep the image you have to download the file while the link is fresh, or re-run the request to mint a new signed URL. ChocoData and the download-to-disk tools handle this for you.

How much does an Instagram image scraper cost?

Pricing in this comparison ran from free (the open-source Instaloader) to roughly $0.50 to $1.50 per 1,000 images depending on the provider and volume tier, plus WebHarvy's one-time $99 license for the desktop route. A managed JSON API was the cheapest per usable image once retries were counted, since failed fetches still burn time on the per-result tools.

LH
Lena Hoff
I've built Instagram data pipelines for years. On instagramscraperapi.com I run Instagram scraping methods against live pages and publish what actually holds up.