Instagram Profile Scraper
Pricing
from $10.00 / 1,000 profile scrapeds
Instagram Profile Scraper
Scrape public Instagram profiles - followers, bio, posts - without logging in.
Pricing
from $10.00 / 1,000 profile scrapeds
Rating
0.0
(0)
Developer
John Wu
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Turn a list of Instagram handles into a clean spreadsheet of followers, bios, categories and recent posts. No login, no Instagram account, no cookies — just paste usernames and press Start.
Export to JSON, CSV, Excel, XML or HTML, or pull results straight from the API.
What you can do with it
Track competitor follower growth
Run this on a schedule with your competitors' handles and you get a dated row per profile per run. Point Google Sheets or Looker Studio at the dataset and you have a growth chart nobody had to maintain. The Follower tracking dataset view is already trimmed to exactly these columns.
Audit an influencer list before you pay anyone
Paste the handles from a media kit or an agency spreadsheet. In one run you can see who is actually verified, who quietly went private, who has 400k followers but posts twice a year, and whose "brand account" is a personal profile. followersCount next to postsCount and latestPosts[].likesCount tells you more in thirty seconds than a media kit does.
Qualify leads from a list of brand accounts
isBusinessAccount, businessCategoryName and externalUrl turn a list of handles into a segmented prospect list with a website to enrich against.
Find similar accounts
Every scraped profile carries relatedProfiles — the accounts Instagram itself suggests alongside it. Feed those back in as input and you can map a niche outward from a single seed account.
Archive your own brand presence
Snapshot bios, links and recent post performance across all your regional accounts on a weekly schedule, so you have a record of what changed and when.
Input
Paste usernames or profile URLs. All of these work and mean the same thing:
nasa@nasahttps://www.instagram.com/nasa/
{"usernames": ["humansofny", "nasa", "https://www.instagram.com/natgeo/"],"resultsLimit": 12}
| Field | Type | Default | What it does |
|---|---|---|---|
usernames | array | — | Usernames or profile URLs to scrape. |
resultsLimit | integer | 12 | Recent posts per profile. Instagram gives logged-out visitors at most 12. Set to 0 for metadata only — the fastest and cheapest option if you only need follower counts. |
proxyConfiguration | object | residential | Leave as-is. See Proxies. |
maxConcurrency | integer | 5 | Profiles fetched in parallel. |
maxRequestRetries | integer | 5 | Retries per profile, each from a fresh IP. |
directUrls | array | — | Alias for usernames, so input written for other Instagram Actors runs unchanged. |
Output
One dataset item per input profile, always. Field names match the common Instagram profile-scraper format, so existing pipelines keep working.
{"inputUrl": "https://www.instagram.com/nasa/","id": "528817151","username": "nasa","url": "https://www.instagram.com/nasa/","fullName": "NASA","biography": "Making the seemingly impossible, possible. ✨","externalUrl": "https://www.nasa.gov/","externalUrlShimmed": "https://l.instagram.com/?u=...","followersCount": 104422532,"followsCount": 92,"postsCount": 4888,"isBusinessAccount": true,"businessCategoryName": "Government Agencies","verified": true,"private": false,"joinedRecently": false,"hasChannel": false,"highlightReelCount": 5,"igtvVideoCount": 0,"profilePicUrl": "https://scontent.cdninstagram.com/...","profilePicUrlHD": "https://scontent.cdninstagram.com/...","facebookPage": null,"fbid": "17841401474538262","relatedProfiles": [{"id": "...","username": "nasaearth","full_name": "NASA Earth","is_verified": true,"is_private": false,"profile_pic_url": "https://..."}],"latestPosts": [{"id": "...","type": "Image","shortCode": "C...","url": "https://www.instagram.com/p/C.../","caption": "...","hashtags": ["nasa"],"mentions": ["@nasaearth"],"likesCount": 481203,"commentsCount": 2210,"timestamp": "2026-08-19T14:02:11.000Z","displayUrl": "https://...","dimensionsWidth": 1080,"dimensionsHeight": 1350,"alt": "Photo by NASA on August 19, 2026.","childPosts": []}],"latestIgtvVideos": [],"dataSource": "api","scrapedAt": "2026-08-23T10:41:07.912Z"}
Profiles that don't work out still get a row
A run never dies on one bad handle, and you never have to diff your input against your output to find out what's missing. Failures come back as records:
{"inputUrl": "https://www.instagram.com/thisdoesnotexist/","username": "thisdoesnotexist","error": "not_found","errorDescription": "Profile does not exist","scrapedAt": "2026-08-23T10:41:09.004Z"}
error is one of not_found, blocked, unavailable or invalid_input. Filter the dataset on error to see just the problems.
Private profiles are not errors. Instagram publishes their metadata, so you get a normal record with private: true, real follower and post counts, and an empty latestPosts.
Two fields worth knowing about
dataSource—"api"or"html". Instagram has a long-standing server-side bug that makes its JSON endpoint fail for a large share of business accounts with a category. Rather than return nothing, this Actor falls back to reading the public profile page.partial— present andtrueonly on"html"records. Those carry username, name, bio, exact follower and following counts, profile picture, verified and private flags, and the bio link. They cannot carrylatestPosts,relatedProfilesorbusinessCategoryName, andpostsCountis Instagram's own rounded figure. If you need a strict dataset, filter onpartial != true.
Proxies
Instagram blocks datacenter IPs almost immediately and rate-limits any single IP after roughly nine requests, then keeps that IP cold for over an hour. Residential proxies are not optional for runs of any size, and are configured by default. The Actor rotates to a fresh IP well before it reaches Instagram's ceiling, and retries blocked profiles on new IPs rather than dropping them.
If you scrape only a handful of profiles occasionally you can try datacenter proxies to save a little, but expect blocked records.
No login, ever
This Actor only reads data that Instagram serves to logged-out visitors. It never signs in, never sends a cookie or session, and never asks you for Instagram credentials. Anyone asking for your Instagram password to run a scraper is asking for your account.
It also does not keep your results. Everything lands in your run's dataset, which belongs to your account — there is no cache, no shared database, no aggregation across runs.
Notes and limits
- Instagram shows logged-out visitors at most 12 recent posts per profile;
resultsLimitabove 12 is capped. - Numeric profile IDs are not accepted as input — only usernames and profile URLs. Resolving an ID to a username requires an endpoint Instagram does not serve to logged-out visitors, and this Actor never logs in. An all-digit entry is treated as a username, because Instagram does allow all-digit usernames.
latestCommentsis always[]— comments are not available logged-out.- Follower counts move constantly. Two runs minutes apart will differ by thousands on large accounts; that is Instagram, not the scraper.
- A very small number of accounts report
followersCount: 0from Instagram itself. That value is passed through as returned.
Integrations
Results are available through the Apify API and the JavaScript and Python clients, and connect to Make, Zapier, n8n, Airbyte, Google Sheets, Slack and others through Apify integrations. Schedule runs from the Apify Console to build a time series without writing any glue.
