InstagramComparison

Best Instagram scrapers tested on the same 10 profiles

We ran 4 free Instagram scrapers and our API on 10 public profiles. Our API got 10 of 10 twice; 2 free tools worked, both only via a residential IP.

9 min read

Short answer

  • On 2026-10-18 we ran four free Instagram scrapers and our API on the same 10 public profiles, twice each. Our API returned 10 of 10 both times with no proxy. Our script returned 10 of 10 twice through a residential IP and 0 of 10 from a datacenter. Scout returned 8 and 9 of 10 through a residential IP. Instaloader and @aduptive/instagram-scraper returned 0 in every run.
  • The catch: every free tool is a logged-out script that Instagram can refuse, and the two best need a residential IP you pay for. We skipped login-based tools (instagrapi, InstaTouch) because they put an account at risk. Paid products (Apify, ScrapeCreators, Bright Data) are described from their pages and were not run.
  • Our API costs 1 credit a call: 100 free credits a month, then $0.99 to $1.45 per 1,000 profiles on a monthly plan or $1.25 to $1.90 with credit packs. It lacks the script's category field, and its daily median time was 11 to 16 seconds on the three busiest days of the week and 1.5 to 2.6 seconds on five quieter days.
On this page

The best Instagram scraper for public profiles in our test is a hosted API, and the best free one is a short script that needs a residential IP. We make ToolzerHub, so our API and our script are in the table; all five tools got the same 10 profiles and the same rule. Instaloader is still the better pick for downloading media from an account you log in to.

Rank Tool Profiles returned, run 1 and run 2 Time per profile Pick it when
1 ToolzerHub API, /v1/instagram/user/info (we make it) 10 of 10, 10 of 10, no proxy 1.4 to 6.0 s You want JSON from any server and will pay 1 credit a call
2 toolzerhub/instagram-scraper (we make it) Residential 10 of 10, 10 of 10. Datacenter 0 of 10, 0 of 10 2.7 to 4.5 s You have a residential IP and want a free script
3 kiryano/Scout Residential 8 of 10, 9 of 10. Datacenter 429 on the first profile, twice 1.2 to 5.9 s You want fast, simple fields and can live with a blank website field
4 Instaloader Datacenter 0 of 10, 0 of 10. Residential 429 on the first profile, twice, then killed at our 45 s limit while it waited to retry none returned You download media or log in, which we did not test
4 @aduptive/instagram-scraper Refused with RATE_LIMITED on the first profile in all 4 runs none returned You work in Node and Instagram serves your IP

Tested 2026-10-18. Time is for the profiles that returned data. API times are per coto api call minus 0.35 s of start-up; script times include Python start-up and, where used, the proxy.

How we tested

We picked 10 public profiles: four big brands and institutions (nike, natgeo, nasa, starbucks), two creators (mrbeast, mkbhd) and four smaller business and city accounts (vermontcreamery, cityofbellingham, visitwhidbey, overcastcoffee). Followers range from 25 to 291 million. Every tool got the same names in the same order, logged out, and we ran each tool twice.

A profile counts as returned when the tool prints JSON with a username and a numeric follower count.

Time is wall-clock for one command per profile, so it includes starting the program. "Datacenter" is our own server (a Hostinger IP in Germany). "Residential" is a paid residential proxy with a US exit. We ranked by profiles returned across both runs, then by whether the tool works from a server. We stopped a tool's run on the first rate-limit message, which is why some rows show one profile, and gave each command 45 seconds.

ToolzerHub API

The API returned all 10 profiles on both runs with no proxy of yours: 20 of 20 calls, 1.4 to 6.0 seconds each after we subtracted 0.35 seconds of command-line start-up. Ids, names, bios, links and verified flags matched our script's output on every profile.

bash
curl -H "x-api-key: $TOOLZERHUB_API_KEY" \
  "https://api.toolzerhub.com/v1/instagram/user/info?username_or_url=vermontcreamery"

The call returned this on 2026-10-18 (trimmed: fbid and profile_pic_url left out, bio_links shortened):

json
{
  "data": {
    "id": "242057150",
    "username": "vermontcreamery",
    "full_name": "Vermont Creamery",
    "biography": "Consciously crafted, delicious dairy since 1984.",
    "bio_links": [{ "title": "", "url": "https://linkinprofile.com/vermontcreamery" }],
    "external_url": "https://linkinprofile.com/vermontcreamery",
    "is_private": false,
    "is_verified": true,
    "edge_followed_by": { "count": 78507 },
    "edge_follow": { "count": 1966 }
  }
}

The response also holds fbid, profile_pic_url and the full bio_links objects. It does not return category, a business flag or a post count, and the route description says Instagram no longer serves them logged out. If you already hold a numeric id, /v1/instagram/user/summary returned the same fields in 0.4 to 4.4 seconds in the same test.

Over the 7 days to 2026-10-18 /v1/instagram/user/info succeeded on 95.3% of the 13,909 calls that returned a 200 or a 5xx, and by calendar day between 91.9% and 100%. Speed depended on load: the median was 11.7 seconds and the 95th percentile 43.7 seconds over the week, 11 to 16 seconds on the three busiest days, and 1.5 to 2.6 seconds on five quieter days, close to our test. It is the only option here that costs money per profile: $0.99 to $1.45 per 1,000 on a monthly plan, $1.25 to $1.90 with one-off credit packs.

toolzerhub/instagram-scraper

Our free script returned 10 of 10 profiles on both residential runs, in 2.7 to 4.5 seconds each, and the same 10 in one command in 26.4 and 27.9 seconds. From our datacenter server it returned 0 of 20: Instagram answered HTTP 302 in under 0.8 seconds every time. That is the script's own README warning, and the test confirms it: from a server, the script did not work in our runs, and the API did.

It returns one field the API lacks, category (set on 2 of 10 profiles), and gives bio_links as plain URLs. Its is_business was false on all 10, Starbucks included, and it has no post count. The full walkthrough covers posts, comments and search too.

Scout

Scout is a lead-generation tool with an interactive menu. We called its Instagram function, scrape_profile_no_login, directly, because the menu cannot be scripted. Through a residential IP it returned 8 and 9 of 10 profiles, 1.2 to 5.9 seconds each, with a median of 1.7 and 1.9 seconds against our script's 3.6. The three misses came back empty: the function returned nothing, after 1.7 to 8.7 seconds.

Where it ran, the data was right: name, bio, verified flag and following count matched our script on all 17 returned profiles, and followers differed by at most 636 on live accounts. The website field was blank on all 14 profile-runs where our script found a link. From the datacenter it printed "Rate limited by Instagram (429)" on the first profile, twice.

Instaloader

Instaloader is the most-starred Instagram scraper we found on GitHub: 13,605 stars, last commit 2026-10-14. Logged out and metadata only, it returned 0 of 10 twice from the datacenter, each with "302 Found" on the profile page. Through the residential IP it got "429 Too Many Requests" on the first profile in both runs and paused to retry; our 45-second limit ended it before the retry.

This is a result for one job, logged-out profile metadata. Instaloader's own README documents --login for downloading posts, stories and followers. If you archive media from an account you control, it is the better tool; we did not test that.

@aduptive/instagram-scraper

This small Node library (11 stars, last commit 2026-09-13) promises profiles with no login and has no proxy setting. It returned RATE_LIMITED on the first profile in all four runs, from the datacenter and through the residential IP. For the residential runs we sent its traffic through the same US exit the other tools used. We don't know why it was refused when other tools got through the same exits.

What each tool returns

This is what the three tools that returned data gave back for a profile.

Field API Our script Scout
Followers and following yes yes yes
Bio and verified flag yes yes yes
Website or bio links yes, as objects yes, as URLs website blank on 14 of 14
Category no yes, 2 of 10 profiles no
Business flag no present, false on all 10 present, false on all 10
Post count no no yes, 0 when the page lacks it

We did not sign up for or run these. Everything below is from each product's public page, read 2026-10-18, and may have changed since.

Product Price on the page Free allowance on the page
Apify Instagram Profile Scraper "from $1.60 / 1,000 profiles"; "$2.60 per 1,000 results" on the Free plan, "$2.30" on Starter "$5 credit" on the Free plan
ScrapeCreators "1 credit === 1 request (for most endpoints)"; $47 for 25,000 credits, $497 for 500,000; no credit cost printed for the profile endpoint "100 free credits"
Bright Data Instagram scraper "$1.5 /1K record" pay as you go; $499 a month with "384,000 records included" "5K records per month"

Bright Data prints "Pay only for success", and its price per record is close to ours. Apify's page listed 253K total users on 2026-10-18.

Tools we skipped

We skipped tools that need an Instagram login or a session cookie. They put the account at risk, and our rule at ToolzerHub is public data without a login. That removed instagrapi (6,978 stars; its README examples call cl.login(...)), other private-API libraries and bots such as GramAddict.

Three more we did not run: InstaTouch (drawrowfly/instagram-scraper, 904 stars), last changed 2022-11-10, with a README that says feeds need a session; postaddictme/instagram-php-scraper (3,352 stars), because our test box has no PHP; and sokomishalov/skraper, which needs a Java build. Instagram's terms still apply to the logged-out tools above; the terms section of our script walkthrough quotes them.

When to use something else

  • Posts, reels and comments of any public account: the same API has worker-backed routes for them. Read Instagram API get user posts for the paging limits.
  • Your own account's media: Instaloader with a login, or Meta's official API.
  • A few profiles once, no code: an Apify Actor.
  • Open-source scripts for other platforms from the same maintainers: ToolzerHub open source.

The API is on the Instagram API page, and a free key gives 100 credits a month.

We are not affiliated with Instagram or Meta Platforms, Inc.

Sources

Get this data from your own code

The Instagram API returns it as JSON with one x-api-key header. 100 free credits monthly.