Instagram Profile Scraper: Followers, Bio, Posts avatar

Instagram Profile Scraper: Followers, Bio, Posts

Pricing

from $0.48 / 1,000 profiles

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

Instagram Profile Scraper: Followers, Bio, Posts

Scrape Instagram profiles by username or user id, no login: exact followers, following and post count, bio and links, account type, category, HD picture and the newest posts with likes and engagement. Filters, related accounts, Page contact. JSON, CSV or API; pay per profile.

Pricing

from $0.48 / 1,000 profiles

Rating

0.0

(0)

Developer

Automation Craft

Automation Craft

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

3 days ago

Last modified

Security

Limited permissions

Share

Instagram Profile Scraper: Followers, Bio, Posts

Scrape Instagram profiles by username and get one row per public account with its exact followers, following and post count, bio and every bio link, account type, category, HD profile picture and its newest posts with likes and comments, without an Instagram account, cookies or login. Paste usernames, @handles, profile links or numeric user ids (up to 5,000 a run) and get one row per account, plus a free row that says what became of every entry of your list.

  • Exact counts. Followers and following as Instagram counts them, and the exact number of posts read from the profile's own embed page, not a rounded "14K".
  • The whole profile. Bio and its hashtags, website and every bio link, account type (personal, business, creator), category, verified, private, memorialized, Threads profile, highlights, pronouns, the HD picture, Instagram's state media and news labels, and the 6 newest posts with engagement figures computed from them.
  • Options when you need them. The 12 newest posts as the grid shows them, reel figures (plays of the 12 newest reels), the accounts Instagram suggests next to each profile (on the row, or delivered as profiles of their own up to 10 levels deep, with a cap in all and per profile), and the public contact of the Facebook Page the account links (a paid add-on).
  • Filters that cost nothing. Followers, posts, verified, account type, private accounts only or left out, influencers only, words in the name, bio or posts, category, language, an e-mail or phone shown, a website, engagement rate, posting activity, reel plays. Accounts a filter leaves out are never charged.
  • Fair billing. Each account is charged once per run. Accounts that do not exist or are not shown to a logged out reader, failed reads, repeats and refused entries are free, and the account list row names every one of them by its position.

Quick start

  1. Open the Actor's Input tab and paste your accounts in Instagram accounts, one per line: nasa, @natgeo, https://www.instagram.com/nike/ or a numeric user id such as 528817151.
  2. Optional: turn on the options you need (latest 12 posts, reel figures, suggested accounts, the Facebook Page contact) and add filters.
  3. Click Start. Each account arrives as a row of the dataset, followed by the free account list row and a run summary.
  4. Download the dataset as JSON, CSV or Excel, or read it through the Apify API, a schedule, Make, n8n or Zapier.

What you get

One profile row per account. The fill rates below were measured on the platform on 2026-11-04 on 1,244 distinct public and private accounts of many kinds (brands, news, small businesses, creators, athletes, public figures; runs xmUs30bUQfhe9PJuS and DBCNe7PYMszd9Vs92), read without a login. Options were measured on the 300 accounts of the second run (291 public).

FieldWhat it holdsFilled
inputPositionthe account's position in your list (empty for an account the expansion added)100% of list accounts
username, id, fbid, url, fullNamethe username, Instagram's numeric id, its second id (the one Meta's Graph API uses), the profile link and the name100%, name 97.8%
biography, bioHashtagsthe bio as Instagram serves it, and the hashtags Instagram marks in it92.8%, 8.8%
followerCount, followingCount, followerToFollowingRatioexact followers and following, and their ratio100%
postsCountthe exact post count, from the profile's embed page (private accounts show none)97.2% of public accounts
accountType, isProfessional, isBusinessAccount, categorypersonal, business or creator, and the category the account showstype 100%, category 43.7%
isVerified, isPrivate, isMemorialized, isMetaVerifiedthe badges and states Instagram serves100%
externalUrl, bioLinks, externalUrlShimmedthe website and every bio link with its title and type; Instagram's redirect link for the website with Include personal data (it is an instagram.com address)68.5%, 68.8%
profilePicUrl, profilePicUrlHdthe picture, small and full size100%
threadsUsername, threadsUrlthe account's Threads profile47.3%
highlightTitles, latestStoryAt, hasPublicStory, hasReels, reelsCount, pronounsthe first page of story highlights, the latest story, reels, pronounshighlights 59.2%, reels count 92.1%, pronouns 6.9%
transparencyLabel, transparencyProduct, newsRestrictedInInstagram's own labels: state controlled media, and the countries where it limits the account's news (CA)where Instagram shows them (news limits 1.0%)
recentPosts, recentPostTimesthe 6 newest posts (pinned posts left out): link, type, date, likes, comments, caption, paid partnership, place6 posts on 96.0% of public accounts
avgLikes, avgComments, engagementRate, engagementGrade, postsPerWeek, lastPostAtengagement of the 6 newest posts (likes plus comments over followers, in percent; grade high from 3%, average from 1%, else low), the posting pace, the newest postengagement 88.8%, last post 93.1%
biographyLanguagethe language of the bio and recent captions, our own estimate (README "Filters")84.6%
hasEmail, hasPhonewhether the bio, bio links or recent captions show an e-mail address or a phone number12.2%, 0.6%
emails, phones, bioMentionsthose addresses and numbers with where each was found, and the accounts the bio mentions: empty unless you turn on Include personal datawhen asked
latestPostsoption: the 12 newest posts as the grid shows them (pinned first): link, type, reel flag, date, caption, likes, comments, picture, place, paid partnership, carousel size; latestPostsStatus says when they could not be read12 posts on 286 of 291 public accounts (the rest have fewer)
reelStatsoption: reelsRead, medianPlays, averagePlays, maxPlays, newestReelCreatedAt, medianPlaysToFollowersPercent273 of 291 public accounts (18 have no reels)
relatedProfilesoption: the accounts Instagram suggests next to this one; needs Include personal data115 of 300 accounts (38.3%) had any
facebookPage, facebookPageContactadd-on: the Facebook Page Instagram links to the account, else the one Page Meta's Ad Library search names with this account as its Instagram account (id, name, alias, url, category, likes, country), and the Page's public emails, phones, whatsapp, websites, addresses, hours, priceRange, services, categories, ratingsPage found for 133 of 300 (44.3%), contact read for 95 (31.7%)
foundVia, relatedTo, expansionLevelusername for an account of your list; related_profile, the profile it was suggested next to and its level for an account the expansion added100%
detailsStatusread, or partial when a public account's embed showed no post count, or no posts while it counts some (that row is free)partial 2.7%

Likes an account hides are never written as 0: such a post has likeCount null and likesHidden true (831 of 6,927 recent posts, 12.0 percent, on 2026-11-04).

Example row (the prefill run r0VOClAvveYVswHdd of 2026-11-04, cut short):

{
"type": "profile",
"inputPosition": 1,
"username": "nasa",
"id": "528817151",
"url": "https://www.instagram.com/nasa/",
"fullName": "NASA",
"followerCount": 104428839,
"followingCount": 90,
"postsCount": 4988,
"accountType": "business",
"category": null,
"isVerified": true,
"isPrivate": false,
"externalUrl": "https://www.nasa.gov",
"avgLikes": 475466.5,
"avgComments": 2058.2,
"engagementRate": 0.457,
"engagementGrade": "low",
"lastPostAt": "2026-11-03T18:39:27.000Z",
"postsPerWeek": 6.59,
"recentPosts": [{ "url": "https://www.instagram.com/p/DfSi56IFwZK/", "postedAt": "2026-11-03T18:39:27.000Z", "likeCount": 184767, "commentCount": 502 }],
"emails": null,
"detailsStatus": "read"
}

The account list row (free). One subject row for your list: its status, finished, stopReason, how many accounts were read and delivered, and accountOutcomes: how many were delivered, and by position which were not found (or not shown to a logged out reader), left out by a filter, already delivered, or not reached because the run stopped. Every entry of your list ends in exactly one of those places, or in a free refused entries row when it is not an account at all. (A run the platform stops during its start up, before it read its own dataset back, names every entry under notReadThisAttempt instead, with no delivered count: rows an earlier attempt of the same run delivered stay delivered.) The last row of every run is a free summary row with the run's counts.

How much does it cost to scrape Instagram profiles?

You pay per result (pay per event). Prices per 1,000 events:

EventFreeBronzeSilverGold
Profile (one account delivered as a row with its details)$0.67$0.61$0.55$0.475
Facebook Page contact (add-on, a linked Page that shows contact details)$2.10$1.92$1.74$1.50
Re-filtered profile (a profile of an earlier run that passes this run's filters)$0.10$0.09$0.08$0.07

Platinum and Diamond plans pay the Gold price. Each run also pays the Actor start event of $0.0075 (256 MB), which has no plan discount. The Store pricing card shows these same prices per 1,000 events: "$0.475 / 1,000" on the Profile row means one profile costs less than a twentieth of a cent.

Examples at the Gold price: 10 profiles cost $0.0075 + 10 x $0.000475 = $0.0123; 1,000 profiles cost $0.0075 + 1,000 x $0.000475 = $0.4825; the same 1,000 with the Facebook Page contact read for the 300 whose Page shows one add 300 x $0.0015 = $0.45. The latest 12 posts, reel figures and suggested accounts on the row add no charge.

Free: the account list row, status rows, left out rows, the summary, accounts that do not exist or are not shown to a logged out reader (age restricted accounts included), accounts a filter leaves out, repeats, accounts whose posts could not be read (a public account whose embed shows no post count, or no posts while it counts some: delivered free with detailsStatus partial), Facebook Pages without contact details or without an exact match, failed calls, refused entries and invalid input. An invalid input charges only the run's start fee.

Input

SettingWhat it doesDefault
usernamesthe accounts: usernames, @handles, profile links or numeric user ids, up to 5,000
maxProfilesstop after this many profilesevery account
includeRecentPoststhe 6 newest posts on the rowon
includeLatestPoststhe 12 newest posts as the grid shows themoff
latestPostsSincekeep only latest posts on or after a day (2026-10-01) or within "N days"all 12
includeReelStatsreel figures of the 12 newest reelsoff
includeRelatedProfilesthe suggested accounts on the row (needs includePersonalData)off
includeFacebookPageContactthe linked Facebook Page and its public contact (paid add-on)off
expandWithRelatedProfilesdeliver the suggested accounts as profiles of their own (each a Profile)off
expansionDepthhow many levels of suggested accounts, 1 to 101
maxRelatedProfilesthe most accounts the expansion adds50
maxRelatedPerAccountthe most suggestions the expansion takes from each profile, 1 to 5050
minFollowers, maxFollowers, minPosts, maxPostsfollower and post rangesnone
verifiedany, only or excludeany
accountTypespersonal, business, creator, professional (business or creator)every type
influencersOnlycreators and accounts whose category is a person who publishes (README "Filters")off
includePrivatekeep private accounts (their header and counts)on
onlyPrivatekeep only private accountsoff
mustContain, mustContainInwords or phrases that must be in the username, name, bio or recent captionsnone
excludeWordsleave out accounts whose username, name or bio holds any of thesenone
categories, combineCategoryAndWordswords of the Instagram category; with mustContain, both or eithernone, both
languagestwo letter codes of the bio and captions languageany
contactFilteran e-mail, a phone, either or both shownany
requireWebsitekeep accounts with a website or bio linkoff
minEngagementRateminimum engagement rate in percentnone
activeWithinDaysnewest post at most this many days oldnone
minRecentPosts, recentPostsDaysat least N of the 6 newest posts within the periodnone, 30 days
minMedianReelPlays, reelPostedWithinDays, minPlaysToFollowersPercent, maxPlaysToFollowersPercentreel filters (need includeReelStats)none
excludeUsernamesaccounts never to deliver, up to 10,000none
includeLeftOutAccountsa free row for every account read and left out, with the reasonoff
minMatchRatePercentstop when, after 100 accounts judged, fewer than this percent passed the filtersnever
refilterDatasetIdfilter an earlier run's profile rows again without reading Instagramnone
includePersonalDatafill the fields that name or reach a person (see "Personal data")off
maxConcurrencyaccounts read at the same time, 1 to 44
maxRunSeconds, requestTimeoutSecs, maxRetriestime limits and retriesplatform timeout, 30, 2
proxyConfigurationApify Proxy (default: the run's own address first, Apify's datacenter proxy when a request type is refused there)Apify Proxy

Filters

Every filter is judged once, on the row as it will be delivered; an account a filter leaves out is free, and a value the account does not show fails the filter that asks for it (a missing count is never read as 0). A filter whose data a failed read left out is never a filter miss: such an account is a failed read, free and named on the account list row. Influencers only keeps creator accounts and accounts whose category is one of: Digital creator, Video creator, Gaming video creator, Blogger, Personal blog, Public figure, Artist, Musician, Musician/band, Athlete, Fitness model, Fashion model, Model, Actor, Comedian, Writer, Author, Photographer, Gamer, Dancer, Chef, Entrepreneur, Coach, Personal coach, Fitness trainer, Makeup artist, Podcast, Journalist, News personality, Motivational speaker, DJ, Producer, Designer, Fashion designer. Instagram serves no language for an account: the language is our own estimate from the bio and each recent caption (the franc library, a text of 40 letters or more with a clear result), the language most of them agree on; a tie or nothing clear gives no language, and Languages leaves such accounts out.

Work that earns nothing

Reads that deliver no profile (names that do not exist or are not shown logged out, accounts a filter leaves out, failed reads) are free, so the run bounds them: a run starts with a small allowance of such work and every profile it delivers adds to it. When the allowance is spent the run stops with work_allowance, and the account list row names the accounts not reached so you can run them again. Measured on 2026-11-04: 700 made up names stopped after 301 reads; 300 made up names were all read in one run and stopped after 255 in another; a filter nobody passes (300 real accounts, a minimum of a billion followers) stopped after 40 reads, since each of those reads is a full profile read. A list whose first few hundred entries all miss, or a strict filter on a large list, can therefore stop before the accounts behind them: put the accounts you trust first, or split the list. A list that delivers profiles runs to its end.

Personal data

With Include personal data off (the default), the fields that name or reach a person are empty: emails, phones, relatedProfiles, bioMentions, the collaborators of the latest posts, the usernames of suggested accounts a filter left out (left out rows), Instagram's redirect link externalUrlShimmed, and links to Instagram, Facebook, Messenger, Threads or WhatsApp and contact links (any app link such as mailto, tel, sms, callto, tg or sgnl, and links to messaging services such as Telegram, Signal, Viber, Skype or LINE) in externalUrl and bioLinks. Turn it on to fill them. Bios and captions are always delivered exactly as Instagram serves them. You are responsible for a lawful use of personal data, GDPR included.

API examples

curl -X POST "https://api.apify.com/v2/acts/automation_craft~instagram-profile-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"usernames": ["nasa", "natgeo", "nike"], "includeLatestPosts": true}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('automation_craft/instagram-profile-scraper').call({ usernames: ['nasa', '528817151'], minFollowers: 1000 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((row) => row.type === 'profile').map((row) => [row.username, row.followerCount, row.postsCount]));
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("automation_craft/instagram-profile-scraper").call(run_input={"usernames": ["mrbeast", "cristiano"], "includeReelStats": True})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row["type"] == "profile":
print(row["username"], row["followerCount"], row["engagementRate"])

What this Actor does NOT do

  • No follower or following lists, no likers and no mutual followers. Instagram shows them only to logged in viewers; this Actor reads logged out only.
  • No "About this account" facts (the date an account joined, its country, former usernames, the date it was verified), and no business e-mail, phone or address of Instagram's contact button: a logged out reader does not get them. The bio, bio links, recent captions and the linked Facebook Page's public contact are read instead.
  • No highlight count, IGTV count, IGTV videos, "joined recently" or broadcast channel flag. The only page that served them to a logged out reader stopped answering on 2026-11-04; the first page of highlight titles is on every row.
  • No age restricted accounts. Accounts Instagram restricts by age (alcohol brands, for example) are not shown to a logged out reader: they get the free "not found or not shown" outcome.
  • No keyword, hashtag, place or commenter search for accounts. This Actor reads the accounts you name (and, if you ask, the accounts Instagram suggests next to them); finding accounts by keyword is the Instagram User Search Scraper's job.
  • No posts, reels or comments as rows of their own, beyond the 6 or 12 newest posts and the reel figures on each row.
  • No monitoring across runs. There is no memory of earlier runs, no change since the last run, no "new only" mode and no follower tracking; schedule runs and compare them in your own sheet, or filter an earlier run again with refilterDatasetId.
  • No e-mail verification and no pages outside Meta. The website a bio links to is not opened, and no e-mail address is checked against its mail server.
  • No logins, cookies or accounts of yours.

FAQ

Can I get an Instagram follower count without logging in?

Yes. The Actor reads each account's public profile without an account, cookies or login and gives the exact follower and following counts Instagram serves, as numbers you can sort and filter.

How do I get the number of posts of an Instagram account?

Every row carries postsCount, the exact post count from the profile's own embed page. A private account shows no post count to a logged out reader, so its postsCount is empty.

Can I look up an Instagram profile by its user id?

Yes. Put the numeric user id in the list like a username (for example 528817151); the Actor reads the account by its id and delivers it under its current username. An id and a username of the same account are delivered once.

Does it work for private accounts?

A private account's row carries what Instagram shows to anyone: its name, bio, exact followers and following, verified and account type, but no posts. It is charged as a Profile; turn Include private accounts off to leave private accounts out for free.

How do I track follower growth over time?

Schedule the same list (daily or weekly) and compare followerCount between runs in your sheet or database; each run is a fresh, complete read. The Actor keeps no memory between runs.

Why does this Actor run with limited permissions?

It needs no more: it reads Instagram's and Meta's public pages and writes only to its own run's dataset and key-value store, so it cannot touch anything else in your Apify account. Filtering an earlier run again reads that run's dataset, in your own account, by its id.

More data tools by Automation Craft

Changelog

See the Changelog tab: 0.1 (2026-11-04) is the first release.