Instagram Profile Scraper: Followers, Bio & Latest Posts
Pricing
from $2.50 / 1,000 results
Instagram Profile Scraper: Followers, Bio & Latest Posts
Turn public Instagram profiles into rows with followers, bio, links, verified badge and up to 12 latest posts with likes and comments. Built for influencer vetting and competitor tracking. Empty input runs a 3-profile sample. $2.50 per 1,000 profiles.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
Philip Kirkbride
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Features
Share
Instagram Profile Scraper
Turn a list of Instagram usernames or profile links into clean profile rows. Every profile becomes one row with its full name, bio, follower count, following count, number of posts, verified badge, website and bio links, profile picture and the 12 latest posts with their links, captions and, where Instagram shows them, publish time, likes, comments and views.
Use it to vet influencers before a campaign, track follower growth for your own brand and your competitors, enrich a lead list with bios and website links, or build a list of accounts in a niche. Only public profile information is collected and no Instagram account is needed.
Use cases
- Influencer vetting. Paste the creators on your shortlist and compare audience size (
followersCount), posting volume (postsCount) and the likes, comments and views on their latest 12 posts — numbers a media kit leaves out. - Brand and competitor monitoring. Schedule the same list daily or weekly with
includeLatestPostsset tofalse; chartfollowersCountandpostsCountover time and spot sudden drops or growth spurts. - Lead and contact enrichment. Turn a list of business or creator accounts into names, bios, websites and bio links you can join to your own records. Public email and phone fields are filled when an account shows them (see Limits and caveats).
- Comment research. Keep
includeLatestPostson and pass thelatestPosts[].urlvalues to the Instagram Comments Scraper to read what an audience says under those posts. - Quick audience counts. Set
includeLatestPoststofalsewhen you only need follower, following and post counts for a long list.
Quick Start
{"usernames": ["natgeo","nike","https://www.instagram.com/nasa/"],"maxItems": 100,"includeLatestPosts": true,"completeProfiles": true}
Usernames can be written as natgeo, @natgeo or as a profile link such as https://www.instagram.com/natgeo/. Links copied from the app with extra parameters (?hl=en, ?igsh=...) work too.
Your first run
You do not have to fill the form to see the output. With no input the Actor reads the same three profiles the Console prefills (natgeo, nike, nasa), marks the run summary usedExample: true and says in the run status that it was the example run, so you can inspect a complete row for the price of three profiles.
To run your own list, replace the prefilled values. In the Console, click Bulk edit in the usernames field and paste one username or profile link per line — up to 5,000 entries per run, duplicates collected once. The same list can be saved for a schedule.
Worked costs
| Profiles in the run | What you pay |
|---|---|
| 3 (the first-run sample) | $0.0125 |
| 100 | $0.255 |
| 500 | $1.255 |
| 1,000 | $2.505 |
| 5,000 | $12.505 |
One $0.005 run start plus $0.0025 per delivered profile, whatever the row contains: includeLatestPosts changes the row size, not the price. Failed profiles are not charged. At about 10 seconds per profile the default 4-hour run timeout covers roughly 1,400 profiles, so split a 5,000-name list into four runs (or raise the timeout in the run options).
Input
| Input | Type | Default | Meaning |
|---|---|---|---|
usernames | array | the three sample profiles | Instagram usernames or profile links. Duplicates are removed. If you leave it empty, the Actor collects the same three profiles the Console prefills (natgeo, nike, nasa) and marks the run summary usedExample: true, so a first run still returns a sample. |
maxItems | integer | 100 | Total cap on profile rows for the run (up to 5,000). |
includeLatestPosts | boolean | true | Add the profile's latest posts (up to 12) to each row. Turn it off for smaller rows when you only need the profile figures. |
completeProfiles | boolean | true | When a profile's details are slow to load, make one extra attempt to fill in the bio, following count and links before returning a partial row. |
What it returns
The dataset contains one row per profile:
| Field | Meaning |
|---|---|
username, url, userId | The username (lower case), the profile link and Instagram's numeric account id. |
inputUrl | What you supplied. |
fullName, biography | The display name and the bio text. |
followersCount, followsCount, postsCount | Followers, accounts followed and the total number of posts. |
isVerified, isPrivate | Verified badge and private-account flag. Private accounts return their profile figures but no posts. |
isBusinessAccount, businessCategory | Whether it is a business or creator account and the category shown on the profile (for example Government Agencies or Sportswear Store). Currently null on most rows, see Limits and caveats. |
businessEmail, businessPhone | Public contact details, when the account shows them. Currently null on most rows, see Limits and caveats. |
externalUrl, externalUrls | The main website link and every bio link with its title. |
profilePicUrl | Profile picture link. |
latestPosts | Up to 12 latest posts: shortCode, url, type (image, video or carousel), caption, takenAt, likesCount, commentsCount, videoViewCount, displayUrl and ownerUsername (differs from the profile for collaboration posts). |
missingFields | Profile fields Instagram did not show for this profile during the run. Empty for a complete row. |
scrapedAt | Collection time (UTC, ISO 8601). |
error | Always null in the dataset. Failures are reported in the run summary instead. |
Fields the profile leaves empty (no bio, no website) are null or an empty list, never guessed. A field that is null because Instagram did not show it is also named in missingFields, so you can tell the two apart.
The run summary (OUTPUT) reports profilesRequested, usedExample (true when the first-run sample profiles were used), profiles (rows delivered), partialProfiles (rows with a non-empty missingFields), errors and the list at profileErrors.
Output example
{"username": "nasa","url": "https://www.instagram.com/nasa/","inputUrl": "https://www.instagram.com/nasa/","userId": "528817151","fullName": "NASA","biography": "Making the seemingly impossible, possible. ✨","followersCount": 104380790,"followsCount": 90,"postsCount": 4968,"isVerified": true,"isPrivate": false,"isBusinessAccount": null,"businessCategory": null,"externalUrl": "https://www.nasa.gov/","externalUrls": [{"title": "NASA.gov Homepage","url": "https://www.nasa.gov"},{"title": "How to Watch NASA Livestreams","url": "http://nasa.gov/ways-to-watch"}],"businessEmail": null,"businessPhone": null,"profilePicUrl": "https://scontent-dfw5-1.cdninstagram.com/v/t51.2885-19/29090066_159271188110124_1152068159029641216_n.jpg","latestPosts": [{"shortCode": "DeTUk4sDSp-","url": "https://www.instagram.com/p/DeTUk4sDSp-/","type": "video","caption": "POV: you're watching the Earth set\n\nWe just released hundreds of new images and hours of new audio from our Artemis II m…","takenAt": "2026-10-10T15:15:02Z","likesCount": 712273,"commentsCount": 7097,"videoViewCount": 3089092,"displayUrl": "https://scontent-dfw5-2.cdninstagram.com/v/t51.82787-15/842191580_18656578867049152_4200499629839780998_n.jpg","ownerUsername": "nasa"}],"missingFields": ["isBusinessAccount","businessCategory","businessEmail","businessPhone"],"scrapedAt": "2026-10-19T23:53:20Z","error": null}
Failed profiles
A profile that cannot be retrieved (for example a mistyped, renamed, deleted or deactivated username, an account Instagram hides from signed-out visitors, or an age-restricted account) is reported in the run summary at OUTPUT.profileErrors with its input, username, code and message. Failed profiles are never dataset rows and are not charged. If no profile at all could be collected, the run ends with an error instead of finishing green with an empty dataset.
Limits and caveats
- Only what Instagram shows publicly on a profile is returned. Followers lists, stories, highlights and comments are not included.
latestPostsholds up to the 12 latest posts; older posts are not collected. For some profiles only the 6 latest posts carry likes and publish time.- Instagram does not always show every detail. The business category, account type and contact details are currently not shown to signed-out visitors, so they are null and listed in
missingFieldson most rows. Follower, following and post counts, bio and links are still returned; when Instagram shows only a profile's summary card, bio, following count and links are listed inmissingFieldstoo. - Counts are exact numbers as Instagram reports them at collection time.
- Instagram shows a small share of existing accounts to signed-out visitors as if they did not exist. Those come back as
NOT_FOUNDinOUTPUT.profileErrorsand are not charged. - Automated access is subject to Instagram's terms; use this actor only where you have the necessary permissions and a lawful basis, and handle any personal data in line with the privacy laws that apply to you.
FAQ
Do I need an Instagram account or cookies? No. Only public profiles are read.
What happens with private accounts? You get the profile figures (name, bio, counts, verified badge), but no posts, as Instagram shows them to anyone.
Can I mix usernames and links? Yes. Usernames, @ handles and profile links can all go in usernames; duplicates are returned once.
Can I get the comments under a post? This Actor returns the latest posts' links and their like, comment and view counts. To read the comments themselves, pass those latestPosts[].url values to the Instagram Comments Scraper.
Do I get email addresses and phone numbers? Only when the account shows them to signed-out visitors; most do not. The website and bio links are the reliable contact fields.
How fast is it? About 10 seconds per profile; 1,000 profiles take roughly 2.8 hours. The default run timeout is 4 hours, enough for about 1,400 profiles. For longer lists, split them across several runs or raise the timeout in the run options.
Price
$0.0025 per profile delivered, plus $0.005 per run start. The run-start event is charged per GB of memory; the default 512 MB run is one start event. The start is charged even if the run saves no results. Failed profiles are not charged. Platform usage is included in these prices. A first-run sample of three profiles therefore costs about $0.0125.
For comparison, the platform's own Instagram Profile Scraper charges $2.60 per 1,000 profiles on the Free plan ($2.30 on Starter, less with plan discounts); this one is $2.50 per 1,000 at list price and includes the latest 12 posts with their engagement counts.