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
11 days 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