Instagram Email Scraper
Pricing
from $2.00 / 1,000 email results
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
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
0
Monthly active users
a month ago
Last modified
Categories
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
- Discovery — Either from direct
usernamesor via Google SERP (site:instagram.com {keyword}) - Scraping — Instagram's internal web API (
i.instagram.com/api/v1/users/web_profile_info/) - Extraction —
business_emailfield first, regex fallback on biography text
Input
| Field | Type | Default | Description |
|---|---|---|---|
usernames | string[] | [] | Direct Instagram usernames to scrape |
keywords | string[] | [] | Keywords to Google-search for profiles |
location | string | "" | Optional location filter (keyword mode) |
maxEmails | integer | 100 | Stop after collecting this many unique emails |
customDomains | string[] | ["@gmail.com"] | Only collect emails matching these domains |
engine | string | "cost-effective" | "cost-effective" (httpx) or "legacy" (not implemented) |
proxyConfiguration | object | {} | Apify proxy config — see below |
Proxy Configuration
| Setting | Value | Effect |
|---|---|---|
useApifyProxy: false | — | Direct connection (Instagram 429s, Google blocks) |
useApifyProxy: true, "apifyProxyGroups": ["RESIDENTIAL"] | Free tier | Instagram 403s, Google 403s |
useApifyProxy: true, "apifyProxyGroups": ["GOOGLE_SERP"] | Paid | ✅ Google works, Instagram varies |
| Custom proxy via env | APIFY_PROXY_PASSWORD | Bypasses 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
# Localpip install -r requirements.txtpython -m src# Apifyapify runapify 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_infoAPI withx-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