Instagram Profile Scraper - Posts, Emails & Engagement avatar

Instagram Profile Scraper - Posts, Emails & Engagement

Pricing

Pay per event

Go to Apify Store
Instagram Profile Scraper - Posts, Emails & Engagement

Instagram Profile Scraper - Posts, Emails & Engagement

Scrape Instagram profiles without login: bio, category, followers, business email, phone and address, every bio link unwrapped, recent posts and reels with likes/comments/captions/hashtags, engagement rate, and related-account discovery. No API key, no cookies.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Flash Scrape

Flash Scrape

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

an hour ago

Last modified

Share

Instagram Profile Scraper — Posts, Emails & Engagement

Scrape any public Instagram profile without logging in. Feed in usernames or profile URLs and get back the full profile record — bio, category, follower and following counts, verification and business flags, business email, phone and address, every link in the bio, the most recent posts and reels with likes, comments, captions, hashtags and tagged users — plus an engagement rate computed from those posts. Optionally let it discover related accounts and expand a single seed handle into a whole list.

No API key. No session cookie. No login.


Realistic throughput (measured 2026-08-09)

Instagram rate-limits shared proxy pools hard. Measured on Apify RESIDENTIAL, two consecutive 5-handle runs delivered 2 of 5 profiles each time — the first handles succeed, then every remaining exit IP is refused and the run stops rather than burn your budget. Requests are HTTP/2 (Instagram answers 429 to every HTTP/1.1 request, which is why this Actor pins httpx[http2]).

What that means for you: ask for a handful of handles per run rather than fifty, and expect partial delivery. You are only charged for profiles that actually return data — a refused handle costs you nothing. For dependable high volume you need a dedicated residential proxy rather than a shared pool.

What you get per profile

GroupFields
Identityusername, full_name, user_id, fbid, profile_url, profile_pic_url, pronouns
Audiencefollowers, following, posts_count, videos_count, highlight_reel_count
Statusis_verified, is_private, is_business_account, is_professional_account, category, is_joined_recently
Contactemail, business_email, bio_emails, business_phone, business_contact_method, business_address, external_url, bio_links, links_count
Engagementavg_likes, median_likes, avg_comments, engagement_rate_pct, posts_per_week, last_post_at, days_since_last_post, posts_sampled
Contentrecent_posts[], recent_reels[] — each with caption, hashtags, mentions, likes, comments, view count, timestamp, image URL, dimensions, tagged users, location
Discoveryrelated_profiles[], related_profiles_count

bio_links and external_url are unwrapped — Instagram serves outbound links behind an l.instagram.com redirect, and this Actor resolves them to the real destination so you get https://www.nasa.gov/, not a tracking URL.

Example output

A real row (trimmed — the full record has every field in the table above):

{
"username": "nasa",
"full_name": "NASA",
"biography": "Making the seemingly impossible, possible. ✨",
"followers": 104251597,
"following": 92,
"posts_count": 4865,
"is_verified": true,
"is_business_account": true,
"is_private": false,
"email": null,
"business_phone": null,
"external_url": "https://www.nasa.gov/",
"links_count": 5,
"posts_sampled": 12,
"avg_likes": 148632.4,
"engagement_rate_pct": 0.1461,
"posts_per_week": 6.21,
"days_since_last_post": 1,
"related_profiles_count": 49
}

email is null here because NASA has not published a public contact email — the field is only populated when the account actually exposes one. See the honesty note below.

Discover accounts from one seed handle

Instagram returns up to ~49 related profiles for each account it serves. Turn on discoverRelated and the Actor follows them, so one input handle can yield a whole niche:

{
"usernames": ["nasa"],
"discoverRelated": true,
"maxRelatedPerProfile": 10,
"maxProfiles": 200,
"onlyBusinessAccounts": true,
"onlyWithContact": true
}

That crawls outward from nasa and keeps only business accounts that actually publish a contact — a lead list built from a single starting point.

Input

FieldTypeNotes
usernamesarrayHandles, @handles, or profile URLs, mixed freely
discoverRelatedbooleanFollow each profile's related accounts
maxRelatedPerProfileintegerHow many related accounts to queue per profile (1–49)
maxProfilesintegerHard cap and the stop condition for discovery
minFollowers / maxFollowersinteger0 = no filter; use maxFollowers to target micro-influencers
onlyVerifiedbooleanVerified accounts only
onlyBusinessAccountsbooleanBusiness/professional accounts only — these are the ones that can expose contact details
onlyWithContactbooleanKeep only rows with an email or phone
onlyWithLinkbooleanKeep only rows with a link in bio
skipPrivatebooleanDrop private accounts
alsoEmitPostsbooleanAlso emit a flat row per post (record_type: "post")
maxPostsPerProfileinteger0 = keep all returned
delaySecondsstringPause between profiles; lower = higher throttle risk
proxyConfigurationobjectStrongly recommended — see below

Honest limits — please read before buying

This Actor uses Instagram's public profile endpoint, which is the only one that answers an anonymous client. That sets real boundaries, and they are worth knowing up front rather than discovering mid-run:

  • About 12 recent posts + 12 recent reels per profile. There is no way to page deeper without an account, so maxPostsPerProfile can only trim that set, never extend it. posts_count still reports the true lifetime total.
  • engagement_rate_pct is computed from those sampled posts, not the full history. Every row reports posts_sampled so you can see the denominator.
  • No hashtag feeds, location feeds, search, follower/following lists, or stories. Those endpoints reject anonymous requests (HTTP 302/401). This Actor will never ask you for your Instagram password or session cookie to get around that.
  • Contact fields depend on the account. Only business/professional accounts can publish an email, phone or address; personal accounts have none, and the fields are null rather than missing. bio_emails catches addresses written into bio text. Use onlyWithContact if you only want rows that have one.
  • Private accounts return name, category and counts, but never posts.
  • You need a residential proxy. This is the big one. Instagram blocks shared cloud/datacenter IP ranges outright — measured here, six consecutive Apify datacenter IPs were all refused inside 1.5 seconds, and the platform's own egress IP is refused too. Set proxyConfiguration to the RESIDENTIAL group (the default) or supply your own residential proxy. The Actor rotates to a fresh IP on every throttle, and when it runs out it stops and tells you exactly how many handles went unscraped — it will never hand back a short list that looks complete.
  • A few accounts hit a bug on Instagram's side (HTTP 400, a deleted business-category asset). That is reported per profile as an upstream error rather than as "profile not found", because they are different problems with different fixes.

Use cases

  • Influencer and creator research — filter by follower band, engagement rate and posting cadence rather than follower count alone.
  • Lead generation — business accounts with a published email or phone, expanded via related-profile discovery.
  • Competitor and brand monitoring — track posting frequency, average likes and recent captions over time.
  • Market and niche mapping — start from one account and crawl outward to map who Instagram considers adjacent.

Pricing

Pay per result: you are charged per profile delivered, and per post row only if you turn alsoEmitPosts on. Profiles removed by your filters, not found, or blocked upstream are not charged.

FAQ

Do I need an Instagram account or cookies? No. If any tool asks you for your Instagram password or session cookie, that is a risk to your account — this one never does.

Can it scrape private profiles? It returns their public record (name, category, counts). Their posts are not public and are not accessible.

Why is email empty for a big brand? Because that account has not published one. Most large brands route contact through their website — external_url and bio_links are the useful fields there.

Can I get more than 12 posts? Not without an authenticated account, which this Actor deliberately does not use.