Instagram B2B Email Scraper & Phone Leads avatar

Instagram B2B Email Scraper & Phone Leads

Pricing

$19.99/month + usage

Go to Apify Store
Instagram B2B Email Scraper & Phone Leads

Instagram B2B Email Scraper & Phone Leads

πŸ“Έ Instagram B2B Email Scraper (instagram-b2b-email-scraper) extracts verified business emails & contact info from Instagram profiles, bios and linked sites. 🎯 Filter by hashtag, niche, location. πŸš€ Ideal for B2B lead gen, outreach & sales. βš™οΈ CSV/CRM export & email validation.

Pricing

$19.99/month + usage

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

5 days ago

Last modified

Share

Instagram Scraper β€” Business Emails, Phone Leads and Verified Profiles

Instagram B2B Email Scraper & Phone Leads finds business emails and phone numbers from Instagram profiles, posts, and reels by running targeted Google searches β€” no Instagram login required. Each lead carries the matched email and/or phone number, the keyword and B2B pattern that surfaced it, and optionally a fully enriched Instagram profile (follower count, business category, verified status, bio) plus related/lookalike profiles. It's built for B2B sales teams, outreach agencies, and lead-generation pipelines that need real, dial-code-targeted contact data at scale.

What is Instagram B2B Email Scraper & Phone Leads?

Instagram B2B Email Scraper & Phone Leads is an Apify Actor that discovers Instagram-linked business contacts through Google Search rather than logging into Instagram directly β€” no Instagram account or session cookie is needed. Key capabilities:

  • Search by keyword across Instagram profiles, posts, and reels via Google, with an optional geographic search modifier
  • Collect emails, phone numbers, or leads that have both, controlled by contactTypes
  • Run in B2B mode (corporate email search patterns, e.g. "email for bookings", "contact @ domain") or personal mode (Gmail/Outlook domain filtering)
  • Target and filter phone numbers by country name or dial code
  • Optionally enrich each lead with its real, live Instagram profile data (followers, business account flag, category, verified status, bio, external URL) and a list of related/lookalike profiles
  • Smart proxy rotation with automatic tier escalation for stable Google Search access

What data can I extract with Instagram B2B Email Scraper & Phone Leads?

FieldExample ValueUse Case
email"bookings@studiofit.com"The primary contact target for outreach
phoneNumber"+442071234567"Direct phone contact, normalized and optionally country-filtered
dialCode"+44"Confirm which dial code was applied for filtering
country"United Kingdom"Confirm the resolved country target for this run
keyword"fitness coach"Identify which search term surfaced this lead
pattern"email_for_bookings"Identify which B2B search pattern found this lead (B2B mode only)
leadType"b2b"Distinguish B2B corporate leads from personal-domain leads
title"Studio Fit (@studiofitofficial) β€’ Instagram photos"The Google result title for the source page
url"https://www.instagram.com/studiofitofficial/"The Instagram profile, post, or reel the lead came from
description"1,204 Likes, 32 Comments..."The Google SERP snippet text the match was extracted from
network"Instagram.com"Confirm the source platform
location"London"Confirm the geographic search modifier applied, if any
scraped_at"2026-07-26T14:02:11Z"Record when this lead was collected
followersCount18420Gauge account size and outreach potential (enrichment only)
isBusinessAccounttrueFilter for accounts flagged as business by Instagram itself
businessCategoryName"Gym/Physical Fitness Center"Segment leads by Instagram's own business category
verifiedfalsePrioritize verified accounts if desired
bio"Personal training studio in London"Qualify the lead's stated business description
externalUrl"https://studiofit.com"Cross-reference the lead's own website
relatedProfiles[{"username": "studiofit_east", "fullName": "Studio Fit East", "isVerified": false, "isPrivate": false, "profilePicUrl": "..."}]Expand one qualified lead into adjacent lookalike leads

When enrichProfile is on, every lead's Instagram username is resolved (directly from a profile URL, or by fetching a post/reel's page to find its owner) and the Actor makes one live call to Instagram's public web_profile_info endpoint β€” the same endpoint Instagram's own profile pages use β€” to pull followersCount, isBusinessAccount, businessCategoryName, verified, bio, and externalUrl. relatedProfiles (up to maxRelatedProfiles) comes from that same response's related/lookalike-profile edge, at no extra request cost beyond the one enrichment call. This is real Instagram data, not inferred: if the username can't be resolved or the enrichment call genuinely fails, every enrichment field is returned as null and relatedProfiles as an empty array β€” never a guessed value. Enrichment is off by default and adds one extra request per lead.

Country, location and B2B pattern targeting

country accepts a country name or dial code (e.g. "United Kingdom (+44)" or just "+91"); when it resolves to a dial code, phone matches are both normalized and filtered to that code. searchLocation adds a geographic term to the underlying Google query (e.g. "London"). In B2B mode, b2bSearchPatterns selects which named corporate-email search patterns run (leave empty to run all of them); in personal mode, personalDomainAllowlist restricts results to specific email domains.

Why not build this yourself?

Instagram's own Graph API requires a Business or Creator account and app review for any profile data access, and has no endpoint for keyword-based discovery of contact information across arbitrary public profiles, posts, or reels β€” that isn't a gap this Actor works around lightly. Building an equivalent tool means handling Google SERP HTML parsing across changing result-block layouts, a three-tier proxy escalation ladder (direct β†’ datacenter β†’ residential) for when Google rate-limits or blocks a request, country/dial-code-aware phone number parsing and normalization, and β€” for profile enrichment β€” reproducing Instagram's own session-bootstrap flow (extracting a real APP_ID and CSRF token from the public profile HTML before calling the web_profile_info endpoint). All of that is implemented and already handled in this Actor's source.

How to use data extracted from Instagram?

B2B sales and lead generation

Run targetKeywords for your ideal customer profile (e.g. "yoga studio", "personal trainer") with collectionMode set to b2b and contactTypes set to both to get leads with both an email and phone number ready for a cold-outreach sequence, filtered to your target market with country. Enable enrichProfile to pull followersCount and isBusinessAccount so your sales team can prioritize the highest-potential leads first.

Marketing and outreach agencies

Agencies running lead generation for multiple clients can run one keyword set per client and use b2bSearchPatterns to target the specific corporate-contact patterns that convert best for that client's vertical (e.g. email_for_bookings for service businesses), then export email, phoneNumber, and businessCategoryName directly into that client's CRM import template.

Market and lead-density research

Run the same keyword across multiple country values to compare how many qualified leads (with isBusinessAccount: true and a resolved businessCategoryName) exist per market, using maxContactLeads to cap each market's sample size consistently for a fair comparison.

AI agents and automated pipelines

An agent can call this Actor as a lead-discovery tool inside a larger outreach pipeline β€” passing a target niche as targetKeywords, filtering the returned dataset on contactTypes and verified, and feeding qualified leads directly into a CRM or email-sequencing API without manual review of every raw Google result.

πŸ”Ό Input sample

ParameterRequiredTypeDescriptionExample Value
targetKeywordsNoarraySearch terms for Instagram via Google (e.g. marketing, fitness, real estate)["fitness coach"]
contactTypesNostring (enum)email (default), phone, or both (require both on the same lead)"both"
countryNostringCountry name and/or dial code to target and filter phone matches by"United Kingdom (+44)"
collectionModeNostring (enum)b2b (default, corporate email patterns) or personal (Gmail/Outlook domain filter)"b2b"
personalDomainAllowlistNoarrayPersonal mode only: domains to filter results to["@gmail.com", "@outlook.com"]
b2bSearchPatternsNoarrayB2B mode only: named search patterns to run; empty = all patterns["email_for_bookings", "bio_email_basic"]
contactSourcePlatformNostring (enum)Target platform; only "Instagram.com" is supported"Instagram.com"
searchLocationNostringGeographic filter added to the search query"London"
maxContactLeadsNointeger (1-50,000)Maximum leads to collect across all keywords/patterns10 (default)
maxLeadsPerPatternNointeger (1-5,000)Cap leads per B2B search pattern (B2B mode only)15 (default)
smartProxyRotationNobooleanEnable Apify proxy with automatic tier escalationtrue (default)
enrichProfileNobooleanFetch each lead's real live Instagram profile plus related profilesfalse (default)
maxRelatedProfilesNointeger (0-50)Max lookalike profiles per enriched lead5 (default)
proxyOverrideNoobjectAdvanced proxy configuration override{"useApifyProxy": true}
{
"targetKeywords": ["fitness coach", "personal trainer"],
"contactTypes": "both",
"country": "United Kingdom (+44)",
"collectionMode": "b2b",
"maxContactLeads": 100,
"enrichProfile": true
}

Common pitfall: contactTypes: "both" requires a lead to have both an email and a phone number on the same Instagram post/profile β€” this narrows results significantly compared to "email" or "phone" alone, since most public posts surface only one contact method at a time.

πŸ”½ Output sample

Output is typed, normalized JSON β€” one row per lead (exportable as JSON, CSV, or Excel from the dataset, or via API).

{
"network": "Instagram.com",
"keyword": "fitness coach",
"title": "Studio Fit (@studiofitofficial) β€’ Instagram photos",
"description": "1,204 Likes, 32 Comments - Studio Fit on Instagram: \"Book your free trial! bookings@studiofit.com\"",
"url": "https://www.instagram.com/studiofitofficial/",
"email": "bookings@studiofit.com",
"phoneNumber": "+442071234567",
"dialCode": "+44",
"country": "United Kingdom",
"pattern": "email_for_bookings",
"leadType": "b2b",
"location": "London",
"scraped_at": "2026-07-26T14:02:11Z",
"followersCount": 18420,
"isBusinessAccount": true,
"businessCategoryName": "Gym/Physical Fitness Center",
"verified": false,
"bio": "Personal training studio in London. DM for bookings.",
"externalUrl": "https://studiofit.com",
"relatedProfiles": [
{
"username": "studiofit_east",
"fullName": "Studio Fit East",
"isVerified": false,
"isPrivate": false,
"profilePicUrl": "https://scontent.cdninstagram.com/..."
}
]
}

All 20 fields shown above are the Actor's real dataset columns β€” this is the full output shape, not a subset.

How do you filter and target specific leads?

collectionMode is the category-versus-query axis here: b2b runs named corporate-contact search patterns (b2bSearchPatterns β€” leave empty to run all of them, or name specific ones like email_for_bookings or contact_at_domain for a narrower, higher-relevance sweep), while personal runs a Gmail/Outlook-style domain search filtered by personalDomainAllowlist. Scope precision comes from country (name or dial code β€” resolving it also filters and normalizes phone matches to that code) combined with searchLocation for a city/region-level narrowing of the underlying Google query. The closest thing to a quality threshold is contactTypes: set to "both" it requires a lead to carry both a matched email and phone number on the same source, a much stricter bar than either alone; enabling enrichProfile adds a second, verified quality signal β€” isBusinessAccount and verified come directly from Instagram's own profile data, not inferred from the search snippet. Volume is controlled by maxContactLeads (the run-wide cap) and, in B2B mode, maxLeadsPerPattern (a per-pattern cap so one high-yield pattern doesn't crowd out the others).

{ "targetKeywords": ["yoga studio"], "collectionMode": "b2b", "b2bSearchPatterns": ["email_for_bookings"], "contactTypes": "both", "country": "+1" }
{ "targetKeywords": ["freelance photographer"], "collectionMode": "personal", "personalDomainAllowlist": ["@gmail.com"], "maxContactLeads": 50 }
{ "targetKeywords": ["real estate agent"], "searchLocation": "Miami", "enrichProfile": true, "maxRelatedProfiles": 10 }

▢️ Want to try other Instagram scrapers?

Scraper NameWhat it extracts
Instagram Profile ScraperFull public profile details for a known username or URL
Instagram Related Person ScraperRelated/lookalike profile networks for a given account
Instagram Phone Number ScraperPhone-number-focused lead discovery from Instagram content
Instagram Hashtag ScraperPosts and profiles discovered by hashtag
LinkedIn B2B Email ScraperCorporate email and phone leads sourced from LinkedIn
Alibaba Email Scraper & Trade Assurance DetailsSupplier contact leads sourced from Alibaba

How to extract Instagram data programmatically

Every run is a standard Apify Actor call β€” one API request with your token, JSON input, JSON leads back. No Instagram login is required.

Python example

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run_input = {
"targetKeywords": ["fitness coach"],
"contactTypes": "both",
"country": "United Kingdom (+44)",
"maxContactLeads": 50,
}
run = client.actor("<YOUR_USERNAME>/instagram-b2b-email-scraper-phone-leads").call(run_input=run_input)
for lead in client.dataset(run["defaultDatasetId"]).iterate_items():
print(lead["email"], lead["phoneNumber"], lead["keyword"])

Export to spreadsheets or CRM

Export the dataset directly as CSV or Excel, then map email and phoneNumber to your CRM's contact fields, keyword/pattern to a lead-source column, and businessCategoryName/isBusinessAccount (when enrichment is on) to a segmentation column for outreach targeting.

Discovered emails and phone numbers are personal or business-contact data, so GDPR and CCPA obligations apply to how you store and use them β€” the same as any lead-generation dataset containing individual contact details. Instagram's own bio/profile fields are public by design (visible to any logged-out visitor), but downstream storage and use of contact data for marketing purposes should follow applicable data-protection and anti-spam rules (e.g. CAN-SPAM, GDPR lawful-basis requirements). Consult legal counsel for commercial applications involving bulk storage of personal contact data.

❓ FAQ

Does this actually extract phone numbers, not just emails?

Yes β€” phoneNumber extraction runs alongside email extraction on every request, and contactTypes lets you collect phone numbers only, emails only, or require both on the same lead. This is a genuine regex-and-normalization phone parser, not a repurposed email-only tool.

How accurate is the enriched profile data?

followersCount, isBusinessAccount, verified, bio, and externalUrl come directly from Instagram's own public web_profile_info endpoint at request time β€” the same data Instagram's own profile page displays. If the lead's username can't be resolved or the enrichment call fails, every enrichment field returns null rather than a guessed value.

How many leads can I get per run?

Set maxContactLeads (1-50,000, default 10) for the overall run cap, and maxLeadsPerPattern (1-5,000, default 15) to cap how many leads any single B2B pattern can contribute.

Do I need an Instagram account to use this?

No. Lead discovery works entirely through Google Search results, and profile enrichment uses Instagram's public, unauthenticated web_profile_info endpoint β€” no Instagram login or session cookie is required anywhere in the pipeline.

What's the difference between B2B mode and personal mode?

b2b mode runs corporate-contact search patterns (e.g. "email for bookings") aimed at business accounts; personal mode instead filters results to specific consumer email domains you supply via personalDomainAllowlist (e.g. Gmail, Outlook).

Can I target leads by country?

Yes β€” set country to a country name and/or dial code (e.g. "United Kingdom (+44)" or just "+91"). When a dial code resolves, phone number matches are both normalized to that format and filtered to leads matching that code.

Does Instagram B2B Email Scraper & Phone Leads work with Claude, ChatGPT, and AI agent frameworks?

It has no dedicated MCP server registration in this Actor's current setup, but it is callable as a standard Apify API endpoint by any agent framework that can make an authenticated HTTP request and parse JSON.

How does this compare to other Instagram lead-generation scrapers?

No independently verifiable competitor listing could be confirmed at the time of writing, so no specific comparison is made here. This Actor's distinguishing combination is dial-code phone targeting plus optional real (not inferred) profile enrichment in the same run.

No β€” relatedProfiles is extracted from the same web_profile_info response used for enrichment, so it adds no additional request beyond the one enrichment call per lead, when enrichProfile is enabled.

Conclusion

Instagram B2B Email Scraper & Phone Leads turns keyword-driven Google discovery into structured, dial-code-targeted contact leads β€” with genuine phone extraction, optional real Instagram profile enrichment, and related-profile expansion, all computed without ever logging into Instagram. It's built for sales teams, outreach agencies, and automated pipelines that need verified, exportable contact data at scale. Start a run with your target keywords and country, and add enrichProfile when you need to qualify leads before outreach.