Instagram Profile Statistics Scraper
Pricing
from $1.01 / 1,000 profile extracteds
Instagram Profile Statistics Scraper
Check batches of public Instagram profiles and export identity, follower, following, post, verification, business, and recent engagement-summary metrics for creator qualification and monitoring.
Pricing
from $1.01 / 1,000 profile extracteds
Rating
0.0
(0)
Developer
Automation Lab
Maintained by CommunityActor stats
0
Bookmarked
11
Total users
3
Monthly active users
5 days ago
Last modified
Categories
Share
Check batches of public Instagram accounts and export useful Instagram profile statistics without collecting full post histories. The Actor returns identity, followers, following, post count, verification, business status, and optional engagement summaries calculated from recent public post samples.
Use it to qualify creators, enrich lead lists, create account snapshots, or feed recurring profile-monitoring workflows. Inputs can be usernames, profile URLs, or both.
What does this Instagram profile statistics scraper do?
For every successfully resolved public profile, the Actor:
- normalizes usernames and
instagram.comprofile URLs; - removes duplicate profiles;
- retrieves public profile identity and account counts;
- optionally calculates average and median likes and comments;
- calculates a sampled engagement rate and follower/following ratio;
- evaluates optional creator-qualification filters;
- saves a typed record to the default Apify dataset.
It does not download media, scrape comments, or require users to supply Instagram login cookies.
Who is it for?
- Influencer marketers qualifying creators by audience, verification, and engagement.
- Sales and partnerships teams enriching Instagram lead lists.
- Analysts comparing account-level audience statistics.
- Agencies preparing repeatable profile snapshots for clients.
- Developers and data teams sending normalized profile records to spreadsheets, warehouses, or automation tools.
Why use this focused Actor?
This Actor is intentionally narrower than a full Instagram content scraper.
- Batch usernames and profile URLs in one run.
- Get account statistics without collecting an entire post feed.
- Calculate engagement summaries from the recent post sample already returned with the profile.
- Apply the same qualification rules to username and URL inputs.
- Pay a small run-start fee plus profile-result fees for successfully fetched and saved profiles.
- Continue useful batch work when an individual profile is unavailable.
What data can you extract?
| Field | Meaning |
|---|---|
profileId | Instagram profile ID |
username, fullName | Current handle and display name |
profileUrl | Canonical public profile URL |
biography, externalUrl | Public bio and external link |
followersCount | Current follower count |
followingCount | Current following count |
postsCount | Profile post count reported by Instagram, or null when that count is temporarily unavailable |
isVerified | Verification status |
isPrivate | Whether the account is private |
isBusinessAccount | Public business-account indicator |
businessCategoryName | Public business/creator category when available |
profilePicUrl | Public profile-picture URL when available |
recentPostsAnalyzed | Recent post samples used for engagement calculations |
likesSampleSize, commentsSampleSize | Posts with valid observed like/comment counts, respectively |
engagementSampleSize | Posts with both valid counts and a positive follower denominator |
averageLikes, averageComments | Mean of each metric's valid observed sample |
medianLikes, medianComments | Median of each metric's valid observed sample |
engagementRate | Mean likes-plus-comments from paired valid posts divided by followers, as a percentage |
followerFollowingRatio | Followers divided by following count |
matchedFilters | Whether all configured qualification filters matched |
scrapedAt | UTC collection timestamp |
Getting started
- Open the Actor input page.
- Add one or more values under Instagram usernames, or paste public profile URLs.
- Keep Calculate engagement summaries enabled if you need engagement fields.
- Optionally set follower, verification, or engagement filters.
- Enable Output matching profiles only to save only qualified profiles.
- Click Start.
- Open the Profile statistics dataset view or export the dataset as JSON, CSV, Excel, XML, or RSS.
A useful first input is:
{"usernames": ["instagram", "nasa", "nike"],"includeEngagementMetrics": true,"maxProfiles": 3}
Input parameters
| Input | Type | Default | Description |
|---|---|---|---|
usernames | string array | instagram, nasa | Usernames with or without @ |
profileUrls | request list | empty | Public instagram.com/<username>/ URLs |
maxProfiles | integer | 100 | Maximum unique profiles, from 1 to 1,000 |
includeEngagementMetrics | boolean | true | Calculate sampled engagement summaries |
onlyVerified | boolean | false | Require verification for a filter match |
minFollowers | integer | empty | Minimum followers for a filter match |
maxFollowers | integer | empty | Maximum followers for a filter match |
minEngagementRate | number | empty | Minimum sampled engagement percentage |
filterMatchedOnly | boolean | false | Save only records that match every filter |
maxRetries | integer | 2 | Bounded attempts for transient upstream errors |
When minEngagementRate is set, includeEngagementMetrics: false is rejected with an actionable error. Duplicate usernames across both input lists are processed once, ignoring case. Dotted handles, trailing slashes and URL queries are supported; post/reel/story links and system routes such as /accounts/login are rejected before the start fee or profile requests. Array entries and boolean settings must have their documented JSON types.
Output example
The values below illustrate the current output shape; public account statistics change over time.
{"profileId": "528817151","username": "nasa","fullName": "NASA","profileUrl": "https://www.instagram.com/nasa/","biography": "Public profile biography","externalUrl": "https://www.nasa.gov/","followersCount": 104262117,"followingCount": 92,"postsCount": 4873,"isVerified": true,"isPrivate": false,"isBusinessAccount": true,"businessCategoryName": "Government organization","profilePicUrl": "https://scontent.example/profile.jpg","recentPostsAnalyzed": 12,"likesSampleSize": 12,"commentsSampleSize": 12,"engagementSampleSize": 12,"averageLikes": 244654.58,"averageComments": 1351.25,"medianLikes": 219560,"medianComments": 1268.5,"engagementRate": 0.236,"followerFollowingRatio": 1133283.88,"matchedFilters": true,"scrapedAt": "2026-08-10T14:20:00.000Z"}
Engagement fields are null, all sample sizes are 0, and recentPostsAnalyzed is 0 when summaries are disabled or no public recent-post sample is available. Missing, hidden, negative and nonfinite counts are excluded, never replaced with zero; a genuinely observed zero remains valid. Each mean/median uses its own sample. Engagement uses only posts with both counts, and is null without a paired sample or positive followers. Sample sizes reveal incomplete coverage; an engagement filter cannot match an unavailable rate. No extra requests are made just to obtain engagement for hinted profiles. postsCount is null when unavailable; missing/invalid audience counts or mismatched identity are rejected rather than saved as valid profiles.
Creator qualification workflow
Use reliable audience and verification filters to turn a mixed profile list into an immediately usable shortlist, even when Instagram does not provide a recent-post sample:
{"usernames": ["instagram", "nasa"],"includeEngagementMetrics": false,"onlyVerified": true,"minFollowers": 1000000,"filterMatchedOnly": true}
With filterMatchedOnly: false, every successfully fetched profile is saved and matchedFilters explains qualification. With it enabled, nonmatching profiles are omitted and not charged as profile results. Add minEngagementRate only when your selected profiles currently expose recent-post samples.
Monitoring and integrations
A profile record is a current snapshot, not historical storage. For monitoring:
- save this Actor as an Apify Task;
- schedule the Task daily, weekly, or monthly;
- send each dataset to your warehouse, Google Sheets, Make, Zapier, or a webhook;
- compare
followersCount,postsCount, and engagement fields with the preceding snapshot.
Apify integrations can also trigger downstream Actors after a successful run. Use profileId for account identity tracking and retain username as the current, mutable handle.
How much does it cost to check Instagram profile statistics?
The Actor uses pay-per-event pricing:
- a one-time $0.0001 run-start fee;
- profile-result pricing with a $0.00168 BRONZE price per successfully saved profile, decreasing at higher platform tiers.
At the BRONZE tier, illustrative Actor charges are:
| Successfully saved profiles | BRONZE charge (USD) |
|---|---|
| 1 | 0.00178 |
| 10 | 0.01690 |
| 100 | 0.16810 |
Failed profiles and profiles omitted by filterMatchedOnly are not charged as profile results. Apify applies your active pricing tier and displays the maximum charge before a run. These examples will vary by tier.
Run through the Apify API
Set APIFY_TOKEN in your environment.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~instagram-profile-stats-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"usernames":["instagram","nasa"],"includeEngagementMetrics":true}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/instagram-profile-stats-scraper').call({usernames: ['instagram', 'nasa'],includeEngagementMetrics: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/instagram-profile-stats-scraper').call(run_input={'usernames': ['instagram', 'nasa'],'includeEngagementMetrics': True,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use with MCP and AI agents
Add the Actor to Claude Code through Apify MCP:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/instagram-profile-stats-scraper"
Claude Desktop
Add this server in Claude Desktop settings:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/instagram-profile-stats-scraper"}}}
Cursor
Use the same mcpServers JSON in Cursor's MCP settings.
VS Code
Add the same Apify MCP URL through VS Code's MCP server configuration.
Example prompts:
- “Check these Instagram usernames and return follower and engagement statistics.”
- “Keep only verified profiles above one million followers.”
- “Export these Instagram profile URLs as a creator qualification table.”
Limits and failure behavior
- Only public Instagram profile data is supported.
- Instagram can restrict or change public data surfaces without notice.
- Some profiles can fail because they are unavailable, renamed, region-restricted, or affected by an upstream profile-schema error. ID resolution checks timeline identities for the exact requested username instead of assuming the first post's owner is that profile; the final profile response must still match.
- A partial batch continues after upstream resolution failures and preserves successful profiles. Unresolved profiles are not charged as results.
- Output is saved only after the SDK accepts one profile charge. Budget exhaustion stops processing without uncharged output: the last accepted paid profile is preserved, unattempted profiles remain
pending, and an incomplete batch fails withterminalFailure: "charge". Startup charges are checked too; an exhausted startup budget prevents profile requests. - Charge or output-storage failures are terminal infrastructure errors, not uncharged upstream omissions. A storage failure after a profile charge can leave a billed-but-unsaved result; inspect the failed run and summary rather than treating it as a completed batch.
- A run fails when none of the requested profiles returns usable data. An all-filtered batch succeeds with zero rows.
- Engagement is calculated from the recent posts included in the public profile response, not the account's complete history.
- Hidden likes, private profiles, or sparse recent samples can produce
nullor less representative engagement values. - The Actor does not bypass login, private-account controls, or Instagram permissions.
For reliable batches, avoid repeatedly checking the same very large list within a short period. Use schedules appropriate to how often account-level metrics actually need to change.
Batch run summary
The default key-value store record RUN-SUMMARY, linked from the Output tab, is uncharged and contains schemaVersion, requested, fetched, saved, filtered, failed, pending, failureCategories and terminalFailure.
requestedis the unique validated batch aftermaxProfiles; duplicates are not counted again.fetchedcounts resolved, identity-checked profiles with valid audience counts;savedcounts completed dataset writes;filteredcounts fetched profiles deliberately omitted.failedcounts unresolved upstream operations. Bounded categories arenot_found,identity_mismatch,invalid_audienceandupstream_unavailable; these are diagnostic categories, not guarantees of the upstream root cause.pendingcounts unattempted profiles after a terminal infrastructure error.terminalFailureischarge,outputornull. On a normal completion,requested = fetched + failedandfetched = saved + filtered; a terminal charge/output fault can leave a fetched-but-unsaved profile.
The summary stores only aggregate counts/categories, not response bodies, credentials, sessions or profile identities. Invalid input fails before processing and has no batch summary; severe termination or storage outages can also prevent a summary from being written. Dataset output contains only profile records, never chargeable error rows.
Dependencies and data handling
This Actor uses public Instagram endpoints, Apify hosting/storage and the Apify SHADER datacenter proxy when available. We pay the operational dependency costs; there are no external API keys or additional off-platform service fees. A proxy failure can use direct requests. Only public profile fields are saved; profile data is not sent to an AI provider and the Actor does not use AI.
Dataset records, run input and logs remain in your Apify storage under your account's retention settings until deletion. Delete the run and its associated dataset/key-value store when no longer needed, and manage downstream copies separately. The Actor does not create a separate historical archive or persist login sessions. Our private diagnostic reports have the 30-day retention described below. This Actor is an independent automation-lab product, not affiliated with or endorsed by Instagram or Meta.
For help, use the Actor's Issues tab and include a shareable run link plus the affected input; do not send credentials or private session material.
Sanitized diagnostics
Failed operations send sanitized diagnostic input, exceptions and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL queries are removed; reports are retained for 30 days. Ordinary retries and successful fallbacks are not reported as errors. Exhausted lookups include a bounded route/attempt, HTTP status, response-shape category and safe failure signal to distinguish throttling, login restrictions, missing public data and transport failures. These observations never contain response bodies, upstream messages, proxy addresses or profile identities.
Responsible use and legality
Use this Actor only for lawful purposes and public data you are entitled to process. Follow Instagram's terms, privacy requirements, applicable data-protection laws, and your organization's retention policies. Do not use public account statistics for harassment, discrimination, invasive profiling, or attempts to access private content.
You are responsible for your inputs, downstream decisions, and compliance obligations. Consider aggregation and limited retention when individual-level data is unnecessary.
Troubleshooting
Why is a requested username missing from the dataset?
Check RUN-SUMMARY and the run status first, then the log if needed. The profile may not exist, may have been renamed, may be temporarily restricted, or may have returned invalid audience/identity data. Upstream unresolved profiles are not charged as results; terminal charge/storage errors require separate inspection.
Why are engagement fields null?
Confirm includeEngagementMetrics is true. A private profile or a profile without a usable recent-post sample can still have account counts while engagement fields remain unavailable.
Why did filtering return zero rows?
Run once with filterMatchedOnly: false. Inspect matchedFilters, follower counts, verification, and engagement values, then adjust the thresholds. Zero rows can be a valid result when no fetched profile matches.
Can I scrape private profiles or provide login cookies?
No. This Actor is designed for autonomous public-profile statistics and does not accept Instagram credentials or session cookies.
FAQ
Does it accept both usernames and URLs?
Yes. Combine usernames and profileUrls; duplicates are removed before processing.
Does it scrape all Instagram posts?
No. It returns profile-level data and uses only the recent public post sample for engagement summaries. Choose a dedicated Instagram posts Actor when you need post records.
Can I export results to a spreadsheet?
Yes. Download the default dataset as CSV or Excel, or connect an Apify integration to Google Sheets, Make, Zapier, or your own webhook.
Can I schedule recurring checks?
Yes. Save a Task and add a schedule. Store each run's dataset externally if you need historical comparisons.
Are counts guaranteed to stay identical?
No. Public profile metrics change continuously, and Instagram may round, hide, or temporarily withhold fields.
Related automation-lab Actors
- Instagram Scraper for broader profile and content workflows.
- Instagram Profile Posts Scraper when you need individual post records.
- Instagram Related Profiles Scraper for public related-account discovery.
Use this Actor when the buyer job is a focused, low-overhead profile-statistics snapshot rather than media or comment extraction.