Instagram Profile Lead Scraper By Keyword
Pricing
$19.99/month + usage
Instagram Profile Lead Scraper By Keyword
Find targeted Instagram leads using keywords with the Instagram Profile Lead Scraper By Keyword. Extract usernames, bios, follower counts, emails, websites, and profile links automatically. Ideal for influencer discovery, outreach campaigns, and niche audience research.
Pricing
$19.99/month + usage
Rating
0.0
(0)
Developer
Scraper Engine
Maintained by CommunityActor stats
1
Bookmarked
35
Total users
0
Monthly active users
9 days ago
Last modified
Categories
Share
Instagram Profile Lead Scraper โ By Keyword ๐ฑ๐
Give it a keyword. It gives you back Instagram profiles that publish an email address in their bio or captions, ranked by how well they match that keyword.
This is the keyword-driven member of the family. Instead of firing one query and hoping, it expands every keyword into several complementary Instagram-native search angles, pools everything it finds, de-duplicates by profile, and then ranks the pool by keyword relevance before saving the best leads.
"fitness coach"โโโ exact phrase โ "fitness coach"โโโ hashtag โ "#fitnesscoach", "#fitness"โโโ bio contact-intent โ "fitness coach" ("dm for" OR "email for" OR "inquiries" OR "collabs" โฆ)โโโ profile audience โ "fitness coach" "followers"โโโ loose terms โ "fitness" "coach"โโโ your own extras โ whatever you add in โ Extra Keyword Variants
Each angle surfaces a different slice of the index. In live testing the hashtag angle alone returned nine profiles that the plain-phrase angle never showed.
๐ Where the email actually comes from
We think you deserve a straight answer instead of marketing copy.
The actor fetches each profile for real and reads its actual bio. Instagram serves a normal browser a ~620 KB JavaScript shell with no profile data in it โ that is the dead end most scrapers hit. Served to a declared crawler user-agent, the same URL returns a ~1.2 MB server-rendered document containing the real profile record: biography, full_name, follower_count, and the account's own recent post captions.
| What we tried, live from Apify | Result |
|---|---|
instagram.com/<handle>/ with a desktop Chrome UA | ~620 KB JS shell โ no biography, no counts. |
instagram.com/<handle>/ with a crawler UA | ~1.2 MB, real profile data. This is what the actor uses. |
api/v1/users/web_profile_info/ + x-ig-app-id | HTTP 429 on every proxy group. Dead. |
| Apify UNBLOCKER group | TLS failure. |
| Brave / Bing / DuckDuckGo / Mojeek / Startpage / Ecosia | 429, 202 block pages, 403, or no site: support. Unusable. |
So the pipeline is genuinely two-stage:
- DISCOVER โ the 6-angle keyword expansion finds which accounts are relevant.
- FETCH โ every discovered handle's real profile page is fetched through a residential proxy, and the email is read from the account's own profile.
๐ Attribution โ why a row's email really belongs to that account
The naive version of this scraper reads the email out of a search-result snippet. That is how you end up asserting that @indianyogaassociation's contact address is aymyogaschool@gmail.com โ an address that merely appeared in a caption on one of its pages. The row says "this account's email", so a near-miss is a wrong value, not a thin one.
Every row therefore carries an attributionConfidence:
| Value | Evidence | emailSource |
|---|---|---|
bio_verified | Read from the account's own bio field on its fetched profile. Strongest. | instagram_profile_bio |
own_page_verified | The account repeatedly publishes it in its own captions, or it carries the account's own name. | instagram_own_caption |
handle_matched | Opt-in fallback only: a search snippet address that matches the account name. | google_serp_caption_snippet |
A one-off address in a single caption is rejected, even when it is the only address on the page โ verified case: @dougsyoga's lone caption address was the event registrar's inbox, not his. Addresses that share only a generic trade word (yoga, studio, academy) or the search keyword itself are rejected too, since two unrelated businesses in the same niche always share those.
Default is first-party only (bio_verified + own_page_verified). If that yields fewer leads than you asked for, the actor says so in the log rather than padding the list.
๐ Output fields
Every field below is populated on every row. We do not emit blank columns.
| Field | Example | Description |
|---|---|---|
network | instagram.com | Source network. |
keyword | yoga teacher | The keyword you asked for. |
title | International Yoga Teacher (@yogagise) | Headline of the result that discovered this account. |
description | `International Yoga Teacher | |
| Lifestyle, Travelโฆ` | The account's real bio, fetched from its profile. | |
url | https://www.instagram.com/yogagise/ | Canonical profile URL. |
email | yogagise@gmail.com | The contact address, attributed to this account. |
handle | yogagise | Instagram username. |
fullName | International Yoga Teacher | Real display name from the fetched profile. |
followerCount | 12599 | Real follower count from the fetched profile. |
matchedKeyword | yoga teacher | Which of your keywords produced this lead. |
keywordVariant | hashtag #yogateacher | Which expansion of that keyword found it. |
sourceType | profile_page / post_page / reel_page | Which surface discovered the account. |
emailSource | instagram_profile_bio | Where the address was actually read from. |
handleSource | result_url / title_handle / cite_breadcrumb / source_breadcrumb | How the username was recovered. |
attributionConfidence | bio_verified | Strength of the emailโaccount link (see table above). |
relevanceScore | 13.55 | Keyword-relevance score. |
keywordRank | 1 | Position within its keyword, best first. |
โ๏ธ Input
| Input | Required | Default | What it does |
|---|---|---|---|
| ๐ Keywords | โ | ["fitness coach"] | One or more keywords. Each is expanded into several search angles. |
| ๐ Platform | โ | Instagram | Locked to Instagram today. |
| ๐ Location Filter | โ | (empty) | Adds a city/region term to every query. |
| ๐ง Email Domains Filter | โ | ["@gmail.com"] | Keep only leads on these domains. Empty = all major free-mail providers. |
| ๐ Maximum Leads per Keyword | โ | 20 | How many ranked leads to save per keyword. |
| โ๏ธ Engine | โ | legacy | Processing engine. |
| #๏ธโฃ Hashtag Discovery | โ | true | Also search the hashtag spelling of each keyword. |
| โ Extra Keyword Variants | โ | [] | Your own extra search phrases, added to the automatic expansions. |
| ๐ค First-Party Emails Only | โ | true | Keep only emails read from the accountโs own profile. Turn OFF to also accept name-matched search-snippet addresses. |
| ๐ Pages per Keyword Variant | โ | 2 | Result pages (20 each) to read per variant. |
| ๐ Minimum Relevance Score | โ | 0 | Drop leads scoring below this. Good leads typically land at 8โ14. |
| ๐ก๏ธ Proxy Configuration | โ | GOOGLE_SERP | Leave it alone unless you know why you are changing it. |
How ranking works
The actor gathers a candidate pool roughly twice the size of your quota, then scores each profile:
- +3 the full keyword phrase appears in the title/bio/handle
- +1 per significant keyword token found
- +2 a keyword token appears inside the username (
@lucindabucatfitnessfor "fitness coach") - +1.5 per hashtag form matched
- +2.5 the lead came from an actual profile page rather than a post
- up to +2.5 for audience size, when the result exposes a follower count
- +1 the email local part is built from the handle (a real business account)
The top maxEmails leads are saved, best first.
๐ How to use
- Open the actor on Apify and click Try for free.
- Type one or more keywords (be specific โ "vegan meal prep coach" beats "coach").
- Optionally set a location and an email domain filter.
- Set Maximum Leads per Keyword.
- Start the run, then export the dataset as CSV, JSON or Excel.
๐ก If you get fewer leads than you asked for, that is the honest answer: only a fraction of profiles publish an email in a way search engines indexed. Widen the keyword, drop the location filter, raise Pages per Keyword Variant, or clear the Email Domains Filter.
โ๏ธ Compliance
This actor reads publicly indexed search results only. It does not log in, does not bypass authentication, and does not touch private accounts or content behind Instagram's login wall. Contact data you collect is personal data โ use it in line with GDPR/CCPA and applicable anti-spam law, and honour opt-outs.
๐ฌ Support and feedback
- Bug reports: open a ticket in the Issues section
- Custom features / enterprise:
dev.scraperengine@gmail.com