Instagram B2B Email Scraper By Verified Leads Filter avatar

Instagram B2B Email Scraper By Verified Leads Filter

Pricing

$24.99/month + usage

Go to Apify Store
Instagram B2B Email Scraper By Verified Leads Filter

Instagram B2B Email Scraper By Verified Leads Filter

πŸ“Έ Instagram B2B Email Scraper extracts business emails from Instagram profiles & biosβ€”plus company name, website, category, followers, and contact links. 🎯 Ideal for B2B lead gen, sales outreach & market research. πŸš€ Fast, accurate, and CSV/CRM-ready.

Pricing

$24.99/month + usage

Rating

0.0

(0)

Developer

Scrapier

Scrapier

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

5 days ago

Last modified

Share

Instagram B2B Email Scraper β€” Confidence-Scored, MX-Verified Leads

Instagram B2B Email Scraper By Verified Leads Filter finds business emails from public Instagram profiles by running targeted Google Search patterns, then runs every discovered address through an offline lead-quality pipeline β€” syntax check, disposable-domain check, role-address detection, and an optional live MX/DNS-over-HTTPS deliverability lookup. Results are structured JSON, ready to load into a CRM, pass to an LLM agent, or feed a monitoring pipeline. No Instagram login is required to run it.

What is Instagram B2B Email Scraper By Verified Leads Filter?

Instagram B2B Email Scraper By Verified Leads Filter queries Google Search with site:instagram.com patterns engineered to surface business contact emails in bios, captions, and "for bookings/collabs" text, then extracts and scores every email it finds. Its verified-leads filter is real, not a label: each row ships with a confidenceScore, riskLevel, and recommendation computed from syntax validity, disposable-domain membership, role-address detection, and (optionally) a live MX lookup β€” so you can triage leads before they hit a CRM instead of after a bounce. No Instagram account, cookies, or API key are required; the scraper reads only public Google Search results and Instagram's public profile endpoint.

  • Discovers corporate or personal emails via 29 B2B search patterns or a personal-domain filter
  • Scores every email offline (syntax, disposable domain, role-address) with no network cost
  • Optionally verifies domain-level deliverability with a cached MX/DoH lookup
  • Optionally enriches each lead with real Instagram profile data (followers, verified status, bio) and related/lookalike profiles
  • Optionally extracts and normalizes phone numbers with country dial-code filtering
  • Runs multiple keywords and search patterns in a single job with automatic proxy escalation on blocks

What data can you get with Instagram B2B Email Scraper By Verified Leads Filter?

The Actor returns one row per discovered email lead, optionally paired with a live Instagram profile object when enrichment is turned on.

Result TypeExtracted FieldsPrimary Use Case
Email lead (core)email, emailType, keyword, pattern, leadType, location, title, description, url, network, scraped_atBuilding a raw prospect list from Instagram search results
Lead quality scoreconfidenceScore, riskLevel, recommendation, isDisposable, isRoleBased, syntaxValid, emailDomainTriaging leads before CRM import or outreach
Deliverability checkmxFound, mxHost, mxMessageDropping domains that can't receive mail before sending
Profile enrichment (opt-in)followersCount, isBusinessAccount, businessCategoryName, verified, bio, externalUrl, relatedProfilesQualifying a lead's real audience size and business status
Phone extraction (opt-in)phoneNumber, dialCode, countryAdding a second outreach channel alongside email

Confidence-scored, MX-verified leads

Every row carries a lead-quality block computed entirely offline: syntaxValid (RFC-pragmatic email syntax check), isDisposable (checked against a curated list of disposable-email domains), isRoleBased (checked against role prefixes like info@, admin@, support@), and emailDomain. These four signals are weighted into a single confidenceScore (0–1), which maps to a riskLevel of LOW, MEDIUM, or HIGH and a recommendation of ACCEPT, REVIEW, or REJECT. When verifyDeliverability is on (default), a cached DNS-over-HTTPS MX lookup adds a fifth signal β€” mxFound and mxHost β€” confirming the domain actually accepts mail. This is honestly a heuristic score, not an SMTP-backed guarantee: SMTP/catch-all probing is deliberately excluded because it's blocked from datacenter IPs and would otherwise fabricate confidence.

{
"email": "contact@janemarketingstudio.com",
"confidenceScore": 0.8,
"riskLevel": "LOW",
"recommendation": "ACCEPT",
"isDisposable": false,
"isRoleBased": true,
"mxFound": true,
"mxHost": "aspmx.l.google.com"
}

With enrichProfile turned on, each lead is upgraded with a real Instagram profile snapshot β€” follower count, business-account flag, business category, verified status, bio, and external link β€” fetched from Instagram's public web_profile_info endpoint, plus a list of related/lookalike profiles pulled from the same request. This turns a bare email address into a qualified lead you can size up before reaching out, and the related profiles give you adjacent accounts to prospect from the same lookup.

How does Instagram B2B Email Scraper By Verified Leads Filter differ from the official Instagram API?

Meta's Graph API for Instagram is built to manage professional accounts you already own or administer β€” it has no keyword-search endpoint for discovering third-party accounts, and it does not expose an email field for any account, business or personal. Instagram B2B Email Scraper By Verified Leads Filter instead discovers public leads through Google Search and scores them for lead quality, which the Graph API was never designed to do.

FeatureInstagram Graph APIInstagram B2B Email Scraper By Verified Leads Filter
Account scopeOnly Instagram professional accounts you own or manageAny public Instagram profile surfaced by a Google Search
Keyword/topic searchNot supported β€” no public discovery endpointBuilt in β€” searchKeywords plus 29 B2B search patterns
Email discoveryNo email field on any endpointExtracts emails from bios, captions, and contact call-outs
Lead quality signalsNoneconfidenceScore, riskLevel, recommendation, MX deliverability, disposable/role-address flags
Setup requirementMeta app review, business verification, linked Facebook PageApify account and Actor input only β€” no Instagram login
Output formatNested per-endpoint JSON per Meta's schemaOne flat JSON row per lead, exportable as JSON, CSV, or Excel

The Graph API is the right tool when you're building analytics or publishing tools for accounts your business already administers. Instagram B2B Email Scraper By Verified Leads Filter is the right tool when you need to discover and qualify leads you don't yet have a relationship with.

How to scrape Instagram with Instagram B2B Email Scraper By Verified Leads Filter?

  1. Open Instagram B2B Email Scraper By Verified Leads Filter on Apify and click Try for free β€” you need only an Apify account, no separate signup.
  2. Add one or more terms to searchKeywords (prefilled with marketing) β€” this is the only input the run actually needs; leaving everything else at default is enough to start.
  3. Choose leadMode β€” b2b for corporate-pattern email discovery, or personal to filter toward Gmail/Outlook-style addresses with personalDomainFilter.
  4. Set maxLeadEmails, locationQuery, and optionally toggle verifyDeliverability, enrichProfile, or extractPhone, then click Start.
  5. Download results as JSON, CSV, or Excel from the dataset, or pull them via the Apify API once the run finishes.

Example run input:

{
"searchKeywords": ["marketing agency", "fitness coach"],
"leadMode": "b2b",
"maxLeadEmails": 50,
"locationQuery": "Chicago"
}

How to run multiple keywords and patterns in one job

searchKeywords accepts an array, and in b2b mode every keyword is combined with every pattern in b2bPatternFilter (or all 29 built-in patterns if left empty) inside the same run β€” there's no need to launch a separate job per keyword or per pattern. maxLeadEmails caps the total across the whole batch, while maxPerPatternCap caps how many emails any single pattern contributes.

⬇️ Input

Instagram B2B Email Scraper By Verified Leads Filter takes no required fields β€” a keyword is prefilled by default, but you should set searchKeywords yourself for a real run, since the Actor stops immediately if the resolved keyword list is empty.

ParameterRequiredTypeDescriptionExample Value
searchKeywordsNoarraySearch terms for Instagram via Google (e.g. marketing, fitness, real estate)["marketing", "fitness coach"]
leadModeNostring (b2b, personal)personal = Gmail/Outlook discovery; b2b = corporate email patterns"b2b"
personalDomainFilterNoarrayPersonal mode: filter results to these domains; ignored in B2B mode["@gmail.com", "@outlook.com"]
b2bPatternFilterNoarrayB2B only: empty list runs all 29 patterns, or name specific keys from b2b_patterns.py["email_for_bookings", "bio_email_basic"]
targetNetworkNostring (Instagram.com)Target social platform for email discovery"Instagram.com"
locationQueryNostringGeographic filter added to search queries; empty for global results"London"
maxLeadEmailsNointeger (1–50000)Maximum number of emails to collect across all keywords and patterns10
maxPerPatternCapNointeger (1–5000)Cap emails collected per B2B search pattern (B2B mode only)15
verifyDeliverabilityNoboolean (default true)Runs a DoH MX lookup per email domain and factors it into the confidence scoretrue
enrichProfileNoboolean (default false)Fetches each lead's live Instagram profile data plus related profilesfalse
maxRelatedProfilesNointeger (0–50, default 5)Maximum related/lookalike profiles captured per enriched lead5
extractPhoneNoboolean (default false)Scans each result snippet for a phone number and normalizes itfalse
countryNostring (default "")Country name and/or dial code to target phone numbers by"United Kingdom (+44)"
disableAutoProxyFallbackNobooleanCheck to force direct connections only, skipping automatic proxy escalationfalse
proxyConfigurationNoobjectOptional proxy override when auto proxy fallback is enabled{"useApifyProxy": true, "apifyProxyGroups": ["GOOGLE_SERP"]}

Example input:

{
"searchKeywords": ["marketing agency", "fitness coach"],
"leadMode": "b2b",
"b2bPatternFilter": ["email_for_bookings", "bio_email_basic", "contact_at_domain"],
"locationQuery": "Chicago",
"maxLeadEmails": 100,
"maxPerPatternCap": 20,
"verifyDeliverability": true,
"enrichProfile": true,
"maxRelatedProfiles": 5,
"extractPhone": false
}

Common pitfall: b2bPatternFilter only accepts exact pattern keys from b2b_patterns.py (like email_for_bookings) β€” a free-text guess raises an "Unknown B2B pattern" error and stops the run. Leave it empty to run all 29 patterns instead of guessing names.

⬆️ Output

Results are typed, normalized JSON with a consistent schema across runs, exportable as JSON, CSV, or Excel from the dataset. Every pushed row is one charged row_result event β€” the Actor's source contains no separate uncharged accounting or error rows to filter out.

Scraped results

[
{
"network": "Instagram.com",
"keyword": "marketing agency",
"title": "Jane's Marketing Studio (@janemarketingstudio) β€’ Instagram",
"description": "For bookings and collabs: contact@janemarketingstudio.com",
"url": "https://www.instagram.com/janemarketingstudio/",
"email": "contact@janemarketingstudio.com",
"phoneNumber": null,
"leadType": "b2b",
"location": "Chicago",
"pattern": "contact_at_domain",
"scraped_at": "2026-07-20T14:32:07Z",
"dialCode": null,
"country": null,
"followersCount": null,
"isBusinessAccount": null,
"businessCategoryName": null,
"verified": null,
"bio": null,
"externalUrl": null,
"relatedProfiles": [],
"mxFound": true,
"mxHost": "aspmx.l.google.com",
"mxMessage": "1 MX record found",
"emailType": "corporate",
"isRoleBased": true,
"isDisposable": false,
"syntaxValid": true,
"emailDomain": "janemarketingstudio.com",
"confidenceScore": 0.8,
"riskLevel": "LOW",
"recommendation": "ACCEPT"
},
{
"network": "Instagram.com",
"keyword": "fitness coach",
"title": "Alex Rivera Fitness (@alexriverafit) β€’ Instagram",
"description": "For collaborations: alex@riverafitness.co",
"url": "https://www.instagram.com/alexriverafit/",
"email": "alex@riverafitness.co",
"phoneNumber": null,
"leadType": "b2b",
"location": "Chicago",
"pattern": "bio_for_collab",
"scraped_at": "2026-07-20T14:33:52Z",
"dialCode": null,
"country": null,
"followersCount": 18420,
"isBusinessAccount": true,
"businessCategoryName": "Personal Trainer",
"verified": false,
"bio": "Certified trainer | Online coaching | DM for collabs",
"externalUrl": "https://riverafitness.co",
"relatedProfiles": [
{"username": "fitwithsam", "fullName": "Sam Ortiz", "isVerified": false, "isPrivate": false, "profilePicUrl": "https://scontent.cdninstagram.com/..."}
],
"mxFound": true,
"mxHost": "mx1.privateemail.com",
"mxMessage": "1 MX record found",
"emailType": "corporate",
"isRoleBased": false,
"isDisposable": false,
"syntaxValid": true,
"emailDomain": "riverafitness.co",
"confidenceScore": 1.0,
"riskLevel": "LOW",
"recommendation": "ACCEPT"
},
{
"network": "Instagram.com",
"keyword": "real estate",
"title": "Chicago Realty Group (@chicagorealtygroup) β€’ Instagram",
"description": "Call or WhatsApp +1 312 555 0148 or email chicagorealty87@gmail.com",
"url": "https://www.instagram.com/chicagorealtygroup/",
"email": "chicagorealty87@gmail.com",
"phoneNumber": "+13125550148",
"leadType": "personal",
"location": "Chicago",
"scraped_at": "2026-07-20T14:35:10Z",
"dialCode": "+1",
"country": "United States",
"followersCount": null,
"isBusinessAccount": null,
"businessCategoryName": null,
"verified": null,
"bio": null,
"externalUrl": null,
"relatedProfiles": [],
"mxFound": true,
"mxHost": "gmail-smtp-in.l.google.com",
"mxMessage": "5 MX records found",
"emailType": "personal",
"isRoleBased": false,
"isDisposable": false,
"syntaxValid": true,
"emailDomain": "gmail.com",
"confidenceScore": 1.0,
"riskLevel": "LOW",
"recommendation": "ACCEPT"
},
{
"network": "Instagram.com",
"keyword": "pop up shop",
"title": "Popup Brand Studio (@popupbrandstudio) β€’ Instagram",
"description": "hello@popupbrandstudio.xyz for pop-up bookings",
"url": "https://www.instagram.com/popupbrandstudio/",
"email": "hello@popupbrandstudio.xyz",
"phoneNumber": null,
"leadType": "b2b",
"location": "",
"pattern": "email_us_at_variations",
"scraped_at": "2026-07-20T14:36:44Z",
"dialCode": null,
"country": null,
"followersCount": null,
"isBusinessAccount": null,
"businessCategoryName": null,
"verified": null,
"bio": null,
"externalUrl": null,
"relatedProfiles": [],
"mxFound": false,
"mxHost": null,
"mxMessage": "Domain exists but has no MX records",
"emailType": "corporate",
"isRoleBased": true,
"isDisposable": false,
"syntaxValid": true,
"emailDomain": "popupbrandstudio.xyz",
"confidenceScore": 0.5,
"riskLevel": "MEDIUM",
"recommendation": "REVIEW"
}
]

syntaxValid, emailDomain, and mxMessage are pushed on every row but are not shown in the default dataset table view β€” open the API/JSON view or the Actor's views.default.transformation.fields list to confirm the exact set for your run.

How can I use the data extracted with Instagram B2B Email Scraper By Verified Leads Filter?

  • B2B sales and outreach teams: import leads into a CRM sorted by recommendation, sending ACCEPT rows straight into an outreach sequence and routing REVIEW/REJECT rows to manual checking instead of a cold-send that bounces.
  • Lead generation agencies: run a keyword-and-location sweep per client vertical (e.g. "fitness coach" + "Chicago"), then export separate CSVs filtered by location and keyword for each client's prospect list.
  • AI engineers and LLM developers: call the Actor from an agent, pass the returned JSON leads as grounded context, and have the model draft outreach copy only from rows with riskLevel: "LOW".
  • Market researchers: aggregate businessCategoryName, emailType, and location across a niche's leads to see what share of accounts in that space expose a public business email versus a personal one.

How do you monitor Instagram lead quality over time?

Monitoring here means re-running the same keyword and pattern set on a schedule and diffing the resulting lead list, rather than treating one run as a one-time snapshot. Between runs, three things change and are worth tracking: which email values are newly appearing for a keyword (new leads entering the space), whether a previously mxFound: true domain flips to false (the business changed or dropped its mail provider), and whether a lead's confidenceScore/riskLevel/recommendation shifts (typically because the disposable-domain list or role-address detection reclassifies it). Diffing on email as the key and comparing confidenceScore, riskLevel, mxFound, and recommendation between two dataset exports tells you whether a lead's quality actually changed or it's simply new.

A practical workflow: schedule a run across a fixed keyword set (e.g. weekly for a given niche and city), export the new dataset, diff it against the prior run's email set to isolate new leads, then diff shared emails on mxFound and recommendation to catch quality drift. Treat a recommendation flip from ACCEPT to REVIEW or REJECT as the alert-worthy event β€” it usually means the domain's MX record disappeared or the disposable-domain list was updated to include it β€” and route only those changed rows to a human for a second look instead of re-reviewing the whole list each time. This Actor has no built-in scheduler or webhook of its own β€” use Apify's Scheduler to trigger repeat runs and Apify's dataset/webhook integrations to deliver each run's results for the diff step.

Integrate Instagram B2B Email Scraper By Verified Leads Filter and automate your workflow

Instagram B2B Email Scraper By Verified Leads Filter works with any language or tool that can send an HTTP request.

REST API with Python

import requests
API_TOKEN = "YOUR_APIFY_TOKEN"
ACTOR_ID = "YOUR_USERNAME~instagram-b2b-email-scraper-by-verified-leads-filter"
resp = requests.post(
f"https://api.apify.com/v2/acts/{ACTOR_ID}/run-sync-get-dataset-items",
params={"token": API_TOKEN},
json={"searchKeywords": ["marketing agency"], "leadMode": "b2b", "maxLeadEmails": 50},
)
leads = resp.json()
for lead in leads:
print(lead["email"], lead["confidenceScore"], lead["recommendation"])

MCP for query-grounded AI agents

This Actor is reachable through Apify's Actors MCP Server, which exposes any Apify Actor as a callable tool for MCP-compatible clients such as Claude Desktop and Claude Code. Register it by pointing an MCP client at https://mcp.apify.com (or running npx @apify/actors-mcp-server with this Actor's ID in its actor list). The flow: an agent receives a lead-generation question, calls this Actor as a tool with a keyword, gets back scored JSON leads, and drafts a grounded answer or outreach plan from real, quality-flagged data instead of guessing.

Scheduled monitoring and delivery

Use Apify's Scheduler to trigger this Actor on a recurring cron schedule β€” daily, weekly, or any custom interval β€” without writing your own polling code. Pair it with Apify's dataset export or webhook integrations to push each run's results automatically to storage, a CRM, or a downstream pipeline, so the diffing workflow above runs unattended once it's configured.

Scraping publicly visible Instagram content is generally permissible β€” Instagram B2B Email Scraper By Verified Leads Filter only extracts what any visitor or Google search already sees, via public Google Search results and Instagram's public profile endpoint. However, an email address is personal data under GDPR and CCPA even when it appears in a business bio, so collecting, storing, and using these leads (especially for cold outreach) can trigger consent, purpose-limitation, and opt-out obligations in those jurisdictions. Using this data for one-off market research carries different risk than storing it in bulk for repeated outreach campaigns β€” the latter is where GDPR/CCPA exposure is highest. Consult your legal team for commercial use cases involving bulk data storage or cross-border transfer of collected leads.

Frequently asked questions

How many results does the scraper return per query?

maxLeadEmails caps the total per run (1–50,000, default 10), and in B2B mode maxPerPatternCap additionally caps how many emails any single search pattern can contribute (1–5,000, default 15) β€” actual results per keyword also depend on how many matching pages Google Search returns before three consecutive empty pages stop that query.

What does "verified" actually mean for these leads?

It means every email is scored offline (syntax, disposable-domain, role-address) and, when verifyDeliverability is on, checked for a live MX record via DNS-over-HTTPS β€” never SMTP or mailbox-level verification. mxFound: true confirms the domain accepts mail; it does not confirm the specific mailbox is active, since SMTP/catch-all probing is intentionally excluded (it's unreliable from datacenter IPs and would fabricate false confidence).

Does this scraper require an Instagram login or account?

No. It discovers leads through Google Search and, for optional profile enrichment, Instagram's public web_profile_info endpoint β€” no Instagram username, password, or API key is needed at any point.

What's the difference between b2b and personal lead modes?

b2b mode keeps only corporate-looking (non-personal-suffix) emails and searches using 29 business-pattern queries; personal mode targets Gmail/Outlook-style addresses and can be narrowed with personalDomainFilter to specific domains.

Can I target a specific city or region?

Yes β€” locationQuery appends a location term to the underlying Google Search query (e.g. "Chicago"); it's a search-string filter, not a native Instagram geotag lookup, so results depend on whether that location appears in the matched page's text.

How does the scraper handle Google's anti-bot measures?

It fetches results through Chrome browser impersonation rather than raw requests, and on a detected block (small response body plus a block phrase, or a non-200 status) it automatically escalates from a direct connection to a datacenter proxy and then a residential proxy before giving up on that page.

Can I also extract phone numbers?

Yes, with extractPhone turned on β€” it scans the same result snippet for a phone-like number and normalizes it, optionally filtering to a specific country's dial code via the country input.

Can I enrich leads with real Instagram profile data?

Yes, with enrichProfile turned on β€” each lead gets its follower count, business-account flag, business category, verified status, bio, and external URL from Instagram's public profile endpoint, plus up to maxRelatedProfiles related/lookalike accounts.

How do I monitor new leads for a keyword set over time?

Schedule repeat runs of the same keyword and pattern set with Apify's Scheduler, then diff each new dataset export against the previous one on email to find new leads, and on mxFound/recommendation for shared leads to catch quality drift.

Does it work with Claude, ChatGPT, and AI agent frameworks?

Yes β€” it's callable as an HTTP endpoint by any agent framework, and it's also reachable through Apify's Actors MCP Server, which lets MCP-compatible clients like Claude Desktop call it as a registered tool.

Can I use it without managing proxies or Instagram credentials?

Yes. Apify Proxy escalation (direct to datacenter to residential) is handled automatically on blocks unless you set disableAutoProxyFallback, and no Instagram credentials are ever required.

Your feedback

Found a bug or missing a field? Let us know through the Actor's Issues tab on Apify Store or the Scrapier support channel β€” reports get read and help prioritize fixes.