๐ธ Instagram B2B Email Scraper
Pricing
from $4.99 / 1,000 results
๐ธ Instagram B2B Email Scraper
๐ง Extract verified B2B business emails from Instagram posts, reels & profiles via Google Search. ๐ Keyword-driven lead generation with smart proxy support.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
Scraper Engine
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Instagram B2B Email Scraper โ Emails, Phones & Profiles
Instagram B2B Email Scraper finds public corporate email addresses on Instagram by running keyword-driven Google Search patterns across posts, reels, and profiles, then returns each lead's email, phoneNumber, businessCategoryName, and followersCount as clean, structured JSON โ no HTML parsing or manual copy-paste required. Optional add-ons enrich every lead with live Instagram profile data and related/lookalike accounts. Run it directly on Apify to start building a B2B lead list in minutes.
What is Instagram B2B Email Scraper?
Instagram B2B Email Scraper is an Apify Actor that searches Google for public Instagram posts, reels, and profiles matching your keywords, then extracts corporate-style email addresses (and, optionally, phone numbers and live profile data) from the search-result snippets. It returns every lead as a structured JSON record with consistent field names across runs. No Instagram account or login is required โ the Actor works entirely against public Google Search results and Instagram's public, unauthenticated web_profile_info endpoint. It's built for B2B sales and business-development teams, growth marketers, and developers automating lead-generation pipelines.
What Instagram business email data is publicly available to scrape?
Instagram publicly exposes a profile's basic identity and business details to any visitor, but keeps deeper account activity behind a login wall. The table below covers what this Actor can reach versus what stays gated:
| Data Category | Publicly Available | Restricted behind login wall |
|---|---|---|
| Username, bio, and external link | Yes | โ |
| Follower count and business category | Yes (via the public web_profile_info endpoint) | Detailed audience analytics โ login |
| Verified badge / business-account flag | Yes | โ |
| Contact email or phone posted in a bio or caption | Yes, when the account has published it | Contact info the account hasn't made public |
| Post/reel captions indexed by Google | Yes | Full comment threads โ login |
| Related/lookalike profile suggestions | Partial, via the same public endpoint | Personalized "suggested for you" results โ login |
| Full follower/following lists | No | Complete lists โ login |
| Direct messages and Stories | No | Always โ login |
Instagram B2B Email Scraper only returns publicly visible data โ what any visitor or Google's indexed snapshot already sees. Nothing behind a login wall.
What data can I extract with Instagram B2B Email Scraper?
Every run returns lead and search metadata for each match, plus two opt-in layers โ phone/country data and full profile enrichment โ that add extra fields when switched on.
| Field | Description |
|---|---|
network | The platform searched โ always Instagram.com (or the value of the platform input) |
keyword | The keyword that produced this lead |
pattern | The B2B search pattern that matched (B2B mode only; absent in personal mode) |
leadType | b2b or personal, matching the run's mode |
title | The Google result's title (typically the Instagram page/post title) |
url | The Instagram URL of the matched post, reel, or profile |
description | The Google result snippet text the email/phone was extracted from |
location | The location filter applied to the search, if any |
scraped_at | UTC timestamp when the lead was collected |
email | The extracted email address |
phoneNumber | The extracted, normalized phone number (null if extractPhone is off) |
dialCode | Resolved country dial code used to normalize phoneNumber (null if extractPhone is off) |
country | Country name/label applied to phone matching (null if extractPhone is off) |
followersCount | Follower count from the live profile (null unless enrichProfile is on) |
isBusinessAccount | Whether Instagram flags the account as a business account (null unless enriched) |
businessCategoryName | Instagram's business category label, e.g. "Health/Beauty" (null unless enriched) |
verified | Instagram verified-badge status (null unless enriched) |
bio | The account's live biography text (null unless enriched) |
externalUrl | The account's linked external website (null unless enriched) |
relatedProfiles | Lookalike/related profiles surfaced by the same enrichment call ([] unless enriched) |
Lead & search metadata
network, keyword, pattern, leadType, title, url, description, location, scraped_at โ these identify where a lead came from and which search produced it.
Contact fields
email, phoneNumber, dialCode, country โ the extracted contact details, with phone numbers normalized to a resolved dial code when extractPhone is on.
Profile enrichment fields (opt-in)
followersCount, isBusinessAccount, businessCategoryName, verified, bio, externalUrl, relatedProfiles โ populated only when enrichProfile is on; otherwise null/[] so it's clear the field was never attempted, not fabricated.
๐ค Add-on: Need additional Instagram data?
If you need a full standalone profile pull rather than the enrichment subset attached to each lead here, run Instagram Profile Scraper. To expand a lead's related-profile network beyond the per-lead cap, use Instagram Related Person Scraper โ the same public endpoint this Actor's relatedProfiles field draws from. To discover more leads by hashtag instead of Google keyword patterns, pair this with Instagram Hashtag Scraper, or use Instagram Mentions Scraper to find accounts that have tagged or mentioned a brand as inbound leads.
How does Instagram B2B Email Scraper differ from the official Instagram API?
Meta's Instagram Graph API is built for managing your own connected Business/Creator account, not for discovering contact emails on accounts you don't own โ there is no endpoint that searches or returns third-party business emails. Instagram B2B Email Scraper instead discovers leads across any public Instagram account already indexed by Google.
| Feature | Instagram Graph API | Instagram B2B Email Scraper |
|---|---|---|
| Data scope | Your own connected Business/Creator account(s) only | Any public Instagram account indexed by Google |
| Email/contact discovery | No endpoint returns third-party contact emails | Purpose-built extraction of emails from public bios and captions |
| Access requirements | Meta App Review + a Business/Creator account linked to a Facebook Page | No Instagram login, no app approval |
| Setup time | App Review and account linking before any call succeeds | Provide keywords and start a run |
| Output shape | Raw Graph API JSON per Meta's evolving schema | Normalized JSON with consistent field names across runs |
| Third-party data access | Not accessible | Accessible for any public account |
Use the Graph API when you're managing insights or publishing for your own connected account. Use Instagram B2B Email Scraper when you need to discover and contact leads on accounts you don't manage.
How to use Instagram B2B Email Scraper
Instagram B2B Email Scraper runs as an Apify Actor โ no separate signup or API key setup beyond an Apify account.
- Open the Actor's page in the Apify Console (or find it via the Apify Store search).
- Provide the required input:
keywordsโ an array of at least one industry, niche, or topic. - Optionally set
mode,patterns,location,maxEmails,enrichProfile, andextractPhoneto shape the run. - Start the run.
- Open the Dataset tab to view, or export the results as JSON or CSV.
How to scale to bulk Instagram business email extraction
keywords accepts an array, so one run can search any number of keywords โ each keyword runs against every selected B2B pattern (up to all 29). Raise maxEmails (up to 50,000) to lift the total-lead cap, and maxEmailsPerPattern to control how many leads any single pattern contributes per keyword. For very large lead lists, split keywords across multiple runs rather than one oversized run.
What can you do with Instagram business email data?
- A B2B sales rep prospecting yoga studios uses
emailandbusinessCategoryNameto build a niche outreach list without opening each profile manually. - A growth marketer running a city-specific campaign uses
locationandfollowersCountto prioritize outreach to mid-size local accounts. - A partnerships manager vetting collaborators uses
isBusinessAccountandverifiedto filter for legitimate professional accounts before pitching. - An agency building a cold-call list uses
phoneNumberanddialCodeto segment leads by country before dialing. - An AI agent building a lead-enrichment pipeline feeds
bio,externalUrl, andrelatedProfilesinto an LLM to draft personalized outreach copy and expand a prospect list via lookalike accounts.
How does Instagram B2B Email Scraper handle rate limits and blocking?
The Actor fetches Google Search results and Instagram's public profile endpoint using impit browser impersonation (a real Chrome fingerprint), so requests aren't sent as a bare script client. Google SERP requests escalate through three tiers on a block โ direct connection, then a GOOGLE_SERP datacenter proxy group, then a residential proxy group โ with jittered delays between attempts. Instagram profile-enrichment requests use a separate direct-then-residential escalation path, since the SERP-tuned datacenter group doesn't reliably reach instagram.com. A response is flagged as blocked using a heuristic that combines HTTP status and body size with known block phrases, avoiding false positives on large, legitimate results pages. Each blocked request retries up to a bounded number of attempts per tier before that query is skipped with a warning rather than crashing the run. If an error occurs partway through a run, any leads already collected are kept and pushed to the dataset rather than discarded. The useProxy input can force a direct-only connection with all proxy tiers disabled, if you supply your own network path instead.
โฌ๏ธ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
keywords | Yes | array | Industries, niches, or topics to search for on Instagram via Google (e.g. marketing, fitness, real estate). Every keyword runs against every selected pattern. | ["marketing agency", "yoga studio"] |
mode | No | string | Extraction mode. b2b = corporate email patterns (contact@, info@, bookings, careersโฆ), filters out Gmail/Yahoo/Outlook. personal = broader discovery, optionally filtered to customDomains. Default: b2b. | "b2b" |
customDomains | No | array | Personal mode only: keep only emails ending in one of these domains. Leave empty to keep every personal-mode email found. Ignored in B2B mode. | ["@gmail.com", "@outlook.com"] |
patterns | No | array | B2B mode only: which of the 29 corporate-email search patterns to run (keys from b2b_patterns.py, e.g. email_for_bookings, bio_email_basic). Leave empty to run all 29 patterns. | ["email_for_bookings", "contact_at_domain"] |
platform | No | string | Target social platform for email discovery. Default: Instagram.com. | "Instagram.com" |
location | No | string | Geographic filter added to every search query for hyper-local prospecting. Leave empty for global results. Default: "". | "London" |
maxEmails | No | integer | Hard cap on the total number of leads to collect across every keyword and pattern combined. Default: 10. Minimum 1, maximum 50000. | 200 |
maxEmailsPerPattern | No | integer | Cap on how many leads a single B2B search pattern can contribute per keyword (B2B mode only). Default: 15. Minimum 1, maximum 5000. | 25 |
enrichProfile | No | boolean | Fetch each lead's live Instagram profile (followers, business flag, category, verified, bio, external URL) via the public web_profile_info endpoint, plus related profiles. Adds one extra request per lead. Default: false. | true |
maxRelatedProfiles | No | integer | Maximum number of lookalike/related profiles to capture per enriched lead. Only applies when enrichProfile is on. Default: 5. Minimum 0, maximum 50. | 5 |
extractPhone | No | boolean | Also scan each Google result snippet for a phone number and normalize it with a country dial code. Default: false. | true |
country | No | string | Country name and/or dial code to target phone numbers by. When a dial code resolves, matches are normalized to it and filtered to only that dial code. Only used when extractPhone is on. Default: "". | "United Kingdom (+44)" |
useProxy | No | boolean | Enable smart 3-tier proxy escalation (direct โ datacenter โ residential) for Google Search and profile-enrichment requests. Off forces a direct connection only, all tiers disabled. Default: true. | true |
proxyConfiguration | No | object | Optional proxy override when useProxy is enabled. Default: {"useApifyProxy": true, "apifyProxyGroups": ["GOOGLE_SERP"]}. | {"useApifyProxy": true, "apifyProxyGroups": ["GOOGLE_SERP"]} |
Example input
{"keywords": ["marketing agency", "yoga studio", "real estate agent"],"mode": "b2b","customDomains": [],"patterns": ["email_for_bookings", "bio_email_basic", "contact_at_domain", "business_development"],"platform": "Instagram.com","location": "London","maxEmails": 200,"maxEmailsPerPattern": 25,"enrichProfile": true,"maxRelatedProfiles": 5,"extractPhone": true,"country": "United Kingdom (+44)","useProxy": true,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["GOOGLE_SERP"]}}
โฌ๏ธ Output
Results are written to the Actor's dataset as typed, normalized JSON with the same field names on every run, ready to export as JSON, CSV, Excel, or HTML table directly from the Apify Console, or to pull via the API. Billing is pay-per-result: every lead written to the dataset is charged once under the row_result event, with no separate uncharged accounting rows.
Example output
{"network": "Instagram.com","keyword": "yoga studio","title": "Zenflow Yoga Studio (@zenflowyoga) โข Instagram photos and videos","description": "๐ London | ๐ง Classes & retreats | ๐ง bookings@zenflowyoga.com for class bookings and private sessions","url": "https://www.instagram.com/zenflowyoga/","email": "bookings@zenflowyoga.com","phoneNumber": "+442071234567","leadType": "b2b","location": "London","pattern": "email_for_bookings","scraped_at": "2026-07-25T14:32:10Z","dialCode": "+44","country": "United Kingdom","followersCount": 18420,"isBusinessAccount": true,"businessCategoryName": "Health/Beauty","verified": false,"bio": "๐ง London yoga studio | Classes, retreats & teacher training | ๐ง bookings@zenflowyoga.com","externalUrl": "https://zenflowyoga.com","relatedProfiles": [{"username": "primalyogalondon","fullName": "Primal Yoga London","isVerified": false,"isPrivate": false,"profilePicUrl": "https://scontent.cdninstagram.com/v/primalyogalondon_profile.jpg"}]}
How does it work?
For each keyword, the Actor builds a site:instagram.com-scoped Google Search query โ combined with a B2B pattern template in B2B mode, or a plain keyword search in personal mode โ and fetches the results using Chrome browser impersonation rather than a bare script client. It parses the returned result blocks for a title, description, URL, and email, applying the same logic to pull a phone number when extractPhone is on. When enrichProfile is on, it resolves the lead's Instagram username from its URL (or from the post's embedded owner data for post/reel links) and calls Instagram's own public, unauthenticated profile endpoint for live follower, category, and related-profile data. Only publicly visible data is ever returned, and the output field names stay stable across runs regardless of changes to Google's or Instagram's page markup, since parsing uses several fallback selectors.
Integrations
Instagram B2B Email Scraper works like any other Apify Actor โ callable from your own code, from no-code automation tools, or from AI agent frameworks, using the same underlying API.
Calling Instagram B2B Email Scraper programmatically
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("instagram-b2b-emails-scraper").call(run_input={"keywords": ["marketing agency", "yoga studio"],"mode": "b2b","maxEmails": 200,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["email"], item.get("phoneNumber"))
Works in Go, Ruby, Node.js, cURL โ any language that can make an HTTP request.
MCP integration for AI agents
Instagram B2B Email Scraper can be exposed to MCP-compatible clients (Claude Desktop, Claude Code, and other MCP clients) through Apify's Actors MCP Server by registering the Actor's name in the server's ACTORS configuration, then calling it as a tool from your agent โ no separate API integration code required.
No-code tools (n8n, Make, LangChain)
In n8n, use the Apify integration node (or an HTTP Request node against the Actor's run endpoint) to start a run and pull dataset items into your workflow. In Make, the Apify app module can start this Actor and pass its output straight into downstream scenarios like CRM row creation. In LangChain, wrap the Actor with the ApifyWrapper/Apify Actor tool to run it and load results as documents directly into a chain or agent.
Is it legal to scrape Instagram business emails?
Scraping publicly visible data โ content Instagram and Google make available without a login โ is generally lawful, and Instagram B2B Email Scraper only returns data of that kind. That said, an email address is personal data even when it's published in a business context, so collecting, storing, or using it for outreach can fall under GDPR (if the person or business is in the EU/UK) or CCPA (for California residents), which govern the lawful basis for storage and further use rather than the act of viewing public data itself. Consult legal counsel if your use case involves bulk storage or processing of personal data.
Frequently asked questions
What Instagram business email fields does Instagram B2B Email Scraper return?
The core fields are email, phoneNumber, businessCategoryName, followersCount, and bio, alongside search metadata like keyword, pattern, and url. See the full field table above for every key.
Does Instagram B2B Email Scraper require an Instagram account or login?
No. The Actor searches Google and calls Instagram's public, unauthenticated web_profile_info endpoint โ no Instagram username, password, or session cookie is needed from you.
How many Instagram business emails can I extract in one run?
Up to the maxEmails cap, which accepts values from 1 to 50,000 per run. The run stops collecting as soon as that cap is reached, or once every keyword/pattern combination has been exhausted.
What happens if a keyword or search pattern returns zero leads?
The Actor moves on rather than erroring. If a query returns empty result pages three times in a row, it stops paging that keyword/pattern combination and continues to the next one, so a low-yield keyword or pattern doesn't stall the run.
Can I scrape multiple Instagram business emails at once?
Yes. keywords accepts an array, and every keyword is run against every selected B2B pattern (up to all 29) in the same run, so one run can cover many niches and search angles at once.
Does Instagram B2B Email Scraper work with Claude, ChatGPT, and other AI agent tools?
Yes. It's callable as a standard HTTP endpoint by any agent framework via the Apify API, and it can also be registered with Apify's Actors MCP Server for MCP-compatible clients like Claude Desktop and Claude Code.
What makes this different from a generic email-scraping tool?
It's purpose-built for Instagram lead generation: 29 engineered B2B search patterns tuned to surface corporate contact emails while filtering out free-mail domains, optional live profile enrichment via Instagram's own public endpoint, and phone-number extraction normalized to a target country's dial code โ rather than a single generic regex pass over any web page.
Does Instagram B2B Email Scraper return data in a format LLMs can use directly?
Yes. Output is typed, normalized JSON with consistent field names across runs โ no HTML parsing or CSS selectors needed. Pass it directly to an LLM prompt, index it into a vector store, or feed it to an agent tool.
What happens when Instagram or Google changes its layout or anti-bot system?
The Actor is maintained, and its output field names stay stable across changes to Google's or Instagram's markup โ the SERP parser already tries several known result-block selectors as fallbacks. No specific update turnaround time is guaranteed.
Can I use Instagram B2B Email Scraper without managing proxies or browser infrastructure?
Yes. The Actor handles Chrome browser impersonation and automatic three-tier Apify proxy escalation (direct โ datacenter โ residential) on your behalf; you only need to leave useProxy on.
Which fields work best for AI training data and RAG indexing?
For RAG, index the free-text fields โ bio, description, and title โ since they carry the most retrievable context. For training data, email, followersCount, isBusinessAccount, and verified return as consistently typed primitives across every record.
Related scrapers
| Scraper Name | What it extracts |
|---|---|
| Instagram Profile Scraper | Full Instagram profile data โ bio, followers, verified status, external links |
| Instagram Related Person Scraper | Related and lookalike profile networks for any Instagram account |
| Instagram Hashtag Scraper | Instagram posts and profiles discovered via hashtag search |
| LinkedIn B2B Emails Scraper: Verified Email Finder | Corporate emails from LinkedIn, grouped by resolved company domain |
| Alibaba Email Scraper: Top Supplier Leads | Supplier business emails and leads from Alibaba via engineered search patterns |
| Extract Emails, Contacts & Socials from Any Website | Email addresses discovered via Google site: search on any platform you choose |
Your feedback
Found a bug or missing a field? Let us know via the Actor's Issues tab on the Apify Store, or through Apify support โ we actively maintain this Actor and use that feedback to prioritize fixes.