Instagram Creator Discovery Keyword Niche avatar

Instagram Creator Discovery Keyword Niche

Pricing

from $4.00 / 1,000 discovered accounts

Go to Apify Store
Instagram Creator Discovery Keyword Niche

Instagram Creator Discovery Keyword Niche

Pricing

from $4.00 / 1,000 discovered accounts

Rating

0.0

(0)

Developer

Delowar Munna

Delowar Munna

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Instagram Creator Discovery by Keyword / Niche

Instagram Creator Discovery by Keyword / Niche

Find public Instagram creators and business accounts by keyword or niche. Export flat, CSV-friendly discovery results with profile metrics, bio signals, activity snapshot, follower buckets, and lead-fit fields for outreach, research, and creator scouting.

This is a discovery-first specialist actor — not a generic Instagram scraper. It turns niche ideas into structured account lists you can open in Google Sheets, Airtable, Notion, or a CRM without cleanup.

What it does

  1. Takes a list of keywords or niche phrases (e.g. "fitness coach australia", "melbourne beauty creator", "sydney electrician").
  2. Runs an account search for each keyword (up to 50 accounts per keyword).
  3. Enriches each discovered account with lightweight public profile data (bio, followers, category, external link, etc.).
  4. Computes match signals (bio/name keyword match, business/creator/local signals), follower bucket, and a 0–100 leadFitScore with a plain-English leadFitReason.
  5. Deduplicates the same account across multiple keywords and emits one flat row per account.

You can also skip the search and pass handles or profile URLs in seedUsernames — they're enriched and scored the same way.

Input

FieldTypeDescription
keywordsstring[]Keywords or niche phrases to discover accounts for. Provide keywords, seedUsernames, or both.
seedUsernamesstring[]Instagram handles or profile URLs to enrich directly, skipping search.
maxResultsPerKeywordintegerCap per keyword (default 50, maximum 50).
searchTypestringprofile (default) or mixed. Both run the same account search.
countryHintstringOptional country hint for localSignal / locationHint heuristics.
languageHintstringOptional two-letter language hint.
minFollowers / maxFollowersintegerFollower-range filters (0 = disabled). See Filters and the lookup cap.
requireBusinessSignalsbooleanOnly keep accounts that look business/creator-like.
requireExternalLinkbooleanOnly keep accounts with a public external URL.
includeProfileEnrichmentbooleanFetch each account's public profile and recent posts (default true). Without it, rows carry only the search preview: no follower counts, bio or activity fields.
dedupeAcrossKeywordsbooleanDefault true.
includeKeywordMetadatabooleanInclude keyword context fields on each row.
maxConcurrencyintegerProfiles fetched in parallel (default 1, maximum 5).

See input_schema.json for the full schema.

Example inputs

Two niche keywords plus one seed account, about 10 accounts each — the run behind the sample output and screenshot below:

{
"keywords": ["fitness coach australia", "melbourne beauty creator"],
"seedUsernames": ["kayla_itsines"],
"maxResultsPerKeyword": 10,
"countryHint": "Australia",
"languageHint": "en",
"includeProfileEnrichment": true,
"dedupeAcrossKeywords": true,
"includeKeywordMetadata": true,
"maxConcurrency": 2
}

Lead list for outreach — small-to-mid accounts that link out to a website or booking page:

{
"keywords": ["sydney personal trainer", "brisbane yoga studio", "perth pilates instructor"],
"maxResultsPerKeyword": 50,
"countryHint": "Australia",
"minFollowers": 1000,
"maxFollowers": 100000,
"requireExternalLink": true,
"includeProfileEnrichment": true,
"dedupeAcrossKeywords": true
}

Enrich known accounts only, no search:

{
"keywords": [],
"seedUsernames": ["@kayla_itsines", "https://www.instagram.com/bhanu_padmini/"]
}

Output

One flat row per discovered account. Field groups (PRD §11):

  • A. Discovery context: inputKeyword, normalizedKeyword, searchType, resultRank, keywordResultPosition, discoverySource, discoveryTimestamp, runId
  • B. Account identity: username, fullName, profileUrl, instagramUserId, isVerified, isPrivate, isBusinessAccount, categoryName
  • C. Profile summary: biography, externalUrl, hasExternalUrl, profilePicUrl, followersCount, followsCount, postsCount, reelsCount, followersBucket
  • D. Niche / match: matchedKeyword, bioKeywordMatch, nameKeywordMatch, keywordMatchType, nicheHint, businessSignal, creatorSignal, localSignal, locationHint
  • E. Activity / quality: lastPostTimestamp, daysSinceLastPost, recentPostCount, recentReelCount, recentActivitySignal, engagementSnapshotAvailable, avgLikesRecent, avgCommentsRecent, engagementRateEstimate, contentFormatMix (best-effort, nullable)
  • F. Commercial / outreach: contactabilitySignal, hasEmailInBio, hasPhoneInBio, externalUrlDomain, commercialIntentSignal, brandCollabSignal, leadFitScore, leadFitReason
  • G. Metadata: scrapedAt, sourceType, actorVersion

Follower buckets

0-999 · 1k-4.9k · 5k-9.9k · 10k-49.9k · 50k-99.9k · 100k-499.9k · 500k+

Dataset views

Three ready-made table views are configured. Each one shows a different set of columns over the same rows; sort or filter by leadFitScore, isVerified or isBusinessAccount in the Console or your spreadsheet to narrow the list.

  • Discovered Accounts — keyword context, identity, profile metrics, match signals and the lead-fit score
  • Qualified Leads — outreach columns: category, followers, bio, external link, bio email/phone, score and reason
  • Verified or Business Accounts — verification and business flags, category, followers and score

Discovered Accounts (from the example run above):

Discovered Accounts table view

Sample output

One real row from the example run (profilePicUrl omitted for length):

{
"inputKeyword": "melbourne beauty creator",
"normalizedKeyword": "melbourne beauty creator",
"searchType": "profile",
"resultRank": 11,
"keywordResultPosition": 1,
"discoverySource": "tikhub_v2_search_users",
"username": "bhanu_padmini",
"fullName": "Bhanu Karanam | Melbourne Beauty Creator",
"profileUrl": "https://www.instagram.com/bhanu_padmini/",
"instagramUserId": "8653260855",
"isVerified": false,
"isPrivate": false,
"isBusinessAccount": false,
"categoryName": "Digital creator",
"biography": "🇮🇳 - 🇦🇺 \n Makeup, Skincare & Some Hair care. \n🫶🏻 Acne Prone With Scarring. \n💌 bhanukaranam9@gmail.com\n#acneproneskinapproved",
"externalUrl": "https://linktr.ee/Embraceyourself",
"hasExternalUrl": true,
"followersCount": 3562,
"followsCount": 3742,
"postsCount": 336,
"followersBucket": "1k-4.9k",
"matchedKeyword": "melbourne beauty creator",
"bioKeywordMatch": false,
"nameKeywordMatch": true,
"keywordMatchType": "exact",
"nicheHint": "Digital creator",
"businessSignal": true,
"creatorSignal": true,
"localSignal": false,
"locationHint": null,
"lastPostTimestamp": "2026-10-28T05:50:59.000Z",
"daysSinceLastPost": 0,
"recentPostCount": 12,
"recentReelCount": 6,
"recentActivitySignal": true,
"engagementSnapshotAvailable": true,
"avgLikesRecent": 13,
"avgCommentsRecent": 12,
"engagementRateEstimate": 0.7,
"contentFormatMix": "images:6|videos:0|reels:6",
"contactabilitySignal": true,
"hasEmailInBio": true,
"hasPhoneInBio": false,
"externalUrlDomain": "linktr.ee",
"commercialIntentSignal": true,
"brandCollabSignal": true,
"leadFitScore": 80,
"leadFitReason": "name matches keyword; exact phrase match; business signal; has external link",
"scrapedAt": "2026-10-29T02:02:22.417Z",
"sourceType": "instagram",
"actorVersion": "1.0"
}

Activity fields are best-effort: an account whose recent posts aren't returned has null for lastPostTimestamp, recentPostCount, avgLikesRecent and the rest of group E. localSignal and locationHint are read from the bio (a 📍 pin, "based in …", or your countryHint), not from the username.

Filters and the lookup cap

The follower, link and business filters need each account's profile, so they apply after the profile is fetched. A run that fetches 25 profiles producing no row (filtered out or unavailable), and at least three times as many as it returns, stops looking up new profiles and skips its remaining keywords. Normal runs never reach this; very strict filters can return fewer accounts than exist. RUN_SUMMARY.workCap shows whether it applied. To get more accounts, loosen the filters or add more specific keywords.

Lead-fit score

leadFitScore is a 0–100 heuristic adapted from PRD §13. Positive signals: keyword match in name or bio, verified, business/creator signal, external link, strong follower range, recent activity. Negative signals: private account, empty bio, no keyword match, inactive account. leadFitReason is a short plain-English explanation — not a definitive quality truth.

Pricing

Pay-per-event:

  • Discovered Account — one event per account row delivered to your dataset, after all filters pass. Accounts removed by your filters, duplicates across keywords, and profiles that could not be fetched are not charged.
  • Actor start — Apify's standard start fee, charged by Apify when a run starts and scaled by the run's memory.

Your bill is the start fee plus charged_events × price_per_event. Live rates, which can differ by Apify plan, are on the actor's Pricing tab; this README deliberately doesn't quote figures.

Compliance

Only public Instagram data is used, retrieved through TikHub (a third-party Instagram data API). The actor does not:

  • access private content
  • bypass account permissions
  • guarantee contact extraction
  • automate outreach or messaging

Local development

cd actor
npm install
$env:TIKHUB_API_KEY = "<key>" # TikHub key; on Apify it comes from a secret
npm start # run with INPUT.json
npm run dev # run with local storage

Do not run apify push unless you are the repository owner deploying the actor — deployment is a manual step.