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.
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):
{
"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 |
Paid products we did not run
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
- toolzerhub/instagram-scraper, commit b6b953e, https://github.com/toolzerhub/instagram-scraper, run 2026-10-18
- Instaloader 4.15.4, https://github.com/instaloader/instaloader (13,605 stars, last commit 2026-10-14), run 2026-10-18
- kiryano/Scout, commit 183868d, https://github.com/kiryano/Scout (757 stars), run 2026-10-18
- @aduptive/instagram-scraper 2.1.1, https://github.com/aduptive/instagram-scraper (11 stars), run 2026-10-18
- instagrapi README, https://github.com/subzeroid/instagrapi, read 2026-10-18
- Apify, Instagram Profile Scraper, https://apify.com/apify/instagram-profile-scraper, read 2026-10-18
- ScrapeCreators, pricing, https://scrapecreators.com, read 2026-10-18
- Bright Data, Instagram scraper, https://brightdata.com/products/web-scraper/instagram, read 2026-10-18
- ToolzerHub pricing, https://toolzerhub.com/pricing, read 2026-10-18
- ToolzerHub API OpenAPI spec (credits per route), https://api.toolzerhub.com/openapi.json, read 2026-10-18