Instagram Email Scraper With Follower Counts & Bios avatar

Instagram Email Scraper With Follower Counts & Bios

Pricing

from $4.99 / 1,000 results

Go to Apify Store
Instagram Email Scraper With Follower Counts & Bios

Instagram Email Scraper With Follower Counts & Bios

Automate email extraction from Instagram with Instagram Email Scraper. The actor scans profiles and external links to pull available contact emails into structured datasets for CRM enrichment.

Pricing

from $4.99 / 1,000 results

Rating

3.0

(1)

Developer

API Empire

API Empire

Maintained by Community

Actor stats

0

Bookmarked

118

Total users

9

Monthly active users

19 days ago

Last modified

Share

Instagram Email Scraper With Follower Counts & Bios ๐Ÿ“ˆ๐Ÿ“ง

An Instagram email scraper that turns a Google keyword search into a sortable lead list: for every public Instagram profile it finds with a visible email, it can also open that account's own profile page and read its live follower/following count, verified & private flags, full bio, on-profile email and bio links โ€” so you can tell a real prospect from an abandoned account before you ever open Instagram.

It is built on the same Google site:instagram.com search engine as the base instagram email scraper (no Instagram login, no cookies), then adds a second, optional enrichment step that fetches each surviving profile directly. Use it for influencer marketing outreach, Instagram lead generation, B2B prospecting, or general Instagram contact scraping by niche keyword.

โš™๏ธ How it works

  1. Discovery (Google search, not Instagram). For each keyword you provide, the actor searches Google for site:instagram.com <keyword> (optionally narrowed by location) through Apify's GOOGLE_SERP proxy group and parses the result blocks for emails, titles and snippets โ€” the same mechanism as the base instagram email finder.
  2. Classification. Every result URL is classified as a real account page, a post, a reel, or something else (explore/tv/stories), and a username + canonical profile_url is derived โ€” free, no extra request.
  3. Filtering. Non-profile results, duplicate accounts, and (optionally) accounts outside your follower range are dropped before anything is written to the dataset, so filtered-out rows are never charged.
  4. Profile enrichment (optional, on by default). For every account that survives, the actor makes one logged-out, unauthenticated request to that account's own public Instagram page and reads its embedded page data for exact follower/following counts, name, bio, verified/private flags, bio links and profile picture.

โœจ Key features

  • ๐Ÿ” Google-powered Instagram email finder โ€” discover emails from Instagram bios and captions by keyword, without an Instagram login.
  • ๐Ÿ‘ค Profile-only filtering (profileResultsOnly) โ€” automatically drops posts, reels and explore-page hits so every row is an actual account you can pitch.
  • ๐Ÿ“ˆ Live follower & following counts โ€” the real number read off the profile page right now, not a rounded guess from a search snippet.
  • ๐Ÿงฌ Full bio + on-profile email + bio links โ€” decoded biography text, any email currently published in the bio, and Linktree/website links from the bio-links block.
  • โ˜‘๏ธ Verified & private account flags on every enriched row.
  • ๐Ÿ“‰ Follower-range filtering (minFollowers / maxFollowers) โ€” keep only accounts above a follower floor, below a ceiling, or both โ€” a fast way to separate micro-creators from agency-run accounts.
  • ๐Ÿงน Per-run de-duplication (dedupeByUsername) โ€” the same account is never billed twice in one run even if it turns up under several keywords.
  • ๐Ÿ’ธ Cost control toggle (fetchProfileDetails) โ€” turn profile enrichment off to stay on search-only, base-shaped rows when you don't need the extra fetch.

๐Ÿงฉ Input

The 7 base fields (keywords, platform, location, emailDomains, maxEmails, engine, proxyConfiguration) work exactly as in the original Instagram Email Scraper โ€” any base-shaped input still runs unchanged. Five fields are new in this variant.

{
"keywords": ["marketing", "small business owner"],
"platform": "Instagram",
"location": "",
"emailDomains": ["@gmail.com"],
"maxEmails": 20,
"engine": "legacy",
"profileResultsOnly": true,
"fetchProfileDetails": true,
"minFollowers": 1000,
"maxFollowers": 0,
"dedupeByUsername": true
}
FieldTypeDefaultDescription
keywordsarray (required)โ€”Search terms used to find Instagram content, e.g. marketing, founder.
platformstringInstagramTarget platform. Currently only Instagram is a working option.
locationstring""Optional place name to narrow results (e.g. London). Blank = worldwide.
emailDomainsarray["@gmail.com"]Only keep emails from these domains. Empty array = all domains.
maxEmailsinteger20Cap on emails collected per keyword (1โ€“5000) โ€” not a total across all keywords.
enginestringlegacyCurrently only legacy (the GOOGLE_SERP search path) is a working option.
profileResultsOnly ๐Ÿ†•booleantrueKeep only account-page results (instagram.com/username); drops posts (/p/), reels, explore pages and the bare homepage.
fetchProfileDetails ๐Ÿ†•booleantrueOpen each surviving account's public profile page and read followers, following, bio, verified/private flags and bio links. Turn off to stay search-only.
minFollowers ๐Ÿ†•integer1000Drop accounts below this live follower count. 0 = no floor. Requires fetchProfileDetails: true โ€” otherwise there is no live count to compare against and the row is dropped.
maxFollowers ๐Ÿ†•integer0Drop accounts above this live follower count. 0 = no ceiling.
dedupeByUsername ๐Ÿ†•booleantrueWrite each account once per run even if it appears under multiple keywords or pages.
proxyConfigurationobjectApify ProxyAccepted for compatibility with the base. Internally, Google searches always run through Apify's GOOGLE_SERP proxy group, and profile enrichment always runs through a residential proxy โ€” you don't need to configure either separately.

๐Ÿ“ค Output

Every base field (network, keyword, title, description, url, email) is always present with the same meaning as in the base actor โ€” new fields are added alongside them, never in place of them.

{
"network": "Instagram.com",
"keyword": "marketing",
"title": "Jane's Marketing Co (@janesmarketingco) โ€ข Instagram photos and videos",
"description": "1.2K Followers, 341 Following, 58 Posts - See Instagram photos and videos from Jane's Marketing Co (@janesmarketingco).",
"url": "https://www.instagram.com/janesmarketingco/",
"email": "jane@janesmarketingco.com",
"username": "janesmarketingco",
"result_type": "profile",
"profile_url": "https://www.instagram.com/janesmarketingco/",
"snippet_followers_text": "1.2K Followers, 341 Following, 58 Posts",
"account": {
"full_name": "Jane's Marketing Co",
"followers_count": 1243,
"following_count": 341,
"posts_count_text": "58 Posts",
"is_verified": false,
"is_private": false,
"biography": "Small-business marketing tips & templates ๐Ÿ“ˆ\njane@janesmarketingco.com",
"bio_email": "jane@janesmarketingco.com",
"bio_links": [
{ "url": "https://linktr.ee/janesmarketingco", "title": "Linktree" }
],
"profile_pic_url": "https://scontent.cdninstagram.com/v/example.jpg",
"instagram_id": "48213556791",
"source": "profile_page"
}
}
FieldTypeDescription
networkstringSource platform label (ships as Instagram.com, inherited from the base โ€” see caveats).
keywordstringThe keyword that produced this result.
titlestringGoogle result title.
descriptionstringGoogle result snippet.
urlstringThe raw URL Google returned.
emailstringEmail address extracted from the Google result block (title + snippet + sitelinks).
username ๐Ÿ†•stringInstagram handle, derived from the URL path (or a (@handle) fallback from the title/snippet).
result_type ๐Ÿ†•stringprofile, post, reel, or other.
profile_url ๐Ÿ†•stringCanonical https://www.instagram.com/<username>/ link.
snippet_followers_text ๐Ÿ†•stringThe raw "N Followers, N Following, N Posts" string already present in the Google snippet โ€” a free signal even when fetchProfileDetails is off.
account.full_name ๐Ÿ†•stringDisplay name from the profile page.
account.followers_count ๐Ÿ†•integerExact, live follower count.
account.following_count ๐Ÿ†•integerExact, live following count.
account.posts_count_text ๐Ÿ†•stringRounded post count as shown on the profile (e.g. "58 Posts") โ€” no exact integer is available (see caveats).
account.is_verified ๐Ÿ†•booleanVerified badge.
account.is_private ๐Ÿ†•booleanPrivate-account flag.
account.biography ๐Ÿ†•stringDecoded bio text.
account.bio_email ๐Ÿ†•stringEmail currently published in the bio (decoded, not the raw SERP-block email).
account.bio_links ๐Ÿ†•array{url, title} objects for Linktree/website/bio links (full structured form, for JSON/CSV consumers).
account.bio_links_text ๐Ÿ†•stringThe same bio links joined into one display-friendly string (e.g. "https://linktr.ee/x (Linktree)") โ€” this is the column that renders in the default dataset table view, since a raw array does not flatten into a table cell.
account.profile_pic_url ๐Ÿ†•stringProfile picture URL.
account.instagram_id ๐Ÿ†•stringNumeric Instagram account ID.
account.source ๐Ÿ†•stringprofile_page when the live fetch succeeded, search_snippet when it was skipped or failed โ€” always tells you whether account.* is live or unavailable for that row.

๐Ÿš€ How to use

  1. Add one or more keywords describing the niche, industry or role you're targeting (e.g. personal trainer, real estate agent).
  2. Optionally set location, emailDomains, and maxEmails per keyword.
  3. Leave profileResultsOnly and fetchProfileDetails on to get enriched, profile-only leads; turn fetchProfileDetails off if you only want the cheaper search-only rows.
  4. Set minFollowers / maxFollowers to the follower range you care about (defaults to 1000+ followers; set to 0 to see everything).
  5. Run the actor and export the dataset as JSON, CSV, or Excel.

๐ŸŽฏ Use cases

  • Instagram lead generation โ€” build a list of business/creator emails in a niche, pre-filtered to accounts with a real audience.
  • Influencer & creator outreach โ€” check follower count, verified status and bio links before reaching out.
  • Market research โ€” read bios and follower counts across a keyword to understand who's active in a niche.
  • List cleanup โ€” run an existing keyword list through minFollowers/maxFollowers to separate micro-accounts from agency-run pages.

โš ๏ธ Honest limitations & caveats

  • minFollowers defaults to 1000. Real Google-SERP results for broad keywords (e.g. "marketing") skew toward small accounts โ€” in testing, most discovered leads had well under 1,000 followers. If a run returns few or no rows, set minFollowers to 0 first to see the full unfiltered lead volume, then raise the floor.
  • Profile enrichment is a best-effort, logged-out fetch. It is not guaranteed to succeed for every account on every run; when it fails, account.source is "search_snippet" and the account.* fields are left empty rather than faked.
  • snippet_followers_text vs account.followers_count. The snippet text comes from Google's cached copy of the page and can be rounded or out of date; account.followers_count is the exact, live number. Both are shipped side by side โ€” never merged into one value.
  • email vs account.bio_email. The top-level email is extracted from the entire Google result block (title + snippet + sitelinks) and can occasionally belong to a third party mentioned in the same snippet. account.bio_email is the address currently published in that account's own bio and decoded from the profile's page data โ€” treat it as the more reliable of the two when both are present.
  • account.posts_count_text is a rounded string (e.g. "58 Posts"), not an exact integer โ€” no exact post count is exposed on the public profile page.
  • network ships as "Instagram.com" (capital I), inherited unchanged from the base actor for backward compatibility โ€” cosmetic only, does not affect matching on platform/url.
  • dedupeByUsername de-duplicates within a single run only, not across separate runs.
  • maxEmails is applied per keyword, not as a run-wide total โ€” a run with 10 keywords at the default can produce up to 10ร— maxEmails rows.
  • proxyConfiguration is accepted but not used to route the search itself โ€” Google searches always go through Apify's GOOGLE_SERP proxy group, and profile-page fetches always go through a residential proxy, regardless of what's set here.
  • platform and engine currently accept only one working value each (Instagram / legacy) โ€” both fields exist for forward compatibility with the base schema.

โœ… Compliance

Only publicly visible data is collected โ€” no login, no cookies, and no access to private accounts or content behind a login wall. You are responsible for using any collected contact data in line with applicable email/anti-spam and data-protection laws and Instagram's own terms.

โ“ FAQ

Does this actor log into Instagram? No. Both the Google search step and the profile-enrichment step are unauthenticated, logged-out requests to publicly available pages.

Can I use it as a plain Instagram email scraper without the follower/bio enrichment? Yes โ€” set fetchProfileDetails to false. You'll get the same base fields (network, keyword, title, description, url, email) plus the free, no-extra-request fields (username, result_type, profile_url, snippet_followers_text).

Why did my run return 0 rows? The most common cause is minFollowers (default 1000) filtering out every lead your keyword found. Re-run with minFollowers: 0 to confirm leads exist, then raise the floor as needed.

Does it scrape private accounts? No. Only public profile pages are fetched; private accounts either don't expose the data being read, or are excluded outright when is_private is detected.

What's the difference between email and account.bio_email? email comes from the Google search result text (title/snippet/sitelinks combined); account.bio_email is decoded from the profile's own current bio. They can differ or one can be empty while the other isn't.