Instagram Profile Scraper: Followers, Bio & Latest Posts avatar

Instagram Profile Scraper: Followers, Bio & Latest Posts

Pricing

from $2.50 / 1,000 results

Go to Apify Store
Instagram Profile Scraper: Followers, Bio & Latest Posts

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

Philip Kirkbride

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Features

Limited permissions

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 includeLatestPosts set to false; chart followersCount and postsCount over 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 includeLatestPosts on and pass the latestPosts[].url values to the Instagram Comments Scraper to read what an audience says under those posts.
  • Quick audience counts. Set includeLatestPosts to false when 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 runWhat 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

InputTypeDefaultMeaning
usernamesarraythe three sample profilesInstagram 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.
maxItemsinteger100Total cap on profile rows for the run (up to 5,000).
includeLatestPostsbooleantrueAdd the profile's latest posts (up to 12) to each row. Turn it off for smaller rows when you only need the profile figures.
completeProfilesbooleantrueWhen 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:

FieldMeaning
username, url, userIdThe username (lower case), the profile link and Instagram's numeric account id.
inputUrlWhat you supplied.
fullName, biographyThe display name and the bio text.
followersCount, followsCount, postsCountFollowers, accounts followed and the total number of posts.
isVerified, isPrivateVerified badge and private-account flag. Private accounts return their profile figures but no posts.
isBusinessAccount, businessCategoryWhether 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, businessPhonePublic contact details, when the account shows them. Currently null on most rows, see Limits and caveats.
externalUrl, externalUrlsThe main website link and every bio link with its title.
profilePicUrlProfile picture link.
latestPostsUp 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).
missingFieldsProfile fields Instagram did not show for this profile during the run. Empty for a complete row.
scrapedAtCollection time (UTC, ISO 8601).
errorAlways 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.
  • latestPosts holds 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 missingFields on 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 in missingFields too.
  • 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_FOUND in OUTPUT.profileErrors and 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.