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

5

Total users

0

Monthly active users

a month 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