Instagram Profile Scraper – Followers & Engagement
Pricing
from $2.00 / 1,000 profiles
Instagram Profile Scraper – Followers & Engagement
Scrape Instagram profiles in bulk by username, profile URL, or user ID. Get bio, followers, public contact details, recent Posts/Reels, and optional Engagement Insights for creator research, competitor analysis, lead enrichment, and automation.
Pricing
from $2.00 / 1,000 profiles
Rating
0.0
(0)
Developer
LanceAPI
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
Instagram Profile Scraper API
Scrape Instagram profiles in bulk with bio, followers, public contact details, recent Posts/Reels, and optional Engagement Insights for creator research, competitor analysis, and automated workflows.
Submit usernames, @handles, Instagram profile URLs, or numeric user IDs. The Actor returns one Dataset row per unique profile for export, automation, databases, dashboards, or downstream AI analysis.
- Process up to 200 profiles per run.
- Get profile, audience, account type, category, verification, and public contact fields.
- Include recent public Posts/Reels without a separate per-post fee.
- Turn Profile Data into Profile Intelligence with optional Profile-level Engagement Insights: engagement rate, average interactions and views, overall posting frequency, recent activity, and activity status.
- Normalize and deduplicate equivalent profile inputs before processing.
- Pay for a Profile result only when a usable profile row is successfully returned.
Quick start
- Add one or more values to
profiles. - Keep
includeRecentContentenabled to return recent Posts/Reels. - Enable
includeEngagementInsightsif you want the optional paid analysis. It is disabled by default. - Click Start, then open the default Dataset from Output.
{"profiles": ["instagram", "nasa"],"includeRecentContent": true,"includeEngagementInsights": false}
The input is prefilled with instagram. A run accepts up to 200 unique profiles after normalization and de-duplication.
Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
profiles | string[] | Yes | Prefill: ["instagram"] | Usernames, @handles, profile URLs, or numeric Instagram user IDs. Maximum 200 unique profiles. |
includeRecentContent | boolean | No | true | Include usable public Posts/Reels from one healthy response. Disable to omit raw recent content. |
includeEngagementInsights | boolean | No | false | Calculate optional paid engagement and activity insights. Charged only when usable analysis is delivered. |
The switches are independent. You can enable Engagement Insights while disabling recent content: the Actor can collect an internal sample for analysis and returns recentContent: []. Disable both switches for metadata only.
Supported examples: instagram, @instagram, https://www.instagram.com/instagram/, and 25025320.
Equivalent username forms are processed once. When known identity data proves that a username and numeric ID refer to the same account, they are also merged. Invalid values appear in RUN_SUMMARY and do not stop other valid profiles.
Output
Each unique profile produces one Dataset row. Recent posts stay nested in recentContent[]; posts never become separate rows.
Rows can include identity, bio, images, follower/following/post counts, account flags, category, profile-published email/phone/website/WhatsApp details, and optional recent Posts/Reels. Profile-level engagement metrics, overall posting frequency and activity status are calculated only when Engagement Insights is enabled. Missing optional values are null or empty arrays rather than guesses.
Illustrative output with Engagement Insights enabled — values are examples, not a captured live result:
{"success": true,"status": "success","username": "example_creator","followersCount": 128000,"accountType": "creator","email": "hello@example.com","engagementRate": 4.07,"engagementSampleSize": 1,"avgLikes": 5100,"avgComments": 115,"avgViews": null,"postingFrequencyPerWeek": null,"latestActivityAt": "2026-10-12T08:00:00.000Z","daysSinceLastActivity": 1,"activityStatus": "occasional","recentContent": [{"shortcode": "ABC123","url": "https://www.instagram.com/p/ABC123/","type": "photo","timestamp": "2026-10-12T08:00:00.000Z","likesCount": 5100,"commentsCount": 115}],"dataLevel": "full","error": null,"scrapedAt": "2026-10-13T08:00:00.000Z"}
Dataset views
| View | Focus |
|---|---|
| Profiles | Identity, audience size, account attributes, contact summary, optional engagement, completeness. |
| Contacts | Public email, phone, website, and WhatsApp details. |
| Engagement | Optional Profile-level Insights: rate, sample size, average interactions/views, overall frequency, latest activity and activity status. Metrics are empty when the add-on is disabled. |
| Recent Content | Nested recent-post samples with their owning profiles. |
Views change presentation only; they do not create additional rows.
Important fields
| Field | Meaning |
|---|---|
id, username, url | Stable account identity and profile link. Large IDs remain strings. |
followersCount, followingCount, postsCount, reelsCount | Public counts when available. |
accountType | personal, creator, business, or unknown. |
email, phone, externalUrl, whatsapp | Contact details published on the profile. External websites are not crawled. |
engagementRate, engagementSampleSize | Optional Insights: engagement percentage and the number of posts with valid interaction counts used for the calculation. |
avgLikes, avgComments, avgViews | Optional Insights: averages of known interactions and views across the whole profile sample. |
postingFrequencyPerWeek | Overall weekly publishing estimate from all dated sample items. |
latestActivityAt, daysSinceLastActivity | Latest activity across the complete sample and complete days since that activity. |
activityStatus | Overall profile activity: very_active, active, occasional, inactive, or unknown. |
recentContent | Usable public Posts/Reels from the first healthy response; the count varies. |
dataLevel | full, partial, basic, or failed. |
success, status, error | Row outcome and a stable public error when resolution fails. |
scrapedAt | ISO 8601 collection time. |
Recent items can include identity, URL, media type, caption, timestamp, engagement counts, duration, media URLs, location, hashtags, mentions, and music metadata. Availability varies.
Recent-post collection
When recent content is enabled, the Actor includes usable public Posts/Reels from the first healthy recent-content response. The exact count varies by profile and available public data and is commonly around 12 items. It may contain photos, carousels, videos, and Reels; recognized Reels are marked as reel.
Items are normalized, invalid items are removed, duplicates are merged, and usable items are ordered newest first. All usable items from that response are retained. The Actor does not paginate further just to reach a fixed target. The count is not user-configurable.
Engagement Insights
Profile-level engagement and activity analysis. Engagement Insights turns a profile's available recent public content into profile-level performance metrics, including engagement rate, average interactions and views, posting frequency, recent activity, and overall activity status. It is an optional paid add-on and is disabled by default.
When enabled, it can return engagement rate, average likes/comments/views, overall posting frequency, latest activity, days since last activity, and overall activity status. Every usable sample item contributes to the profile analysis when its required data is available. This saves you from cleaning content data and building these calculations yourself before comparing creators, evaluating influencer activity, monitoring competitors, or feeding structured profile metrics into dashboards and AI workflows.
Analysis uses the same normalized sample collected during the profile lookup. It does not request extra pages to expand the sample. Exact metrics depend on the public data available: a missing engagement rate does not prevent other useful metrics from being delivered. Unknown counts stay unknown instead of becoming zero, and engagementSampleSize reflects the actual items used for the engagement calculation.
postingFrequencyPerWeek is estimated from the interval between the oldest and newest valid timestamps in the sample. It requires at least two dated items spanning one day. latestActivityAt always uses the newest timestamp across all formats. Activity is unknown without a valid timestamp and inactive after more than 30 days without activity; for more recent activity, an estimated 5+ items per week is very_active, 1+ is active, and a lower or unmeasurable frequency is occasional.
One additional Engagement Insights charge applies only when you enable the add-on and usable derived analysis is successfully delivered. Empty samples or unsuccessful calculations create no add-on fee. When disabled, derived fields keep empty placeholders (null, sample size 0, activity status unknown) to preserve the Dataset structure.
Status
dataLevel | status | Meaning | Profile results charged |
|---|---|---|---|
full | success | Metadata and requested enrichments are usable. | 1 |
partial | partial_success | Usable metadata, but requested fields, recent content, or Insights are unavailable/incomplete. | 1 |
basic | success | Metadata-only mode succeeded with both enrichment switches off. | 1 |
failed | failed | No usable profile metadata could be returned. | 0 |
The number of recent items does not, by itself, make a result partial. Disabling Engagement Insights does not lower the data level. An unsuccessful requested add-on leaves usable Profile metadata available and creates no Engagement Insights charge.
Pricing
Profile data from $1.60 per 1,000 successfully returned profiles, depending on your Apify plan — as low as $0.0016 per profile. Get structured account data for creator research, prospect lists, and monitoring, with recent public Posts/Reels included when enabled and no separate per-post fee.
Add Profile-level Engagement Insights from $0.60 per 1,000 profiles, depending on your plan — as low as $0.0006 extra per profile. Turn the available content sample into engagement and activity metrics without building those calculations yourself. This add-on is disabled by default and charged only when usable analysis is successfully delivered.
What you pay for — and what you don't
- Delivered Profile results: one result charge per unique, usable profile in a run. A partial result with usable metadata still counts; unavailable optional fields do not make the Profile result free.
- Recent content is included: returned Posts/Reels do not create separate content charges or another Profile charge.
- Duplicate protection: recognized equivalent inputs are processed once per run. Retries do not create another result or Insights charge for the same profile.
- No Profile result, no Profile fee: invalid inputs, not-found profiles, and metadata failures without a usable profile create no Profile Result charge.
- No usable Insights, no add-on fee: leaving the add-on off, an empty sample, or an unsuccessful analysis creates no Engagement Insights charge. A usable Profile result is still charged normally.
An Actor Start charge of $0.0005 applies once per run, separately from result and Insights fees, including runs that return no usable profiles. Batch up to 200 unique profiles in one run to share that start charge across your list. Enable Engagement Insights only when you need the extra analysis.
The starting prices above reflect available plan discounts, not a rate available on every plan. See this Actor's Pricing tab for current plan-specific rates and full pricing details.
API usage
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('lance_api/instagram-profile-scraper-api').call({profiles: ['instagram', 'nasa'], includeRecentContent: true, includeEngagementInsights: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('lance_api/instagram-profile-scraper-api').call(run_input={'profiles': ['instagram', 'nasa'], 'includeRecentContent': True, 'includeEngagementInsights': False,})items = client.dataset(run['defaultDatasetId']).list_items().items
cURL
curl -X POST "https://api.apify.com/v2/acts/lance_api~instagram-profile-scraper-api/runs?waitForFinish=120" \-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \-d '{"profiles":["instagram","nasa"],"includeRecentContent":true,"includeEngagementInsights":false}'
Use cases
- Build creator shortlists with audience size and published contacts, with optional engagement and activity Insights.
- Compare public competitor profiles and use optional Insights to evaluate their posting patterns in your spreadsheet or dashboard.
- Collect structured public business profile data for research and permitted outreach workflows.
- Monitor recent public posts through scheduled runs and repeated exports.
- Feed profile metadata and post text into your own analytics or AI pipeline.
The Actor supplies structured source data; it does not perform lead scoring, sentiment, outreach decisions, or business recommendations.
Limitations and responsible use
- Results depend on public availability at run time. Private, deleted, restricted, or unavailable accounts may fail.
- Optional fields may be
null; the recent-post sample can be short or empty. - Recent content is a latest-post sample, not a complete archive; media URLs may expire.
- Instagram can change public field availability.
Use only public or otherwise permitted data. Follow applicable law, Instagram's terms, privacy and copyright obligations, and anti-spam rules.
FAQ
Are duplicate inputs charged twice? No. Equivalent canonical profiles are processed once per run.
Can I choose the number of posts? No. Recent content commonly contains around 12 items, but the actual count varies. The Actor returns usable items from one healthy response without requesting extra pages to reach a target.
Can I collect only Reels? No. This Profile Actor uses the posts timeline. Use a dedicated Reels product for a Reels-only workflow.
Are posts billed separately? No. Recent Posts/Reels are included with the Profile Result when enabled. Engagement Insights is a separate optional paid analysis.
Can I get Insights without raw recent posts? Yes. Enable includeEngagementInsights and disable includeRecentContent. The Actor can analyze an internal sample while returning an empty recentContent array.
What if Engagement Insights cannot be generated? You pay no Engagement Insights fee. A usable Profile Result is still returned and charged normally.
Is a failed profile charged? No Profile Result charge is created without usable metadata. The Actor Start charge may still apply.
Do I need Instagram login details? No login or cookie input is exposed.
Support
Open an issue on the Actor page or email lanceapi2026@hotmail.com. Include the Run ID, a non-sensitive input, visible status/error, and expected versus actual behavior. Never send tokens, cookies, sessions, passwords, API keys, proxy credentials, or authorization headers.