Instagram Email Scraper With Follower Counts & Bios
Pricing
from $4.99 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
118
Total users
9
Monthly active users
19 days ago
Last modified
Categories
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
- Discovery (Google search, not Instagram). For each keyword you provide, the actor searches Google for
site:instagram.com <keyword>(optionally narrowed bylocation) through Apify'sGOOGLE_SERPproxy group and parses the result blocks for emails, titles and snippets โ the same mechanism as the base instagram email finder. - Classification. Every result URL is classified as a real account page, a post, a reel, or something else (explore/tv/stories), and a
username+ canonicalprofile_urlis derived โ free, no extra request. - 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.
- 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}
| Field | Type | Default | Description |
|---|---|---|---|
keywords | array (required) | โ | Search terms used to find Instagram content, e.g. marketing, founder. |
platform | string | Instagram | Target platform. Currently only Instagram is a working option. |
location | string | "" | Optional place name to narrow results (e.g. London). Blank = worldwide. |
emailDomains | array | ["@gmail.com"] | Only keep emails from these domains. Empty array = all domains. |
maxEmails | integer | 20 | Cap on emails collected per keyword (1โ5000) โ not a total across all keywords. |
engine | string | legacy | Currently only legacy (the GOOGLE_SERP search path) is a working option. |
profileResultsOnly ๐ | boolean | true | Keep only account-page results (instagram.com/username); drops posts (/p/), reels, explore pages and the bare homepage. |
fetchProfileDetails ๐ | boolean | true | Open 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 ๐ | integer | 1000 | Drop 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 ๐ | integer | 0 | Drop accounts above this live follower count. 0 = no ceiling. |
dedupeByUsername ๐ | boolean | true | Write each account once per run even if it appears under multiple keywords or pages. |
proxyConfiguration | object | Apify Proxy | Accepted 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"}}
| Field | Type | Description |
|---|---|---|
network | string | Source platform label (ships as Instagram.com, inherited from the base โ see caveats). |
keyword | string | The keyword that produced this result. |
title | string | Google result title. |
description | string | Google result snippet. |
url | string | The raw URL Google returned. |
email | string | Email address extracted from the Google result block (title + snippet + sitelinks). |
username ๐ | string | Instagram handle, derived from the URL path (or a (@handle) fallback from the title/snippet). |
result_type ๐ | string | profile, post, reel, or other. |
profile_url ๐ | string | Canonical https://www.instagram.com/<username>/ link. |
snippet_followers_text ๐ | string | The 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 ๐ | string | Display name from the profile page. |
account.followers_count ๐ | integer | Exact, live follower count. |
account.following_count ๐ | integer | Exact, live following count. |
account.posts_count_text ๐ | string | Rounded post count as shown on the profile (e.g. "58 Posts") โ no exact integer is available (see caveats). |
account.is_verified ๐ | boolean | Verified badge. |
account.is_private ๐ | boolean | Private-account flag. |
account.biography ๐ | string | Decoded bio text. |
account.bio_email ๐ | string | Email 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 ๐ | string | The 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 ๐ | string | Profile picture URL. |
account.instagram_id ๐ | string | Numeric Instagram account ID. |
account.source ๐ | string | profile_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
- Add one or more
keywordsdescribing the niche, industry or role you're targeting (e.g.personal trainer,real estate agent). - Optionally set
location,emailDomains, andmaxEmailsper keyword. - Leave
profileResultsOnlyandfetchProfileDetailson to get enriched, profile-only leads; turnfetchProfileDetailsoff if you only want the cheaper search-only rows. - Set
minFollowers/maxFollowersto the follower range you care about (defaults to 1000+ followers; set to0to see everything). - 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/maxFollowersto separate micro-accounts from agency-run pages.
โ ๏ธ Honest limitations & caveats
minFollowersdefaults 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, setminFollowersto0first 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.sourceis"search_snippet"and theaccount.*fields are left empty rather than faked. snippet_followers_textvsaccount.followers_count. The snippet text comes from Google's cached copy of the page and can be rounded or out of date;account.followers_countis the exact, live number. Both are shipped side by side โ never merged into one value.emailvsaccount.bio_email. The top-levelemailis 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_emailis 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_textis a rounded string (e.g."58 Posts"), not an exact integer โ no exact post count is exposed on the public profile page.networkships as"Instagram.com"(capital I), inherited unchanged from the base actor for backward compatibility โ cosmetic only, does not affect matching onplatform/url.dedupeByUsernamede-duplicates within a single run only, not across separate runs.maxEmailsis applied per keyword, not as a run-wide total โ a run with 10 keywords at the default can produce up to 10รmaxEmailsrows.proxyConfigurationis accepted but not used to route the search itself โ Google searches always go through Apify'sGOOGLE_SERPproxy group, and profile-page fetches always go through a residential proxy, regardless of what's set here.platformandenginecurrently 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.