Instagram Keyword Scout
Pricing
from $3.00 / 1,000 result items
Instagram Keyword Scout
Find public Instagram post/reel candidates from keywords first, with optional aliases for better coverage and explicit shortage diagnostics.
Pricing
from $3.00 / 1,000 result items
Rating
0.0
(0)
Developer
seungkyu cho
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Share
Low-cost Apify Actor for finding public Instagram post/reel candidates from niche keywords, influencers, brands, UGC research, and optional alias testing.
This Actor is not a broad Instagram scraper replacement. It is a focused discovery tool: start with keywords only, inspect public candidate pages, resolve a controlled number of post/reel rows, and explain what worked, what was duplicated, and why a target was short. Add aliases later when you want better coverage or cleaner results.
Who It Is For
- K-pop, creator, model, cosplay, local trend, and niche keyword scouting
- brand and UGC candidate discovery before manual review or AI enrichment
- optional alias testing across names, romanized names, usernames, and hashtag variants
- small repeatable research batches where cost, duration, and shortages must be visible
Product Ladder
| Preset | Goal | Internal settings |
|---|---|---|
| Scout 25 | Cheap proof that keyword-only discovery works | target 5 per keyword, total cap 15 media rows |
| Scout 100 | Standard validation batch | target 25 per keyword, total cap 100 media rows |
| Advanced 300 | Slower, higher-cost research batch | target 50 per keyword, total cap 300 media rows, checkpoint on |
Keep the customer promise modest: public candidate discovery with diagnostics. Do not promise full Instagram coverage, private data, login bypass, comments at scale, or complete metadata for every row.
Validated Smoke Run
The current Scout 25 alias-assisted flow was validated on Apify Cloud on 2026-07-06.
Run: zgSx3r5DrlXppu5jrBuild: 1.1.45Dataset: ObazFo7lWpER7yKrfDuration: 141.105s wall timeCost: $0.01637Run options: 2048 MB memory, 1800s timeoutRows: 19 total, 3 search rows, 15 media rows, 1 runSummary rowQuality: 15/15 usable media rows, 0 failed rows, 0 target shortagesTop candidates: #aespakarina, #kimchaeyeon, #seoulfood
Use this as a smoke-test expectation, not a guarantee. Instagram public-page availability changes, keyword-only runs can be blocked, and some niches benefit from adding aliases after the first run.
Quick Start
npm installnpm run buildnpm run dev
For a deployable release build:
$npm run build:release
Plain npm run build only compiles TypeScript. build:release updates package.json, package-lock.json, and .actor/actor.json together. Apify Actor source versions use MAJOR.MINOR, while npm package versions keep semver patch numbers.
Basic Apify Input
The Apify form has only three fields.
Keywordskarinakim chaeyeonseoul foodResult sizeScout 25 - cheapest first runAliasesLeave empty for the first run.
The Actor automatically tries exact, compact hashtag, underscore hashtag, profile guess, and Instagram keyword-search candidates. For example, kim chaeyeon can produce #kimchaeyeon, #kim_chaeyeon, @kimchaeyeon, and @kim_chaeyeon candidates.
Aliases are optional. Add them after the first run when a niche needs better coverage:
karina: aespakarina, karinaaespa, katarinabluu, yujiminkim chaeyeon: kimchaeyeon, chaeyeon, tripleschaeyeon, kim chae yeonseoul food: seoulfood, seoul cafe, korean food, seoul eats
The Store form intentionally hides crawler settings. Result size chooses the internal budget, concurrency, checkpoint, and discovery settings for you.
Mobile Run Flow
When running from a phone, keep the first pass small:
- Paste 1-3 keywords into
Keywords, one per line. - Keep
Result sizeatScout 25 - first low-cost check. - Leave
Aliasesempty, run once, then inspect therunSummaryrow. - Add aliases only for weak keywords or noisy candidates, then rerun.
The fastest mobile decision is the final runSummary: check total rows, usable media rows, failed rows, target shortages, and top candidates before opening the full JSON export.
{"keywords": "karina\nkim chaeyeon\nseoul food","resultSize": "scout25","keywordAliases": ""}
For reusable starting points, see:
examples/scout-25-input.jsonexamples/with-aliases-input.jsonexamples/scout-100-input.jsonexamples/debug-aliases-input.jsonfor internal troubleshootingdocs/LAUNCH_CHECKLIST.ko.mddocs/STORE_LISTING_DRAFT.mddocs/CLEAN_DEPLOY.md
Interpreting Results
The Actor writes normalized records to the default Apify dataset:
search: keyword discovery summarysearchCandidate: individual candidate URL whenoutputSearchCandidatesis enabledpostorreel: resolved public media rowprofile: direct profile or fallback profile rowrunSummary: final counts, shortages, duplicate counts, and keyword qualityfailed: unsupported, blocked, or unresolved URL
Important diagnostics:
collection.shortageandcollection.shortageReasoncollection.zeroLinkCandidatescollection.failedCandidatesquality.loginWallDetectedusability.usablekeywordRelevance.scorerunSummary.searchQuality.successPatterns
Runs fail intentionally when a target-bearing keyword run produces zero usable media rows. Smaller target shortages stay as partial results. The dataset still includes search and runSummary rows so the operator can see whether the cause was NO_DISCOVERED_LINKS, login-wall blocking, filtering, or another shortage reason.
Operational Checks
After an Apify run, export the dataset as JSON or JSONL and summarize it locally:
$npm run summarize:dataset -- path\to\dataset-items.json
The summary reports row counts, usable media rate, shortage reasons, top scout candidates, and weak keywords. For machine-readable output:
$npm run summarize:dataset -- path\to\dataset-items.json --json
Before release:
npm run verifynpm run checknpm testnpm run build
The public Store input intentionally exposes only keywords, resultSize, and keywordAliases. The runtime still accepts advanced JSON fields for internal troubleshooting and backwards compatibility.
Recommended Apify default run options:
- memory:
2048 MB - timeout:
1800 seconds
The last Scout 25 cloud validation peaked near 1 GB of memory, so 1024 MB is too close for stable Playwright runs. 2048 MB keeps roughly 2x headroom while avoiding the avoidable compute cost of 4096 MB. Keep 4096 MB as the maximum for manual recovery runs, not the default.
Advanced Batch Guidance
For 300+ item batches, use resultSize: "advanced300". The Actor turns checkpointing on by default for that preset. Treat these as advanced operations, not the default customer path.
{"keywords": "karina\nkim chaeyeon\nkian84\nbeauty\nfood\nfashion\nseoul\nkpop\ncafe\nhotel","resultSize": "advanced300","keywordAliases": ""}
Architecture
src/main.ts-> reads Actor input-> coordinates keyword discovery, direct targets, checkpointing, and runSummarysrc/router.ts-> routes profile, post, reel, and generic page requests-> writes normalized records to the default datasetsrc/extractors/-> page extraction onlysrc/resolvers/-> merges meta, embedded payload, visible signals, search discovery, and relevancesrc/state/-> budget, dedupe, and checkpoint helperssrc/local/-> local web UI for manual URL testing
Cost Strategy
The first version uses Apify Dataset and KeyValueStore only. Add external databases, queues, paid proxies, or AI enrichment only after there is evidence that the Actor needs them.
Deferred until demand is proven:
- automatic login/session operation
- private content access
- deep comment collection
- media file downloads
- AI enrichment
- external databases or queues
Compliance Notes
Use this Actor only for collection that is permitted by applicable law, platform terms, and account permissions. Keep rate limits conservative and avoid collecting private or sensitive personal information unless you have a lawful basis and explicit permission.