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

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. Extractionbusiness_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: falseDirect 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