Instagram Profile Scraper
Pricing
from $1.75 / 1,000 results
Instagram Profile Scraper
Scrape Instagram profiles by handle: followers, follows, post count, business category and engagement averages, one row per account with its latest posts nested. $1.95 per 1,000 profiles: 25% below the Free plan price of apify/instagram-profile-scraper, and the same flat rate on every plan.
Pricing
from $1.75 / 1,000 results
Rating
0.0
(0)
Developer
itnlab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 hours ago
Last modified
Categories
Share
Give it Instagram handles and get one row per account — followers, follows, post count, verification, business category, engagement averages — with the account's latest posts nested inside the same row, at a flat $1.75 per 1,000 profiles for every buyer.
This is the narrow Actor of the three. If you want post rows, reel rows or comment rows, use Instagram Scraper or Instagram Comment Scraper with Sentiment, which are the same collector wearing a different form. What this one sells is the account: paste handles, get a table you can sort by followers.
What you get
- The account's own figures —
followersCount,followsCount,postsCount,verified,private,isBusinessAccount,businessCategoryName,fullName,id,url. - Engagement, computed rather than claimed —
avgLikes,avgComments,avgVideoViewsandengagementRatePct, worked out over the posts actually collected.postsInSnapshotsays how many that was, so you can tell an average over 12 posts from an average over 200. latestPosts— the recent posts nested in the row: caption,hashtags,mentions,timestamp,likesCount,commentsCount,taggedUsers, dimensions, and the media URLs when you ask for them.- The account as it presents itself —
biography,profilePicUrl,externalUrl,externalUrls(the full link list, each with its title) andhighlightReelCount. Collected since 14 September 2026, under a data-controller decision described below. relatedProfiles— the accounts Instagram suggests beside the profile: handle, name, id, verified and private flags, avatar. Off by default (includeRelatedProfiles), because it costs an extra request per account and the accounts in it are third parties nobody named.collectedAt— when the snapshot behind the row was taken. Rows are served from a stored snapshot rather than fetched at read time, so this is the honest age of the data.- A row for every handle, including the ones that failed — a handle that does not resolve writes a row carrying
inputUrl,erroranderrorDescriptionrather than disappearing from the dataset. Fifty handles in means fifty rows out.
Input
{"usernames": ["nasa", "natgeo"],"resultsLimit": 12}
apify/instagram-profile-scraper's published form is two fields — usernames and includeAboutSection — and its own example input runs here unchanged. Both are on this form; tests/test_actor_variants.py keeps a copy of that object so the day either side moves, the suite says so.
usernames takes handles or profile URLs; both spellings work. resultsLimit is how many posts to nest per account. onlyPostsNewerThan drops nested posts older than a date or a span like "3 days", and the profile row still comes back either way — an account with nothing recent is still an account. includeMediaUrls adds the signed image and video URLs, which expire within days and are withheld unless asked for. includeRelatedProfiles adds the suggested-accounts list, at one extra request per account. enrichPosts is on by default and is what gives each nested post its timestamp, likesCount, commentsCount, dimensions and taggedUsers: Instagram's logged-out grid carries none of them, so they are read from each post's own page at one request per post. Turn it off for a faster, thinner listing.
Output
One row per account:
{"dataType": "profile","id": "528817151","username": "nasa","fullName": "NASA","url": "https://www.instagram.com/nasa/","verified": true,"private": false,"isBusinessAccount": true,"businessCategoryName": "Government Organization","followersCount": 97400000,"followsCount": 78,"postsCount": 4210,"postsInSnapshot": 12,"avgLikes": 412903,"avgComments": 1363,"engagementRatePct": 0.42,"biography": "Exploring the universe and our home planet.","profilePicUrl": "https://scontent.cdninstagram.com/v/t51.2885-19/a1_n.jpg","externalUrl": "http://nasa.gov","externalUrls": [{"url": "http://nasa.gov", "title": "NASA"}],"highlightReelCount": 14,"latestPosts": [{"shortCode": "DCMUrLltVlM","type": "Image","caption": "A new view of the Carina Nebula.","hashtags": ["webb"],"timestamp": "2026-08-30T18:02:11.000Z","likesCount": 412903,"commentsCount": 1363}],"collectedAt": "2026-08-30T21:14:05.000Z","inputUrl": "nasa"}
What it does not return, and why that is written down
A figure the collected surface did not carry is an absent column — never 0, never a stand-in. postsCount missing means nobody measured it, not that the account has no posts, and latestPosts is absent rather than [] when no posts were collected.
What a nested post carries depends on where it was read. Instagram's logged-out profile grid does not send per-post like counts, comment counts or timestamps, so those columns are left out of the nested entries rather than written as 0 — and with no likes to average, avgLikes, avgComments and engagementRatePct come back absent too. They are absent because nobody measured them, not because the account has no engagement. A post fetched by its own URL carries the full set, which is what Instagram Scraper does when you give it post URLs.
biography, profilePicUrl, externalUrl, externalUrls and highlightReelCount were on this list until 14 September 2026 and are now collected. The data controller's decision was to match what apify/instagram-profile-scraper publishes and not one field further, so that a buyer switching does not lose the bio — and so that the line where collection stops is a stated purpose rather than the shape of a payload. The compliance file carries the dated row, the amended legitimate-interest assessment and the field list.
What the reference publishes and this Actor still does not:
public_emailandpublic_phone_number— they arrive in the same payload as everything above and are not published here. The reference Actor does not publish them either, which is the ceiling this listing was aligned to; "it was in the response" has never been a reason to keep something.profilePicUrlHD,businessAddress,fbid— excluded by an explicit data-protection decision recorded in this project's compliance file, not by an oversight.includeAboutSection— the paid About-this-account panel: date joined, country of registration, broadcast channel. None of it is on the surfaces this Actor reads, so sending the flag is refused with that sentence rather than accepted and billed for an empty panel. It is the one paid add-on the reference sells on top of its per-profile rate.- Stories, hashtag feeds and
/tagged/URLs — outside the perimeter. They are refused with an explanation rather than answered with an empty result set, because[]reads as "there is nothing there", which is a different and false claim.
How it collects
Public, logged-out surfaces only: no login, no cookies, no session. That is what makes the perimeter above real, and it is also why the figures that are here can be trusted — they are what any visitor to the page would see.
How many posts get nested
resultsLimit is how many posts to nest per account, and a run returns that many or every post the account has, whichever is smaller. The profile row comes back either way — an account with nothing to nest is still an account.
Pricing
$1.75 per 1,000 profiles ($0.00175 each), pay-per-event.
One flat rate, for everybody. $1.75 per 1,000 — no plans, no tiers, no volume brackets, and no Apify platform usage charged on top. That is 32% below the $2.60 that apify/instagram-profile-scraper charges its Free-plan buyers (read from Apify's public API, 17 September 2026); their rate moves with the subscription a buyer is on, and ours does not move at all.
One thing a price comparison leaves out and an invoice does not: theirs charges the About-this-account panel as a separate add-on, at $7.00 per 1,000 on their Free plan. Here there is no add-on, because this Actor does not collect that panel at all.
A result is a row: one account is one result, however many posts are nested in latestPosts. The nested posts are part of the row, not rows of their own, and are not charged separately.