Instagram User Search Scraper avatar

Instagram User Search Scraper

Pricing

from $5.00 / 1,000 instagram user founds

Go to Apify Store
Instagram User Search Scraper

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

Khadin Akbar

Maintained by Community

Actor stats

1

Bookmarked

14

Total users

8

Monthly active users

12 days ago

Last modified

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

  1. Add one or more keywords to Search keywords (e.g., fitness coach).
  2. Optionally set a follower band (Minimum followers / Maximum followers), Verified accounts only, or an Account type.
  3. 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

FieldTypeDefaultPurpose
searchQueriesstring[] (required)["fitness coach"]Keyword phrases used to find users; deduplicated, max 50.
maxResultsPerQueryinteger20Cap on unique users saved per keyword after filters (1–100).
maxResultsinteger200Global cap across all keywords in the run (1–1000).
minimumFollowersinteger0Exclude accounts below this follower count; 0 keeps everyone.
maximumFollowersinteger0Exclude accounts above this follower count; 0 sets no ceiling.
verifiedOnlybooleanfalseKeep only Instagram-verified accounts.
accountTypeenumanyany, personal, business, or professional.
includePrivateProfilesbooleanfalseAlso save private accounts when they match.
parseContactsbooleantrueParse public email/phone from bio text and bio links.
providerenumautoauto, 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:

FieldMeaning
username, fullName, profileUrl, userIdIdentity and canonical profile link.
biography, bioLinks[], externalUrlPublic bio text and the links published in it.
followerCount, followingCount, mediaCountAudience and activity counts at discovery time.
isVerified, isPrivate, isBusinessAccount, isProfessionalAccount, categoryAccount flags and Instagram category label.
email, phoneContacts parsed from public bio text; null when the bio publishes none.
matchedQuery, positionWhich keyword surfaced this user and its rank for that keyword.
provider, scrapedAtWhich 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.005 per unique user-found — charged only when a filtered, validated user row is actually saved.
  • $0.00005 actor 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 minimumFollowers and maximumFollowers to define your audience band once, at collection time.
  • Runs are fastest and lightest with parseContacts: false when 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 maxResults while 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.

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.