Instagram Email & Lead Scraper API
Our Instagram email and lead scraper reads a public business profile and returns its published contact block as JSON: business email, phone, category, external link, and address when the account exposes them, alongside the handle, name, and bio for lead enrichment.
Why Instagram Email & Lead data hides behind a login
Instagram does not publish account emails through any public API, and only some business profiles expose a contact button that a logged-out visitor can see. Even then the contact block is often stripped for large accounts, so honest coverage means returning the fields when they are present and a clear null when Instagram withholds them.
Your first Instagram Email & Lead Scraper API call
curl "https://api.instagramscraperapi.com/api/v1/instagram/email?username=natgeo&api_key=$API_KEY" import requests, os
BASE = "https://api.instagramscraperapi.com"
API_KEY = os.environ["API_KEY"]
# Pass a username (no leading @) or a full profile URL.
data = requests.get(
f"{BASE}/api/v1/instagram/email",
params={"username": "natgeo", "api_key": API_KEY},
timeout=30,
).json()
# email / phone populate only when the profile exposes a public contact block.
if data["email"]:
print(data["username"], "->", data["email"], data.get("phone"))
else:
print(data["username"], "has no public contact block exposed")
print(data["full_name"], "|", data["biography"]) Parameters
| Parameter | Required | Default | Notes |
|---|---|---|---|
username | required | - | The Instagram username without the leading @, e.g. natgeo. Required unless you pass url. |
url | optional | - | A full profile URL such as https://www.instagram.com/natgeo/. The handle is parsed out of the path. One of username or url is required. |
country | optional | US | Two-letter country code for the egress region. Instagram serves the contact block only to residential US IPs logged-out, so US is the default. |
api_key | required | - | Your API key, passed as a query parameter. Get one free at signup. |
What the Instagram Email & Lead Scraper API hands back
{
"username": "natgeo",
"url": "https://www.instagram.com/natgeo/",
"email": null,
"phone": null,
"category": null,
"external_url": null,
"address": null,
"is_business": null,
"full_name": "National Geographic",
"biography": "Step into wonder and find your inner explorer with National Geographic",
"is_verified": true,
"source": "instagram",
"data_source": "embedded"
} | Field | Type | Description |
|---|---|---|
username | string | The profile handle the contact data belongs to. |
url | string | The canonical profile URL. |
email | string | The business or public email when the profile exposes one, or an address found in the bio text. Null when no public email is available. |
phone | string | The business or public phone number when exposed, otherwise null. |
category | string | The business or creator category label when present, otherwise null. |
external_url | string | The website link in the bio when present, otherwise null. |
address | object | A parsed address (street_address, city_name, zip_code, region_name, country_code) when the profile publishes one, otherwise null. |
is_business | boolean | True for a business or professional account, false otherwise, or null when Instagram does not ship the flag logged-out. |
full_name | string | The account display name, useful for lead enrichment. |
biography | string | The bio text, which sometimes carries a plaintext email we surface in the email field. |
is_verified | boolean | True when the account carries the blue verified badge. |
data_source | string | embedded when the fields came from the profile page, web_profile_info when enriched from the authorized profile API hop. |
Where teams point Instagram data
B2B lead enrichment
Local business outreach
Creator partnership sourcing
CRM hygiene
Coverage screening
Directory building
How our Instagram Email & Lead Scraper API stays reliable
We read the same public profile a logged-out visitor sees and pull the structured contact fields a business account chooses to expose, with an optional authorized hop for accounts that serve their contact block only through the profile API. There is no Facebook app and no scraping of private data: fields that Instagram gates come back as an honest null.
Structured contact fields
Bio email fallback
Authorized enrichment hop
Residential proxies and anti-bot
Honest nulls
Lead context included
Instagram Email & Lead Scraper API weighed against the Instagram API and DIY
| Our API | DIY (requests / headless) | Instagram Graph API | |
|---|---|---|---|
| Public contact fields | email, phone, category, url, address when exposed | You locate them in a hydrated blob | No public email endpoint |
| Input | Username or profile URL | Manual page fetch and parse | Owned account id only |
| Setup | API key only | Residential proxies, headless browser, parsers | Facebook app, linked Business account, app review |
| Honest gaps | Null when Instagram withholds a field | Silent gaps or wrong guesses | Not applicable for third parties |
| Anti-bot and proxies | Built in, residential US | You build and maintain it | Not applicable |
| Output | Validated JSON contact record | Raw HTML you parse yourself | JSON, scoped to your assets |
Pay only for what you pull
| Plan | Price | Best for |
|---|---|---|
| Free | 1,000 requests | Testing and small jobs |
| Pro | $0.60 / 1k | Production workloads |
| Pay-as-you-go | $0.90 / 1k | Spiky or one-off volume |
Median response 2.6s. You only pay for successful requests.
FAQ
An Instagram email and lead scraper is a tool that reads a public business profile and returns the contact details the account chooses to publish. Our endpoint takes a username or profile URL and returns the business email, phone, category, external link, and address when they are exposed, plus the name, bio, and verified flag for lead context, all as JSON from one request.
No, and any tool that claims to is overstating it. Instagram has no public email endpoint. Emails come from the contact block a business or professional account opts to expose, and Instagram strips that block for many large accounts to logged-out visitors. The sample on this page shows natgeo returning identity fields with email as null for exactly that reason. When a profile does publish a public email, we return it; when it does not, we return null.
Business and professional accounts that keep a public contact button, most often smaller and regional businesses and creators, are the ones that expose an email, phone, category, or address logged-out. Large brand accounts frequently have those fields withheld. If a profile also drops a plaintext email into its bio, we surface that in the email field as a fallback.
Send a request per handle to the instagram/email endpoint with your API key. We route through residential IPs, handle anti-bot checks, retry on failure, and parse the contact block, returning a clean JSON record per profile. Run your list of handles through it and keep the rows where email, phone, or external_url came back populated. Failed requests are not billed.
No. You only need an instagramscraperapi key passed as api_key. The official Instagram Graph API has no endpoint for arbitrary public account emails at all, and it requires a Facebook app, a linked Business account, and app review even for the data it does return, which is limited to accounts you own or manage.
Scraping publicly available business contact details is broadly permitted in many jurisdictions, and US courts have declined to treat collecting public profile data as unauthorized access. That said, a business email is often personal data, so laws such as GDPR and CCPA still apply to how you store and use it: you need a lawful basis, must honor deletion and opt-out requests, and must follow anti-spam rules like CAN-SPAM when you send outreach. Instagram's terms also restrict automated collection. Use the endpoint for lawful, consented outreach and take your own legal advice.