Instagram Profile Stats Scraper
Pricing
from $3.50 / 1,000 profile stats scrapeds
Instagram Profile Stats Scraper
Bulk-scrape public Instagram follower, following, and post counts from usernames, @handles, or profile URLs. One dataset row per profile with verified and private flags. Cookieless and MCP-ready.
Pricing
from $3.50 / 1,000 profile stats scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Pass a bulk list of Instagram usernames, @handles, or profile URLs and receive one dataset row per profile with follower count, following count, post count, verification, privacy, display name, and a canonical profileUrl. Built for influencer-marketing teams, growth operators, and MCP agents that need a cheap, cookieless stats lookup before they enrich a full profile.
This Actor reads public Instagram profile metadata through the official web profile endpoint on instagram.com, with Apify Residential proxies, scheduling, and dataset export (JSON, CSV, Excel, HTML).
Best fit for this Actor
- You already have a roster of creator or brand handles and want follower / following / post counts in one export.
- You want a bounded, per-profile bill for a stats-only job, then you can enrich a shortlist later.
- You accept public Instagram profile data, including private accounts that still publish a public follower total.
- For bios, emails, phones, and recent posts, continue with Instagram Profile Scraper. For the posts themselves, then use Instagram Posts Scraper.
Use case: weekly creator roster
An influencer-ops manager keeps a spreadsheet of 80 fashion creators. They paste the handles, including a few @ prefixes and full instagram.com URLs. The run returns followersCount, postsCount, and isVerified for each row. They sort by followers, keep accounts above their campaign floor, and pass the surviving usernames into Instagram Profile Scraper when they need bio links and contact fields.
Quick start input
{"usernames": ["natgeo", "@nasa", "https://www.instagram.com/instagram/"],"deduplicate": true,"maxItems": 500}
Each value in usernames is one lookup. Bare handles, @handles, and profile URLs all normalize to the same username. deduplicate keeps a repeated handle as a single request. maxItems is the run-wide safety cap after that list is read.
Input reference
| Field | Type | What it controls |
|---|---|---|
usernames | array of strings | Required. Instagram usernames, @handles, or profile URLs. Prefill uses natgeo, @nasa, and the official Instagram URL. |
deduplicate | boolean | Default true. Collapses repeated handles to one request. |
maxItems | integer | Default 500, minimum 1. Caps how many input rows are processed. |
maxRequestRetries | integer | Default 2, range 0–10. Extra attempts on a transient Instagram response. |
requestTimeoutSecs | integer | Default 30, range 10–120. Seconds allowed for one profile request. |
Open the Input tab in Console for the live form. Empty or malformed tokens still write a row so the export stays aligned with the list you submitted.
What data you receive
One dataset item is one profile-stats attempt: a successful public stats record, an empty public payload, or an input-format row. Download the dataset as JSON, CSV, Excel, or HTML from the run Output tab.
| Field | Type | Meaning |
|---|---|---|
input | string | The exact token you submitted. |
username | string | Normalized Instagram handle. |
profileUrl | string | Canonical https://www.instagram.com/{username}/ URL. |
followersCount | integer | Public follower total. |
followingCount | integer | Public following total. |
postsCount | integer | Public post total. |
isPrivate | boolean | Private account flag when Instagram publishes it. |
isVerified | boolean | Verified-badge flag. |
fullName | string | Display name. |
source | string | Provenance. Native public web profile metadata. |
status | string | Row outcome: OK, VALID_EMPTY, INVALID_INPUT, or UPSTREAM_FAILED. |
statusMessage | string | Short human-readable detail. |
scrapedAt | string | ISO 8601 collection time. |
{"input": "https://www.instagram.com/nasa/","username": "nasa","profileUrl": "https://www.instagram.com/nasa/","followersCount": 104403992,"followingCount": 92,"postsCount": 4883,"isPrivate": false,"isVerified": true,"fullName": "NASA","source": "native","status": "OK","statusMessage": "Profile stats scraped successfully.","scrapedAt": "2026-08-18T09:16:23.629Z"}
status values:
| Value | Meaning |
|---|---|
OK | Public stats were written. This is the billed primary event. |
VALID_EMPTY | The handle was processed and Instagram returned no public user payload. |
INVALID_INPUT | The token is outside accepted username / @handle / profile-URL formats. |
UPSTREAM_FAILED | Retries finished without a usable public payload. |
Real-world use cases
1. Bare usernames
{"usernames": ["nasa", "natgeo"],"deduplicate": true}
2. Mixed handles and profile URLs
{"usernames": ["@instagram", "https://www.instagram.com/nasa/"],"deduplicate": true,"maxItems": 50}
3. Deduped campaign list
{"usernames": ["natgeo", "natgeo", "@natgeo"],"deduplicate": true}
Three copies of the same creator become one request and one stats row.
4. Bounded sample for an agent
{"usernames": ["nasa", "natgeo", "instagram"],"maxItems": 3,"maxRequestRetries": 2,"requestTimeoutSecs": 30}
Why agents choose this Actor
- One input field (
usernames) accepts handles,@prefixes, and profile URLs. - One row per submitted token (or per unique handle when
deduplicateis on), so batch exports stay complete. - Flat keys (
followersCount,followingCount,postsCount,profileUrl) are spreadsheet- and tool-call friendly. - Provenance is explicit:
sourceplus ISOscrapedAt. statusis stable enough to branch on: keepOKrows, reviewVALID_EMPTY, fixINVALID_INPUT.- Cost is scoped to successful stats rows. Set
maxItemsto the budget you can spend. - When you need emails and recent posts, continue with Instagram Profile Scraper after this stats lookup.
Agent checklist
- Pass usernames,
@handles, orhttps://www.instagram.com/{user}/URLs inusernames. - Set
maxItemsto the number of lookups you want billed at the liveprofile-stats-scrapedprice. - Leave
deduplicateon when the same creator appears more than once. - After the run, read the default dataset. Keep rows where
statusisOK. - Preserve
profileUrlas the public source link in any summary. - When you need bio, email, or recent posts, continue with Instagram Profile Scraper using the same
usernamevalues.
Use through the API
curl "https://api.apify.com/v2/acts/khadinakbar~instagram-profile-stats-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"usernames": ["nasa", "@natgeo"],"deduplicate": true,"maxItems": 50}'
When the Actor completes, read dataset items from the default dataset. You can download JSON, CSV, Excel, or HTML from the run Output tab or the Dataset API.
Use with AI agents through Apify MCP
Get Instagram follower, following, and post counts for nasa, natgeo, and https://www.instagram.com/instagram/. Return username, followersCount, followingCount, postsCount, isVerified, isPrivate, profileUrl, and status. Deduplicate handles. Then read the dataset and keep profileUrl as the source link.
Connect through https://mcp.apify.com. After the tool call, read the dataset, check each row status, and keep maxItems inside your cost scope.
Pricing
This Actor uses Pay per event (PPE) plus platform usage. Open the live Pricing tab for current event details, and use Apify's run cost controls to keep the workflow aligned with your budget.
Worked examples at the launch prices (apify-actor-start plus primary event profile-stats-scraped):
| Input | Rows billed | What happens |
|---|---|---|
| One valid public profile | 1 primary event | Stats row with status: OK |
| Three unique public profiles | 3 primary events | Three billed stats rows |
| Repeated handles with dedupe on | 1 primary event | One request, one billed row |
| Malformed token only | 0 primary events | INVALID_INPUT row, start event plus platform usage |
| Public handle with empty payload | 0 primary events | VALID_EMPTY row, start event plus platform usage |
Formula: OK row count × profile-stats-scraped + start event + platform usage. Platform usage (compute, residential proxy transfer, storage) is billed to the user on top of events.
Connect the workflow
- Start with this Actor to rank a handle list by
followersCountandpostsCount. - Continue with Instagram Profile Scraper when the shortlist needs bio, email, phone, and recent posts.
- Then use Instagram Posts Scraper to pull content from the same public usernames.
Best results
- Prefer canonical profile URLs or exact handles. Stories, reels, and
/p/post paths are outside the username contract and writeINVALID_INPUTrows. - Keep
deduplicateon for CRM exports that repeat the same creator. - Set
maxItemsto the campaign size you actually need; the cap is the cheapest way to bound a bulk run. - Treat
scrapedAtas collection time. Schedule a weekly run on the sameusernameslist when you are watching growth. - Private accounts can still return public follower totals with
isPrivate: true. Pair that flag with your outreach rules.
Builder's note
I built this as a stats-only sibling of the full Instagram profile Actor after watching teams pay for bios and recent posts when they only needed follower totals to rank a roster. I found Instagram's public web_profile_info JSON already carries edge_followed_by, edge_follow, and edge_owner_to_timeline_media counts, so an HTTP lookup through residential proxies is enough. In my testing, accepting @handles and full profile URLs in the same usernames array cut the most common agent mistakes. My goal was a complete batch export: every submitted token still appears as a row, and only OK stats rows are billed.
FAQ
Does this return emails or recent posts? This Actor is a stats lookup. When you need emails and recent posts, continue with Instagram Profile Scraper.
Do I need an Instagram login or cookies? No. It reads public profile metadata. You never paste a session cookie.
What happens to a typo or a missing account?
The run still finishes. A typo writes INVALID_INPUT. A processed handle with no public user object writes VALID_EMPTY. Those rows are present in the dataset and are outside the primary event.
Can an AI agent use this?
Yes. It is MCP-ready: pass handles or profile URLs, read one row per profile, and inspect status before summarizing.
How fresh are the counts?
Each row's scrapedAt is the collection timestamp for that run. Schedule repeats on the same list for a growth series.
Responsible use
Use this Actor on public Instagram profile metadata you are authorized to collect. Keep request volume courteous, treat follower totals as public research data, and follow Instagram's terms of service plus applicable laws (including GDPR/CCPA where they apply). Instagram and Meta are trademarks of their respective owners.