| name | influencer |
| description | Research influencers on Instagram, TikTok, and X/Twitter through your browser |
| compatibility | Designed for Vellum personal assistants |
| metadata | {"emoji":"🔍","vellum":{"display-name":"Influencer Research","includes":["vellum-browser-use"]}} |
Use browser automation for collection and host_bash helper scripts for deterministic parsing, scoring, and comparison. All browser operations are executed through the assistant browser CLI, invoked via host_bash.
Required tools
host_bash for assistant browser CLI commands and helper scripts in scripts/.
Hard constraints
- Do not call
assistant browser chrome relay.
- Do not use legacy relay-backed influencer scripts.
Step graph (state machine)
Step 1: Route intent
Use deterministic routing when intent is unclear:
bun {baseDir}/scripts/influencer-intent.ts --request "<latest user request>" --has-candidates <true|false> --has-shortlist <true|false>
Use returned step to route to discover, enrich_profile, or compare_shortlist.
Step 2: Discover candidates (discover)
Instagram
- Navigate to keyword search/post surfaces.
- Snapshot + extract:
assistant browser --session influencer --json snapshot
assistant browser --session influencer --json extract --include-links
- Parse candidates:
bun {baseDir}/scripts/influencer-parse-candidates.ts --platform instagram --input-json '<json payload with extracted text/links>'
TikTok
- Navigate to user search page for query.
- Use
assistant browser --session influencer scroll + assistant browser --session influencer wait-for to load additional candidates.
- Extract and parse:
bun {baseDir}/scripts/influencer-parse-candidates.ts --platform tiktok --input-json '<json payload with extracted text>'
X/Twitter
- Navigate to people search view (
f=user).
- Snapshot + extract:
assistant browser --session influencer --json snapshot
assistant browser --session influencer --json extract --include-links
- Parse:
bun {baseDir}/scripts/influencer-parse-candidates.ts --platform twitter --input-json '<json payload with extracted text/links>'
Step 3: Enrich profiles (enrich_profile)
For each selected candidate profile:
- Navigate to profile URL.
- Snapshot + extract profile metadata (bio, follower counts, verification indicators).
- Score with criteria:
bun {baseDir}/scripts/influencer-score.ts --query "<user query>" --min-followers <n> --max-followers <n> --verified-only <true|false> --input-json '<json payload with profiles>'
- If themes are missing, enrich using:
bun {baseDir}/scripts/influencer-theme-extract.ts --bio "<bio>" --query "<user query>"
Step 4: Build shortlist (compare_shortlist)
Generate deterministic comparison output:
bun {baseDir}/scripts/influencer-compare.ts --limit <n> --input-json '<json payload with profiles and criteria>'
Present results grouped by platform with:
- Username / display name
- Followers (normalized)
- Verification status
- Theme highlights
- Profile URL
Retry and fallback policy
- Retry budget: 3 attempts for each state-changing browser step.
- After any navigation or click that changes DOM, run fresh
assistant browser --session influencer --json snapshot.
- If blocked by sign-in wall or challenge after retries, ask user to complete that step and resume from latest successful state.
Platform notes
- Instagram search often surfaces posts/reels before profiles; use author-handle pivot logic.
- TikTok search can require scroll cycles to load profile cards.
- X/Twitter should use people-search surfaces to avoid irrelevant mixed-content feeds.
Example helper payload shape
{
"phase": "discover",
"context": { "platform": "instagram" },
"extracted": {
"text": "...",
"links": ["https://www.instagram.com/example/"]
},
"userIntent": "find fitness creators"
}