Instagram User Search Scraper
Pricing
from $5.00 / 1,000 instagram user founds
Instagram User Search Scraper
Find Instagram users by keyword with bios, follower counts, verified and business flags, contact hints and provenance. No login. $0.005/user.
Pricing
from $5.00 / 1,000 instagram user founds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
1
Bookmarked
14
Total users
8
Monthly active users
12 days ago
Last modified
Categories
Share
Instagram User Search Scraper — Find Users by Keyword
Search Instagram for public users by keyword and the Actor returns structured, filterable user rows: username, full name, bio, follower/following/post counts, verified and business flags, Instagram category, bio links, and email or phone contacts parsed from public bios. Marketers, agencies, and researchers use it to turn niche phrases like "vegan bakery london" into deduplicated user lists with the audience-count and account-type fields they need for outreach. No Instagram login, no cookies, and no browser are involved — the Actor routes each keyword through managed public-data APIs and works with public accounts only.
Best fit for this Actor
Use this Actor when you start from a keyword and need a list of matching Instagram users — for example "vegan bakery london", "dental clinic dubai", or "fitness coach nyc" — with audience-size and account-type filtering applied before you pay for a row.
- Best fit: niche creator discovery, micro-influencer shortlists (set a follower band), local-business lead lists with public contact hints, and competitor account mapping by keyword.
- For posts, reels, or stories from the users you find, run Instagram Posts Scraper on the returned handles next.
- For hashtag-centered research, use Instagram Hashtag Scraper instead, and it covers hashtag volumes and top media.
- When you already know the exact handle, use Instagram Profile Scraper for a single deep profile, then enrich from there.
- Sibling routing: Instagram User Scraper covers a similar keyword-to-profile job with contact parsing focused on a single research thread; this Actor adds follower bands, verified-only and account-type filters, a global results cap, and a second provider route for resilience.
Focused standalone workflow
This Actor is designed as a focused standalone workflow: an agency building a micro-influencer outreach list for a fitness brand enters keywords like "fitness coach" with a 10K–100K follower band, includes business and creator accounts, and runs it. The dataset that comes back is already deduplicated across keywords, filtered to the audience band, and carries parsed bio emails where they are public — then feed it straight into a CRM. To map the audience behind a specific shortlisted creator, pass the handles to Instagram Followers Scraper as the next step.
Quick start
- Add one or more keywords to Search keywords (e.g.,
fitness coach). - Optionally set a follower band (Minimum followers / Maximum followers), Verified accounts only, or an Account type.
- Start the run. Each keyword returns up to Maximum results per keyword unique public users; the whole run stops at Maximum total results.
Input example
{"searchQueries": ["fitness coach", "personal trainer london"],"maxResultsPerQuery": 20,"maxResults": 100,"minimumFollowers": 10000,"maximumFollowers": 100000,"verifiedOnly": false,"accountType": "any","includePrivateProfiles": false,"parseContacts": true,"provider": "auto"}
Input contract
| Field | Type | Default | Purpose |
|---|---|---|---|
searchQueries | string[] (required) | ["fitness coach"] | Keyword phrases used to find users; deduplicated, max 50. |
maxResultsPerQuery | integer | 20 | Cap on unique users saved per keyword after filters (1–100). |
maxResults | integer | 200 | Global cap across all keywords in the run (1–1000). |
minimumFollowers | integer | 0 | Exclude accounts below this follower count; 0 keeps everyone. |
maximumFollowers | integer | 0 | Exclude accounts above this follower count; 0 sets no ceiling. |
verifiedOnly | boolean | false | Keep only Instagram-verified accounts. |
accountType | enum | any | any, personal, business, or professional. |
includePrivateProfiles | boolean | false | Also save private accounts when they match. |
parseContacts | boolean | true | Parse public email/phone from bio text and bio links. |
provider | enum | auto | auto, scrapeCreators, or sociaVault. |
Output: what one dataset row represents
Each dataset item is one unique public Instagram user matched by one keyword, already filtered and deduplicated. Field list verified against live runs:
| Field | Meaning |
|---|---|
username, fullName, profileUrl, userId | Identity and canonical profile link. |
biography, bioLinks[], externalUrl | Public bio text and the links published in it. |
followerCount, followingCount, mediaCount | Audience and activity counts at discovery time. |
isVerified, isPrivate, isBusinessAccount, isProfessionalAccount, category | Account flags and Instagram category label. |
email, phone | Contacts parsed from public bio text; null when the bio publishes none. |
matchedQuery, position | Which keyword surfaced this user and its rank for that keyword. |
provider, scrapedAt | Which data route returned the record and when it was collected. |
Output example
{"userId": "57054133744","username": "shotzbydreww","fullName": "Travel Photographer","biography": "Full Stack Creator \nOwner | Of @motionshiftmedia","followerCount": 84000,"followingCount": 1200,"mediaCount": 340,"isVerified": true,"isPrivate": false,"isBusinessAccount": false,"isProfessionalAccount": true,"category": "Photography Videography","externalUrl": null,"bioLinks": [],"email": null,"phone": null,"profileUrl": "https://www.instagram.com/shotzbydreww/","matchedQuery": "travel photographer","position": 1,"provider": "scrapeCreators","scrapedAt": "2026-08-18T00:00:00.000Z"}
How collection works
The Actor is a plain Node.js runtime with no browser. For each keyword it calls a managed Instagram-native profile-search API (ScrapeCreators) and normalizes every returned profile against the dataset contract. When that route is rejected, rate-limited, or down, the auto provider mode retries the keyword through a secondary route (SociaVault Google site-search) and rebuilds records from profile URLs and public count snippets. Both routes return public data only. You can force either route with the provider input.
Pricing and cost control
Billing is Pay per event + platform usage:
$0.005per uniqueuser-found— charged only when a filtered, validated user row is actually saved.$0.00005actor start.- Platform compute usage is passed through and billed separately; the live Pricing tab is the current source of truth for effective pricing.
Before the first charge the run prints its maximum event cost, e.g. 5 keywords × 20 results × $0.005 = $0.50 event cap, and it stops early at maxResults, maxResultsPerQuery, or the run-level charge limit (ACTOR_MAX_TOTAL_CHARGE_USD), whichever comes first. Filtering happens before charging, so rows rejected by your follower band or verified-only filter are free.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~instagram-user-search-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries": ["specialty coffee shop"],"maxResultsPerQuery": 10,"minimumFollowers": 1000,"parseContacts": true}'
The response contains a defaultDatasetId; fetch rows with GET /v2/datasets/{defaultDatasetId}/items?clean=true.
AI agent and MCP use
This Actor is MCP-ready through mcp.apify.com. Point an MCP client at khadinakbar/instagram-user-search-scraper and call it with a narrow, bounded prompt:
Find Instagram users matching the keyword "vegan bakery london". Keep public accounts in the 5K–100K follower band, parse public emails from bios, and return at most 20 matching profiles. Report username, followerCount, isVerified, email, and profileUrl per profile.
Agent guidance: every run ends with a terminal outcome in OUTPUT (COMPLETE, PARTIAL, VALID_EMPTY, INVALID_INPUT, UPSTREAM_FAILED, CONFIG_ERROR); read the dataset back via the run's defaultDatasetId for full rows; each row carries provider and scrapedAt provenance; event cost is $0.005 per saved row plus platform usage, so cap spend with maxResults; scope is public keyword search only, and pagination is controlled by maxResultsPerQuery per keyword.
Outcome and recovery semantics
Every run writes OUTPUT and RUN_SUMMARY with one terminal outcome: COMPLETE, PARTIAL, VALID_EMPTY, INVALID_INPUT, UPSTREAM_FAILED, or CONFIG_ERROR. Partial results (some keywords succeeded) succeed with the data saved; provider outages with zero useful rows end with a truthful UPSTREAM_FAILED record. A STATE record tracks seen usernames and counters so an aborted-and-resumed run skips users it already saved.
Guidance for reliable results
- Provide natural niche phrases (2–4 words) rather than single head terms; broad terms like "fitness" can legitimately return zero indexed matches, reported as
VALID_EMPTY. - Combine
minimumFollowersandmaximumFollowersto define your audience band once, at collection time. - Runs are fastest and lightest with
parseContacts: falsewhen you only need identity and counts. - If a keyword repeatedly returns nothing, retry it later or rephrase it; provider coverage of the public search index varies over time.
- Start with a small
maxResultswhile you tune filters, then scale up once the rows look right.
Workflow example
Keyword discovery here, then enrichment downstream: pass the username values from this dataset to Instagram Profile Scraper for full profile detail, then feed the same handles to Instagram Posts Scraper for recent content, and then to Instagram Followers Scraper to map the audience of shortlisted accounts.
Builder's note
I built this Actor after probing both provider routes with live keywords: the native profile-search route returns verified, business, and category flags directly, while the Google site-search route surfaces different, often larger accounts with count snippets that need careful parsing. I designed the filter set (follower bands, verified-only, account type) to run before any charge fires, because paying for rows you would discard is the fastest way to burn trust in a discovery tool. In my testing, the same broad keyword sometimes returned zero matches hours after returning a full page, so I made per-keyword coverage visible in RUN_SUMMARY instead of hiding it.
Data and legal boundary
This Actor processes publicly accessible Instagram profile data via managed APIs. It accesses public profiles only, and it respects Instagram's platform protections. Use it lawfully, respect Instagram's Terms of Service, only process data you have a lawful basis to collect, and honor data-subject requests for the lists you build.