Instagram Email Scraper avatar

Instagram Email Scraper

Pricing

from $2.00 / 1,000 email results

Go to Apify Store
Instagram Email Scraper

Instagram Email Scraper

Discovers Instagram profiles by keyword and extracts email addresses from public bios.

Pricing

from $2.00 / 1,000 email results

Rating

0.0

(0)

Developer

Meherab Hossain

Meherab Hossain

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

11 days ago

Last modified

Share

๐Ÿ“ธ Instagram Email Scraper

An Apify Actor that discovers Instagram profiles and extracts email addresses from public profile bios.

Two Discovery Modes

Mode 1: Direct Usernames (โœ… Works out of the box)

Provide Instagram usernames directly โ€” no Google search needed:

{
"usernames": ["natgeo", "nasa", "bbcnews"],
"maxEmails": 100
}

Scrapes each profile via Instagram's public API and extracts emails from bios + business_email field.

Mode 2: Keyword Discovery via Google (๐Ÿ”„ Requires paid Apify proxy)

Provide keywords to Google-search for Instagram profiles:

{
"keywords": ["photographer", "founder"],
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["GOOGLE_SERP"]
}
}

Requires an Apify plan with access to the GOOGLE_SERP proxy group (paid). Free-tier Apify proxies are blocked by Google.

How It Works

  1. Discovery โ€” Either from direct usernames or via Google SERP (site:instagram.com {keyword})
  2. Scraping โ€” Instagram's internal web API (i.instagram.com/api/v1/users/web_profile_info/)
  3. Extraction โ€” business_email field first, regex fallback on biography text

Input

FieldTypeDefaultDescription
usernamesstring[][]Direct Instagram usernames to scrape
keywordsstring[][]Keywords to Google-search for profiles
locationstring""Optional location filter (keyword mode)
maxEmailsinteger100Stop after collecting this many unique emails
customDomainsstring[]["@gmail.com"]Only collect emails matching these domains
enginestring"cost-effective""cost-effective" (httpx) or "legacy" (not implemented)
proxyConfigurationobject{}Apify proxy config โ€” see below

Proxy Configuration

SettingValueEffect
useApifyProxy: falseโ€”Direct connection (Instagram 429s, Google blocks)
useApifyProxy: true, "apifyProxyGroups": ["RESIDENTIAL"]Free tierInstagram 403s, Google 403s
useApifyProxy: true, "apifyProxyGroups": ["GOOGLE_SERP"]Paidโœ… Google works, Instagram varies
Custom proxy via envAPIFY_PROXY_PASSWORDBypasses Apify proxy entirely

Bottom line: For Instagram scraping, use no proxy or a personal residential proxy. For Google keyword discovery, you need the GOOGLE_SERP proxy group (paid Apify plan) or bring your own.

Output

[
{
"email": "contact@company.com",
"username": "company",
"full_name": "Company Inc",
"bio": "Building the future | contact@company.com",
"bio_link": "https://company.com",
"followers": 15000,
"is_verified": true,
"category": "Business",
"profile_url": "https://www.instagram.com/company/",
"keyword": "startup",
"source": "business_email"
}
]

Each profile yields one result object. source is "business_email" (from Instagram's API field) or "bio_regex" (extracted from bio text).

Running

# Local
pip install -r requirements.txt
python -m src
# Apify
apify run
apify push

Testing

pytest tests/ -v # 74 tests, no network required

Rate Limiting

Instagram rate-limits aggressively from datacenter IPs (429). The Actor retries with exponential backoff: 5s โ†’ 15s โ†’ 30s โ†’ 60s โ†’ 120s. For production use, configure a residential proxy or use direct usernames with spacing.

Technical Notes

  • Uses Instagram's web_profile_info API with x-ig-app-id: 936619743392459
  • Mobile Android User-Agent for lower rate-limit footprint
  • No login or session required
  • Ignores post URLs, reel URLs, and non-profile Instagram paths
  • Deduplicates by email address across keywords