Instagram Influencer Search — Hashtag Search, Emails
Pricing
$10.00 / 1,000 profiles
Instagram Influencer Search — Hashtag Search, Emails
Scrape Instagram influencers by hashtag and keyword search — influencer discovery and creator search in any niche. Set a follower range and a minimum engagement rate; every profile returns emails, phone, bio links, business category and Reels views. No login needed.
Pricing
$10.00 / 1,000 profiles
Rating
0.0
(0)
Developer
Andrey Afanasenko
Maintained by CommunityActor stats
0
Bookmarked
24
Total users
16
Monthly active users
4 days ago
Last modified
Categories
Share
Give it a niche — a keyword or a hashtag — and get back the Instagram accounts in it, each enriched with email, phone, bio links, follower counts, engagement rate and Reels views. 20+ filters run before you pay attention to a row, so what lands in the dataset is the shortlist, not the raw search.
Instagram's own search gives you names. This actor gives you the accounts behind them, already qualified: set a follower range, an engagement floor and a language, and only the profiles that match your target persona reach the dataset. No login, no cookies, no Instagram account of yours involved.
🎯 What it does
You give the actor search terms — plain keywords, hashtags, or both:
- Search Queries are matched against Instagram account names and bios.
fitness coach,veterinario,marketing agency. Any language. - Search Hashtags collect the authors of that hashtag's top posts. Those accounts skew larger and already-popular, so a follower floor keeps a far higher share of them than plain keyword search does.
Every term is searched in parallel, and the results are merged round-robin — one candidate from each term in turn — so a single broad term cannot swallow your whole budget while a narrower one returns nothing.
For every account that comes back you get:
- Identity — handle (Account URL), Full Name, Profile Picture, verified flag.
- Audience — Followers Count, Following Count, Total Posts, Posts per Month, Last Post age in days.
- Reels analytics — Reels Count, Last Reel age, Median Views, Views/Followers ratio.
- Engagement — Avg Likes, Avg Comments, Median Engagement Rate, Quality flag (Good / Poor).
- Contact — Email, Email Source, Phone, External URL, Physical Address.
- Classification — Business Category, Detected Language, Account Type.
- Optional post sample — captions of the 8 most recent posts, plus contacts parsed out of them.
Then your filters run — follower band, engagement floor, language, business category, contact-channel presence, posting cadence, Reels view ratio, verification — and only the matches are saved.
⚡ Quick start
A minimal input that works on the free plan (5 accounts, no setup):
{"searchQueries": ["fitness coach"],"searchHashtags": ["personaltrainer"],"extractEmail": true}
Leave both search fields empty and the run does a small capped demo search instead of failing, so you can see the output shape before deciding what to ask for.
📦 Output sample
Every analyzed account is pushed to the dataset as one item. Here is a real row from a real run — the search was nike running with a 50 000-follower floor (Profile Picture URL and post captions truncated for readability):
{"Account": "https://instagram.com/nikerunning","Source": "Keyword Discovery","Full Name": "Nike Running","Followers Count": 6187625,"Following Count": 599,"Biography": "Don't lose your cool. \nAero-FIT is available now.","Email": "N/A","Email Source": "N/A","Phone": "N/A","External URL": "http://empli.fi/nikerunning","Category": "N/A","Address": "N/A","Profile Picture": "https://scontent.cdninstagram.com/v/t51.../profile.jpg","Reels Count": 12,"Last Reel (Days Ago)": 0,"Median Views": 282564,"Avg Likes": 10634,"Avg Comments": 0,"Views/Followers Ratio": "4.57%","Posts in Last 30 Days": 11,"Posts per Month": 11,"Total Posts": 2076,"Detected Language": "English","Last Post Within (Days)": 0,"Median ER": "0.13%","Quality": "Poor","Post 1": "Introducing air conditioning for athletes. Aero-FIT keeps 2x Olympic Medalist…","Post 2": "Don't lose your cool. No matter how hot it gets. Aero-FIT is coming soon.","Post 3": "Beat the heat. Introducing Aero-FIT, air conditioning for athletes…","Post 4": "Six cities. One starting line. Thousands of stories…","Post 5": "After a 10-month hiatus, @jakobing takes 5000m gold in Birmingham. Welcome back.","Post 6": "The harder you run, the harder you cool. Feel the airflow of Aero-FIT…","Post 7": "\"I really feel the air when I pick up the pace.\" When @kenny_bednarek turns up…","Post 8": "\"I don't feel the shirt. I feel air.\" For 100x Half-Marathon Champion Yin Xiao…","Analysis Status": "analyzed","Why Not Analyzed": "N/A"}
That "Quality": "Poor" on a 6-million-follower brand account is the actor working, not failing: a 0.13 % engagement rate is what a huge follower count usually buys, and it is exactly the row you would want filtered out of an outreach list. Set minEngagementRate and it never reaches your dataset.
Missing optional values come back as the string "N/A" rather than null, so every key is always present and downstream code (Sheets, Airtable, CSV) can rely on a stable shape. The full per-column schema — types, descriptions, examples — is in .actor/dataset_schema.json, which is also what an AI agent reads when it calls this actor through Apify's MCP server.
On the free plan, the results also tell you what was left behind. The free plan analyzes 5 discovered accounts per run. When a search term still had candidates left when the run stopped, the actor adds one extra row per term — "Analysis Status": "not_analyzed" and, in Why Not Analyzed, how many more accounts that term still had. Those rows come after your results, they are never charged, and a paid run never produces them.
🧭 When to use it
- Influencer sourcing. Name the niche, set a follower band (3 000–100 000 is the most common), and get creators in it with engagement rate already computed and emails already extracted.
- Lead generation. Search the category your buyers describe themselves with —
nutrition coach,dentist,wedding photographer— and get their contact details in one pass. - Hashtag research. Find who is actually behind a hashtag's top posts, not just the posts, then qualify them by audience size and engagement.
- New-market entry. Search in any language to build a first seed list in a country or vertical you have no accounts in yet.
- Competitor-adjacent discovery. Search the words your rivals use in their bios and see who else claims the same ground.
🎯 Example tasks
Ready-to-run examples — each opens a pre-configured task you can run in one click (no setup):
- Find influencers on Instagram by keyword — Search any niche and get the accounts in it, each with follower count, engagement rate, email, phone, website and business category.
- Find micro influencers by follower count — Set a follower range and a minimum engagement rate, and get creators in your niche that fit it, with contact details already attached.
- Build an Instagram influencer database — Run several niches at once and export one sheet: handle, followers, engagement rate, email, phone, website, category and Reels views.
- Find Instagram influencers with emails — Keep only the accounts that publish a way to reach them. Every row carries the email plus audience size, engagement rate and category.
- Find Instagram creators by hashtag — Give it a hashtag and get the accounts behind its top posts, each with follower count, engagement rate and public contact details.
🛠 Input
The input form is grouped into four sections:
| Section | Purpose |
|---|---|
| 🎯 Find accounts by keyword or hashtag | The search terms, how many pages to read per term, and the cost ceiling. |
| ⚙️ Data Extraction Options | Which enrichments to run (email, phone, posts, engagement). Off = skip the call → faster and cheaper. |
| 🔬 Advanced Filtering (Optional) | 20+ filters that drop non-matching accounts. |
| ▶️ Run & Storage Options | Resume from checkpoint, offline re-filter mode, exclusion list. |
The fields that matter most:
searchQueries— search terms, one per line. Single common words return far more candidates than long phrases.searchHashtags— hashtags, with or without#. Returns the authors of the hashtag's top posts.maxSearchPagesPerQuery— how deep to read each term's results (1–50, default 5). More pages = more candidates, slower.maxCountDiscovery— hard cost ceiling in accounts. Set it to your spend budget × 100 (e.g.1000= $10).minFollowers/maxFollowers— the most-used filter, set as a band (3 000–100 000 for micro-influencers).minEngagementRate— a common floor is 1–3 %.analyzeQuality— on by default; computes Engagement Rate and the Quality flag.extractPosts— fetch the 8 most recent captions; required forlastPostDays,minPostsInPeriod,keywordLocation=postsandsearchContactsInPosts.contactInfoType— keep only accounts that have the contact channel you will actually use.profileLanguage— restrict to one of 44 detected languages.
💰 Pricing
The actor uses Apify's Pay Per Event model with one single event:
| Event | Price | Triggered |
|---|---|---|
| Profile | $0.01 | Once per discovered account that is successfully retrieved and analyzed, whether or not it passes your filters. |
Accounts that could not be read — not found, private, or failed — are not charged. You are billed per account, not per API call, so maxCountDiscovery translates directly into your maximum spend.
Filters run after the fetch. An account has to be read before the actor can tell whether it matches your follower band or language, so a narrow filter stack costs the same as a wide one and returns fewer rows. Start loose, look at the yield, then tighten — and use Offline Mode (below) to re-filter what you already paid for, free.
🆓 Free vs paid plan
| Free plan | Paid plan | |
|---|---|---|
| Accounts per run | 5 | unlimited |
| Search terms per run | unlimited | unlimited |
| Filters (followers, language, engagement, …) | ✓ | ✓ |
| Reels analytics (Median Views, Views/Followers) | blanked | full |
| Offline re-filtering | ✓ | ✓ |
| Resume from checkpoint | ✓ | ✓ |
Upgrade to a paid plan to remove the 5-account cap and to see Reels view analytics.
🧪 Filter recipes
Micro-influencer sourcing (fitness / wellness)
{"searchQueries": ["fitness coach", "nutrition coach"],"searchHashtags": ["fitnesscoach", "personaltrainer"],"maxCountDiscovery": 500,"minFollowers": 3000,"maxFollowers": 100000,"minEngagementRate": 2,"extractEmail": true,"contactInfoType": "emailOrPhone","filterForInfluencers": true}
Local-business lead list
{"searchQueries": ["dental clinic", "dentist", "orthodontist"],"maxCountDiscovery": 300,"accountType": "business","extractPhysicalAddress": true,"locationKeywords": "London, Croydon, Wembley, Stratford, Camden, United Kingdom","hasWebsite": true}
extractPhysicalAddress adds the Address column so you can see exactly what each row matched — the filter itself works without it.
The Business-Address filter reads the address a business published about itself — not a place you search. Write it the way Instagram writes it: "Miami, Florida" in the US, Canada, Mexico and India (city, then state), "Berlin, Germany" everywhere else (city, then country in English). Six rules from our own run history:
- Separate terms with a comma. A space-separated list is read as one long term — of 21 runs that tried, one delivered.
- Give it a list, not a word. Name the city, the towns around it, and the region. Customers who wrote lists of six or more terms got rows 38% of the time; customers who never went past five, 11%. Terms are OR-ed — an extra term can only help, never hurt.
- Add the region written out. "Florida", "Ontario", "Germany", "Nigeria" — Instagram spells these in full; the field carries "United Arab Emirates", not "UAE", and a list of nothing but country abbreviations has not returned a row yet.
- Copy Instagram's spelling, accents included. "São Paulo", not "Sao Paulo".
- Search for business types, not people. "dental clinic" surfaces profiles with addresses; "fitness coach" surfaces creators, who have none.
- Neighborhoods work too. The street line is searched as well, so "Marina", "Lagos Island" or "Borivali West" can match where a city name is too broad.
Non-English market entry
{"searchQueries": ["coach immobilier", "agent immobilier"],"maxCountDiscovery": 200,"profileLanguage": "French","minFollowers": 1000,"extractEmail": true}
🔁 Resume / checkpoint
Long runs can be interrupted (timeout, manual stop, abort). The actor writes a checkpoint after every batch. To resume, run it again with clearSavedData unchecked — accounts already analyzed are not re-billed.
📡 Live status & storage records
| Storage key | Type | What it holds |
|---|---|---|
status.html | HTML page | Live progress, cost, ETA. Open it from the run's Storage tab. |
RUN_SUMMARY | JSON | Aggregate run statistics — counts, plan, filter breakdown, upstream request totals. |
SKIPPED_ACCOUNTS | JSON | Every account skipped, with reason and category (filter / not_found / private / error). |
USER_MESSAGE | JSON | The one thing this run most needs to tell you — a demo notice, a zero-result diagnosis, or a free-plan cap. |
FILTER_BURN_PREDICTION | JSON | Written whenever a post-fetch filter is active: how much of the fetch your filter stack is likely to reject. |
API_USAGE | JSON | Upstream request count for this run, split into fetches vs searches. |
🤖 Programmatic / API use
REST API:
curl -X POST "https://api.apify.com/v2/acts/afanasenko~instagram-influencer-search/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries": ["fitness coach"],"searchHashtags": ["personaltrainer"],"maxCountDiscovery": 100,"minFollowers": 3000,"maxFollowers": 100000}'
After the run succeeds, read rows from its default dataset; run-level statistics live in the RUN_SUMMARY record of the same run.
MCP / agentic clients (Claude, ChatGPT, Cursor, LangGraph, OpenAI Agents SDK, Mastra, …):
The actor is exposed as a tool through Apify's MCP server at mcp.apify.com. To mount it in your agent as a dedicated tool in one command:
$apify mcp install claude-code --tools afanasenko/instagram-influencer-search
Then ask in natural language — "find 50 fitness coaches with 10–50k followers and an engagement rate above 3%, with emails" — and the agent fills the input schema itself.
💡 Tips & best practices
- Start with no filters. Over-filtering is the most common cause of an empty run. Search filterless once to see what the term's pool looks like, then narrow.
- Filter offline, not online. Accounts are discovered before filters run — on the free plan only 5 of them — so one strict filter can empty a run. Harvest filterless first, then turn on Enable Offline Mode to try any filter combination against the accounts already saved. Re-filtering makes no requests and charges nothing.
- Combine keywords with hashtags. They surface different populations: keyword search reads names and bios, hashtag search reads who posts under the tag. Customers who use both get the widest funnel.
- Prefer short terms.
fitness coachreturns an order of magnitude more candidates thanonline fitness coach for women over 40. Narrow with the filters, not with the query. - Raise
maxSearchPagesPerQuerybefore adding terms. Reading deeper into one good term is usually cheaper than adding a term that overlaps it.
❓ FAQ
Q: How does the actor find accounts for a keyword?
A: It queries Instagram's own account search for each term — the same search the app performs — and reads as many result pages as maxSearchPagesPerQuery allows. For hashtags it reads the hashtag's top posts and takes their authors.
Q: Do I need an Instagram account, login, or cookies? A: No. You provide search terms and get public profile data back. No credentials of any kind are involved, so there is no risk to any Instagram account of yours.
Q: Why did my search return so few accounts?
A: Usually a long phrase. Instagram's search is biased toward short, high-volume terms. Try the two- or three-word version, add a hashtag, or raise maxSearchPagesPerQuery.
Q: Are filtered-out accounts charged?
A: Yes — an account must be fetched before it can be filtered, so it counts as one paid event even if a filter then rejects it. That is why the actor writes FILTER_BURN_PREDICTION before fetching and warns you when your filter stack looks too narrow.
Q: How is engagement rate calculated?
A: For each recent post, (likes + comments) / followers, then the median across the sample. The median resists viral outliers better than the mean.
Q: What does the Quality flag mean? A: A heuristic combining engagement rate and audience signals. Good = worth reaching out to. Poor = likely low-engagement or inflated. A quick filter, not a verdict.
Q: Why are my Reels metrics blank?
A: Reels analytics require a paid plan. On the free plan those columns return "N/A".
Q: Will I get the same accounts for the same term across runs? A: Mostly, but not exactly. Instagram's search ranking shifts day to day. Re-running the same term a week later typically overlaps 70–90 % with the previous list.
Q: Which input field names does the API expect?
A: searchQueries and searchHashtags (arrays of strings), maxSearchPagesPerQuery and maxCountDiscovery (numbers). Common wrong guesses — query, keyword, maxItems, maxResults, or the seed fields from the six-mode Profile Scraper — are not recognized; the run log and the run report name them back to you with the field you probably meant.
Q: Can I re-filter results without paying again? A: Yes. Turn on Enable Offline Mode and the actor re-applies your current filters to accounts cached from previous runs — no Instagram reads, no paid events.
Q: Can I schedule it? A: Yes, on any plan including free. Save your input as a Task in Apify Console, then add a Schedule to the Task (⋮ menu → Schedule).
🔗 Other Instagram scrapers (same author)
Pick the one that matches what you start with:
| You start with… | You want to find… | Use this actor |
|---|---|---|
| A keyword or a hashtag | The accounts in that niche, enriched and filtered | This actor |
| 1–5 seed handles you like | Similar / suggested accounts in the same niche | Instagram Related Profiles Scraper |
| One known account | Its full followers or following list, with filters and enrichment | Instagram Followers & Following Extractor |
| One known account | Track who follows / unfollows it over time (scheduled) | Instagram Follower Tracker |
| Anything else (handles, post links, locations, keywords) | All of the above plus five other discovery modes in one tool | Instagram Profile Scraper |
| A reel link or a creator handle | What their reels say and show — spoken transcript, on-screen text, hook and structure | Instagram Reel Script Extractor |
| An AI agent (Claude, Cursor, ChatGPT) | The same Instagram data from inside your agent — MCP tools it picks by intent | Instagram Profile MCP Server |
🛟 Support & feedback
- Open an issue on the actor's Issues tab in Apify Console — the fastest way to get a fix shipped.
- Feature requests in the same tab; we read every one.
- Ratings & reviews on the Apify Store page help other users find the actor.
⚖️ Disclaimer
This actor reads publicly available Instagram profile data. It does not bypass authentication, read private profiles, or interact with content on your behalf. Use it in compliance with Instagram's Terms of Service and applicable privacy laws (GDPR, CCPA) — for outreach lists, make sure you have a legitimate interest and a clear unsubscribe path. The contact details returned are what the profile owner chose to publish on Instagram.