Instagram B2B Email Scraper With Business Profile Leads
Pricing
from $4.99 / 1,000 results
Instagram B2B Email Scraper With Business Profile Leads
๐ง Instagram B2B Email Scraper finds public business emails from Instagram profiles & bios โ with name, username, category, website, followers, and bio link. ๐ Perfect for B2B lead gen, outreach, and sales. ๐ Fast, accurate, CSV export for clean, targeted contact lists.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Instagram Scraper โ Extract Business Emails, Categories & Profiles
Instagram B2B Email Scraper: Business Type Leads finds Instagram business leads through three discovery channels โ Google-SERP keyword search, the real Instagram hashtag search API, and mention/tagged-user mining from a target account โ and returns typed JSON rows carrying the email, business category, and profile data for each lead. Unlike scraping frameworks that return raw HTML, it returns typed JSON โ ready for your model, your database, or your pipeline without any parsing. This guide covers every input and output field and how teams deploy each discovery channel for lead generation, monitoring, and bulk dataset builds.
๐งญ What Does Instagram B2B Email Scraper: Business Type Leads Do?
Instagram B2B Email Scraper: Business Type Leads runs one of three discovery channels against Instagram-linked content and emits a unified lead row per result. discoveryMode="keyword" (the default) searches Google's own index of site:instagram.com pages using engineered B2B or personal-email search patterns โ no Instagram login needed. discoveryMode="hashtag" calls Instagram's real fbsearch/web/top_serp hashtag API directly, which does require a valid Instagram sessionId cookie, since that endpoint rejects anonymous requests. discoveryMode="mentions" mines who a target account @mentions or tags in its own recent posts, again without login. Any channel can be layered with optional profile enrichment and phone-number extraction.
Key capabilities:
- Three independent discovery channels selectable via
discoveryMode:keyword,hashtag,mentions - 29 engineered B2B search-pattern templates (
b2b_patterns.py) targeting bio emails, booking/reservation emails, HR/careers contacts, and more emailMatchModeswitches the whole run between corporate (b2b) and personal-domain (personal) email classification- Optional profile enrichment (
enrichProfile) pulls live followers count, business-account flag, business category, verified status, bio, and external URL via the publicweb_profile_infoendpoint - Optional related/lookalike profile expansion (
maxRelatedProfiles) from the same enrichment payload, no extra request - Optional phone-number extraction and country/dial-code normalization (
extractPhone,country) in keyword mode - Smart proxy escalation (direct โ datacenter โ residential) applied independently to SERP fetches and Instagram enrichment requests
โก Features & Capabilities
The scraper's capabilities split into the extraction engine itself and where it sits inside the wider Scrapio toolset.
Core features
- Google-SERP keyword discovery โ queries
site:instagram.comcombined with one of 29 B2B search-pattern templates (or a plain personal-domain query), paging through results untilmaxLeadsor an empty-page streak is hit - Real Instagram hashtag API discovery โ calls the authenticated
fbsearch/web/top_serpendpoint directly with a user-suppliedsessionId, returning real post rows tagged withhashtag,title(poster username),description(caption), andtaggedUsers - Mentions/tagged-user mining โ crawls a target account's own recent posts via the public feed API and extracts every
@mentionand tagged user from each caption, tagged ontomentionedBy - Unified output schema โ every channel writes into the same row shape:
email,phoneNumber,keyword,pattern,leadType,title,url,description,network,location,hashtag,mentionedBy,taggedUsers,scraped_at, plus the enrichment and phone fields - B2B vs. personal email classification โ
is_corporate_email()filters out common consumer domains (Gmail, Yahoo, Outlook, iCloud, etc.) soemailMatchMode="b2b"keeps only corporate-looking addresses - Profile enrichment on any channel โ
enrichProfileapplies identically whether the lead came from a keyword, hashtag, or mentions run - Three-tier proxy escalation โ SERP and Instagram requests escalate direct โ datacenter โ residential independently on a block, since a
GOOGLE_SERP-tuned datacenter proxy does not reliably tunnel toinstagram.com
Instagram B2B Email Scraper: Business Type Leads within the Scrapio data stack
This actor covers B2B/personal email discovery, hashtag-post mining, and mention/tagged-user leads in one run. For phone-number-first lead discovery instead of email-first, use instagram-phone-number-scraper-email-lead-finder. For phone leads combined with outreach lead scoring, use instagram-profile-phone-number-scraper-outreach-lead-scorer. For deep single-profile bio-link and email extraction on a known account, use instagram-profile-scraper-with-bio-link-email-extraction. For a dedicated tagged-posts feed with AI sentiment analysis, use Instagram-Tagged-And-Mentions-Posts-Scraper-With-AI-Sentiment-And-Caption-Analysis.
Why do developers and data teams scrape Instagram?
Instagram lead and contact data is used across a handful of recurring, well-defined B2B workflows.
๐ข B2B lead generation and sales prospecting
A sales or growth team supplies target keywords (e.g. a niche like "marketing" or "fitness studio"), selects emailMatchMode="b2b", and gets back rows already carrying email, pattern (which search signal matched โ e.g. bio_email_basic or contact_at_domain), and leadType. Turning on enrichProfile adds followersCount, isBusinessAccount, and businessCategoryName to each row, so a rep can prioritize outreach toward verified, high-follower business accounts in a specific category before ever opening Instagram manually. The dataset lands ready for a CRM import keyed on email or url.
๐ AI training data and RAG indexing
description (caption/snippet text), bio, and businessCategoryName are the highest-information fields for AI use โ description/bio carry natural-language context, while businessCategoryName and leadType are consistently structured categorical fields. For RAG indexing, bio combined with description gives a retrieval system enough context to answer "what does this business do and how do they want to be contacted" without a second lookup. For training data, pattern, leadType, isBusinessAccount, and verified are present in a stable, typed shape across every row regardless of which discovery channel produced it.
๐ฑ Competitive and market intelligence
Running a competitor's niche keywords or hashtags through the actor surfaces which accounts are actively advertising a contact email or bio-link in that space, and businessCategoryName plus followersCount show how those accounts are positioned and sized. Re-running the same hashtag or keyword set over time and diffing on url reveals new entrants or newly-public contact details in a market segment.
๐ฌ Research and academic use
Because every field comes from either Google's public index of Instagram pages or Instagram's own publicly-callable web endpoints, the dataset supports research on business-account prevalence, contact-disclosure patterns, and hashtag/mention network structure โ scoped strictly to public data, with no private-account content accessed.
๐ฅ Product and SaaS development
Teams building B2B lead-generation products, business directories, or influencer/creator outreach tools can schedule this actor per customer niche and pipe the enriched rows directly into their own product's contact database.
๐ Input Parameters
The actor takes 16 top-level input parameters, all optional, read directly from .actor/actor.json's input schema (schema order below).
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
discoveryMode | No | string (enum, default "keyword") | Discovery channel: keyword (Google-SERP, no login), hashtag (real Instagram top_serp API, needs sessionId), or mentions (mine mentions/tagged users from a target account, no login). | "keyword" |
discoveryTargets | No | array (stringList) | Keyword mode: Google search terms. Mentions mode: Instagram usernames to mine. Ignored in hashtag mode. | ["marketing"] |
hashtags | No | array (stringList) | Hashtags to query via the real top_serp API (with or without #). Only used when discoveryMode="hashtag". | ["marketing"] |
sessionId | No | string (secret) | Instagram sessionid browser cookie. Required only when discoveryMode="hashtag" โ this API rejects anonymous requests. | "58012345%3AabCdEfGh..." |
emailMatchMode | No | string (enum, default "b2b") | b2b = corporate email patterns, personal = Gmail/Outlook-style discovery. Applies to whichever channel is active. | "b2b" |
personalEmailDomains | No | array (stringList) | Personal mode only: keep emails ending in these domains. Ignored in B2B mode. | ["@gmail.com", "@outlook.com"] |
b2bPatternKeys | No | array (stringList) | Keyword mode + B2B only: empty = run all 29 patterns; or list specific keys from b2b_patterns.py. | ["email_for_bookings", "bio_email_basic"] |
targetPlatform | No | string (enum, default "Instagram.com") | Target platform for keyword-mode Google discovery. Hashtag/mentions channels always target instagram.com directly. | "Instagram.com" |
geoFilter | No | string | Location text added to keyword-mode search queries, and tagged onto every row's location field for all channels. | "London" |
maxLeads | No | integer (1โ50000, prefill 10) | Overall cap on rows collected across all keywords/hashtags/accounts, for any discovery channel. | 10 |
maxLeadsPerSegment | No | integer (1โ5000, prefill 15) | Cap per segment: per B2B pattern (keyword mode), per hashtag (hashtag mode), or per scanned account (mentions mode). | 15 |
enrichProfile | No | boolean (default false) | Fetch each lead's live profile (followers, business flag, category, verified, bio, external URL) plus related profiles. Adds one extra request per lead. | true |
maxRelatedProfiles | No | integer (0โ50, default 5) | Max lookalike/related profiles captured per enriched lead. Only applies when enrichProfile is on. | 5 |
extractPhone | No | boolean (default false) | Keyword mode: also scan each Google snippet for a phone number and normalize it with a country dial code. | true |
country | No | string (default "") | Country name and/or dial code to target phone numbers by. Only used when extractPhone is on. | "United Kingdom (+44)" |
disableSmartProxy | No | boolean | Leave unchecked for the recommended default (smart proxy on). Check only to force direct connections. | false |
proxyConfiguration | No | object (proxy editor) | Optional proxy override. Default prefill is Apify Proxy with the GOOGLE_SERP group. | {"useApifyProxy": true, "apifyProxyGroups": ["GOOGLE_SERP"]} |
JSON input example:
{"discoveryMode": "keyword","discoveryTargets": ["marketing", "fitness studio"],"emailMatchMode": "b2b","b2bPatternKeys": ["email_for_bookings", "bio_email_basic", "contact_at_domain"],"geoFilter": "London","maxLeads": 50,"maxLeadsPerSegment": 15,"enrichProfile": true,"maxRelatedProfiles": 5,"extractPhone": true,"country": "United Kingdom (+44)"}
Supported URL types and input formats
- Keyword mode โ plain search terms in
discoveryTargets, e.g."marketing"or"fitness studio". No URL needed; the actor buildssite:instagram.com "<keyword>"queries internally. - Hashtag mode โ bare hashtag text or
#hashtaginhashtags, e.g."marketing"or"#marketing"; a fullinstagram.com/explore/tags/<tag>/URL is also accepted and the tag is parsed out of the path. - Mentions mode โ Instagram usernames in
discoveryTargets, either bare ("nike"),@-prefixed ("@nike"), or a full profile URL ("https://www.instagram.com/nike/") โ all three are normalized byclean_target_username().
๐ฆ Output Format
Every result row is pushed under the row_result pay-per-event charge โ the actor's on_result callback calls Actor.push_data(row, charged_event_name="row_result") for every collected lead with no separate uncharged diagnostic or accounting row pushed anywhere else in the code, so every row in your dataset corresponds to one billed event. The default "All Leads" view surfaces 23 columns; a second, purpose-built "Hashtag & Mentions Discovery Rows" view surfaces a 7-column subset for those two channels.
Output for email leads (default view โ all channels)
{"email": "bookings@urbanfitstudio.com","phoneNumber": "+442071234567","keyword": "fitness studio","pattern": "email_for_bookings","leadType": "b2b","title": "Urban Fit Studio London | Book a Class","url": "https://www.instagram.com/urbanfitstudiolondon/","description": "Book your first class today. Email for bookings: bookings@urbanfitstudio.com","network": "Instagram.com","location": "London","hashtag": "","mentionedBy": "","taggedUsers": [],"scraped_at": "2026-07-25T09:12:41Z","followersCount": 18420,"isBusinessAccount": true,"businessCategoryName": "Gym/Physical Fitness Center","verified": false,"bio": "Boutique fitness studio in Shoreditch | Book via link below","externalUrl": "https://urbanfitstudio.com/book","relatedProfiles": [{ "username": "shoreditchspin", "fullName": "Shoreditch Spin", "isVerified": false, "isPrivate": false, "profilePicUrl": "https://scontent.cdninstagram.com/v/example.jpg" }],"country": "United Kingdom","dialCode": "+44"}
Output for hashtag & mentions leads (secondary view)
{"title": "urbanfitstudiolondon","hashtag": "fitness","mentionedBy": "","taggedUsers": [{ "username": "shoreditchspin", "full_name": "Shoreditch Spin", "is_private": false, "is_verified": false }],"email": "","url": "https://www.instagram.com/p/C4xY9zLrT1a/","leadType": "hashtag"}
This view is a projection of the same underlying row โ hashtag-mode rows carry hashtag and pattern="hashtag_discovery"; mentions-mode rows carry mentionedBy (the scanned target account) and pattern="mentions_discovery"; both leave email empty unless the caption itself contained one.
Schema stability and export options
Field names stay fixed across runs because every discovery channel writes into the same base_lead_row() / on_result() shape rather than passing through Instagram's or Google's raw response verbatim โ if either front end changes, the parsing functions in data_extractor.py, hashtag_discovery.py, or mentions_discovery.py are what would need updating, not your downstream schema. Datasets export from the Apify Console or API in JSON, CSV, Excel, XML, RSS, or HTML table formats, and can be fetched programmatically via the Apify API or the apify-client/apify SDKs.
๐ก Instagram B2B Email Scraper: Business Type Leads Strategy Guide
How you configure this actor depends on whether you need a single fresh enrichment, ongoing monitoring, or a large one-off dataset.
๐ฏ Strategy 1: Real-time enrichment pipeline
Trigger a run whenever your CRM needs to check a specific niche or account: pass a narrow discoveryTargets list with emailMatchMode="b2b" and enrichProfile: true, and a low maxLeads (e.g. 10). Read back email, businessCategoryName, followersCount, and verified for each new row, and append them to the matching lead record in your CRM keyed on email or url so a re-run doesn't create duplicate contacts. Because enrichment adds one extra request per lead, keep maxLeads modest for this pattern so the run stays fast enough for an on-demand, request-driven workflow rather than a background batch job.
๐ฏ Strategy 2: Scheduled monitoring and alerting
Use the Apify Scheduler to re-run the same discoveryTargets/hashtags on a recurring cadence. Diff each new run's dataset against the previous one on url (newly discovered accounts) and email (a lead that newly exposed a contact address), then alert only on the delta โ for example, a new business-category match in a tracked niche, or a previously email-less lead that now has one. This turns a one-off search into ongoing lead-flow monitoring for a niche or hashtag.
๐ฏ Strategy 3: Bulk dataset build
For a research or training dataset, supply a long discoveryTargets or hashtags list, raise maxLeads toward its 50,000 ceiling, and aggregate the pushed rows to CSV or a database table. One real constraint to plan around: keyword-mode collection for a given query stops early once it hits EMPTY_PAGE_LIMIT (3) consecutive empty Google result pages, so total yield per keyword/pattern combination depends on how much Google has actually indexed for that query โ not solely on maxLeadsPerSegment. For large builds, spread a long keyword or hashtag list across the run rather than relying on one narrow query to hit the cap. Hashtag-mode and mentions-mode builds are bounded differently โ by maxLeadsPerSegment per hashtag or per scanned account respectively โ so widen the target list first before raising the per-segment cap.
Strategy comparison at a glance
| Strategy | Best for | Run pattern | Output format |
|---|---|---|---|
| Real-time enrichment | Enriching one inbound niche/account on demand | Single on-demand run, low maxLeads | JSON row appended to CRM |
| Scheduled monitoring | Ongoing niche/hashtag lead-flow tracking | Recurring run via Apify Scheduler, diffed on url/email | JSON dataset, diffed run-over-run |
| Bulk dataset build | Research or training datasets across many keywords/hashtags | One or more runs over a long target list | CSV/database export |
๐ด Related Instagram Scrapers & Tools
| Scraper Name | What it extracts |
|---|---|
instagram-phone-number-scraper-email-lead-finder | Phone-number-first Instagram lead discovery with email as secondary |
instagram-profile-phone-number-scraper-outreach-lead-scorer | Phone-number leads with outreach lead scoring |
instagram-profile-scraper-with-bio-link-email-extraction | Deep single-profile bio-link and email extraction |
instagram-mentions-scraper-with-engagement-data | Instagram mentions with engagement metrics |
Instagram-Tagged-Posts-Scraper-Hashtags-And-Profile-Data-Insights | Tagged posts, hashtags, and poster profile data |
instagram-hashtag-engagement-scraper | Standalone hashtag-feed engagement stats |
linkedin-b2b-emails-scraper-by-phone-email-finder | Cross-platform B2B email/phone lead finder on LinkedIn |
alibaba-email-scraper-with-product-sourcing-leads | Cross-platform supplier email leads on Alibaba |
extract-emails-contacts-socials-from-any-website-verified-phone-email-list | Cross-platform email/phone extraction from any website |
facebook-page-posts-scraper-with-lead-contact-list | Complementary lead-contact discovery on Facebook Pages |
How to integrate Instagram B2B Email Scraper: Business Type Leads with your stack
Instagram B2B Email Scraper: Business Type Leads works with any language or tool that can make an HTTP request, via the Apify API or its official SDKs.
Python
import csvfrom apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run_input = {"discoveryMode": "keyword","discoveryTargets": ["marketing", "fitness studio"],"emailMatchMode": "b2b","b2bPatternKeys": ["email_for_bookings", "bio_email_basic", "contact_at_domain"],"maxLeads": 50,"enrichProfile": True,}run = client.actor("scrapio/instagram-b2b-email-scraper-business-type-leads").call(run_input=run_input)rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())with open("instagram_leads.csv", "w", newline="", encoding="utf-8") as f:writer = csv.writer(f)writer.writerow(["email", "keyword", "pattern", "url", "businessCategoryName", "followersCount"])for row in rows:writer.writerow([row.get("email"),row.get("keyword"),row.get("pattern"),row.get("url"),row.get("businessCategoryName"),row.get("followersCount"),])print(f"Collected {len(rows)} leads.")
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('scrapio/instagram-b2b-email-scraper-business-type-leads').call({discoveryMode: 'keyword',discoveryTargets: ['marketing', 'fitness studio'],emailMatchMode: 'b2b',maxLeads: 50,enrichProfile: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const lead of items) {console.log(lead.email, lead.pattern, lead.businessCategoryName, lead.url);}
Async and scheduled pipelines
For large discoveryTargets/hashtags lists, call the actor with client.actor(...).start() instead of .call() to run it asynchronously, then poll the run status or dataset item count rather than blocking your process. For recurring lead monitoring, configure an Apify Scheduler entry against this actor with a fixed input โ Apify webhooks can additionally be attached to a run to notify your system on completion.
๐ฏ Who Needs Instagram B2B Email Scraper: Business Type Leads? (Use Cases & Industries)
๐ข B2B lead generation teams
A growth or sales team runs the actor against a target niche's keywords with emailMatchMode="b2b" and enrichProfile: true, then sorts rows by businessCategoryName and followersCount to build a prioritized outreach list without opening a single Instagram profile manually.
๐ AI/ML and RAG teams
A data team indexes description, bio, and businessCategoryName into a retrieval store so an internal sales-assistant tool can answer "which businesses in this category have public contact details" directly from stored rows.
๐ฑ Competitive intelligence analysts
An analyst runs the actor against a competitor's niche keywords or hashtags on a schedule and watches new email/url rows and businessCategoryName distribution to track how a market segment's public contact-disclosure and positioning shift over time.
๐ฌ Researchers
Academic and market researchers use the dataset to study business-account contact-disclosure patterns and hashtag/mention network structure on a public social platform โ scoped strictly to publicly viewable pages and endpoints, with no private-account content collected.
๐ฅ Product and SaaS builders
Teams building B2B lead-generation or business-directory products can schedule this actor per customer niche and write the enriched rows directly into their own product's contact database as the underlying data layer.
Is it legal to scrape Instagram?
Scraping publicly accessible data is generally lawful in the United States โ in hiQ Labs, LLC v. LinkedIn Corp. (9th Cir. 2019), the court held that scraping data a website makes publicly available does not violate the Computer Fraud and Abuse Act. That precedent concerns unauthorized-access law, not Instagram's own Terms of Service: scraping in violation of a platform's ToS can still expose you to civil claims (breach of contract, account suspension) even where it isn't criminal. Separately, because this actor returns personal and business-contact data โ email addresses, phone numbers, bios, follower counts, and verification status tied to identifiable accounts โ anyone storing or processing that data may have obligations under GDPR, CCPA, or equivalent regional laws, regardless of the data's public origin. Instagram B2B Email Scraper: Business Type Leads returns only publicly accessible data. What you do with that data is your responsibility โ consult legal counsel for commercial applications involving personal data.
โ Frequently asked questions
Does Instagram B2B Email Scraper: Business Type Leads work without an Instagram account?
Yes, for two of the three channels. Keyword mode and mentions mode run fully logged-out โ no Instagram account or cookie is needed. Only hashtag mode requires a valid Instagram sessionId cookie, because that specific API (fbsearch/web/top_serp) rejects anonymous requests.
How does it handle anti-scraping measures?
Keyword-mode Google requests and Instagram enrichment requests both impersonate a real Chrome browser's TLS/HTTP signature via impit, insert randomized jitter delays between requests, and escalate through a direct โ datacenter โ residential proxy ladder on a detected block (Google captcha/robot-check strings, or non-200/non-JSON Instagram responses). Mentions-mode requests retry with exponential backoff (capped at 8โ12 seconds) and fall back to a residential proxy on HTTP 403/429.
Can I run it at scale without getting blocked?
It processes keywords, hashtags, or target accounts sequentially with proxy escalation and randomized delays built in; there is no documented concurrency limit or uptime guarantee in the schema. Blocking risk depends heavily on whether smart proxy is left enabled (the default) โ disabling it (disableSmartProxy: true) forces direct connections with no escalation.
How fresh is the data?
It's a live fetch on every run across all three channels โ each row is stamped with a scraped_at UTC timestamp generated at collection time, and nothing is served from a cache between runs.
What's the difference between B2B and personal email matching mode?
emailMatchMode="b2b" keeps only emails classified as corporate by is_corporate_email() (anything not ending in a common consumer domain like Gmail, Yahoo, or Outlook), and drives keyword-mode queries through the 29 B2B search patterns in b2b_patterns.py. emailMatchMode="personal" instead keeps emails matching the domains listed in personalEmailDomains (e.g. @gmail.com, @outlook.com).
Why do I only need a sessionId for hashtag mode?
Instagram's hashtag search (fbsearch/web/top_serp) is a private, authenticated API that rejects anonymous callers, so a real sessionid cookie is a genuine requirement for that channel only. Keyword mode reads Google's public index instead of contacting instagram.com, and mentions mode uses public, unauthenticated profile and feed endpoints โ neither needs a login.
Which fields work best for AI training and RAG indexing?
For RAG, index description and bio โ the free-text fields carrying the most retrievable context about what a business does and how it wants to be contacted. For training data, pattern, leadType, isBusinessAccount, and verified are present in a consistent, typed structure across every row regardless of which discovery channel produced it. All fields return as typed primitives requiring no HTML parsing before use.
Does this actor collect personal data, and who is responsible for compliance?
Yes โ email, phoneNumber, bio, followersCount, and taggedUsers/relatedProfiles are personal and business-contact data tied to identifiable accounts. The actor only surfaces data Instagram or Google already makes publicly visible; the lawful basis for storing, contacting, or otherwise acting on that data sits with you as the operator, not with the actor.
Does it work with Claude, ChatGPT, and other AI agent tools?
Yes, as an HTTP-callable Apify actor โ any agent framework that can call the Apify API (directly, or via apify-client) can trigger a run and read back typed JSON rows, with no parsing required before passing results into an LLM context window.
โน๏ธ Disclaimer
Instagram B2B Email Scraper: Business Type Leads extracts only publicly available data from Instagram and Google's public search index. This tool is intended for lawful use cases only. Users are responsible for complying with Instagram's terms of service and applicable data protection laws in their jurisdiction.