Find Key Opinion Leaders (KOLs) in a given domain by combining web research with LinkedIn post search. Given a company/idea and target domain, generates authority keywords, searches LinkedIn posts to find prolific authors with high engagement, and merges with web-researched influencers. Use when someone wants to "find influencers in X space" or "who are the KOLs for Y industry."
npx gooseworks install --all # then, in Claude Code, Cursor, or Codex: /gooseworks use the kol-discovery skill
Find Key Opinion Leaders in any domain by searching LinkedIn posts for prolific, high-engagement authors and merging with web-researched influencers.
Core principle: Search for authority/thought-leadership keywords, not pain-language. We want people who shape conversation in the space — conference speakers, newsletter writers, podcast hosts, and prolific LinkedIn posters.
Ask the user these questions:
Based on intake, generate 15-25 topic/authority keywords. These are NOT pain-language — they're the terms thought leaders use when sharing expertise:
Also generate:
Present keywords to user for approval before running.
Save config in the current working directory or wherever the user prefers:
Config JSON structure:
{
"client_name": "example",
"domain_keywords": ["\"freight tech\" thought leadership", "supply chain innovation"],
"exclusion_patterns": ["hiring.*position", "we.re recruiting"],
"kol_title_keywords": ["vp", "founder", "analyst", "editor", "host"],
"vendor_exclude_keywords": ["software engineer", "saas", "recruiter"],
"domain_relevance_keywords": ["freight", "logistics", "supply chain"],
"country_filter": "",
"max_posts_per_keyword": 50,
"min_posts": 2,
"min_total_engagement": 50,
"top_n_kols": 50
}python3 skills/kol-discovery/scripts/kol_discovery.py \
--config kol-discovery.json \
--output-dir . \
[--test] [--web-kols kol-web-kols.json] [--yes]Flags:
--config (required) — path to client config JSON--output-dir — directory for output CSV (default: current working directory)--test — limit to 5 keywords (validation run)--web-kols — path to web-researched KOL JSON (agent generates this)--yes — skip cost confirmation prompts--max-runs — override Apify run limitWhat the script does:
apimaestro/linkedin-posts-search-scraper-no-cookies for each domain keywordCost estimate: ~$0.10 per keyword. Full run with 20 keywords: ~$2-3.
Always run with --test first.
Before or alongside the script, do web research to find known KOLs:
Save as JSON in the current working directory:
[
{
"name": "Jane Doe",
"linkedin_url": "https://www.linkedin.com/in/janedoe/",
"source": "FreightWaves conference speaker 2025",
"notes": "Hosts weekly logistics podcast"
}
]Pass to script via --web-kols.
Present results:
Common adjustments:
min_posts or min_total_engagement thresholdsCSV exported to the current working directory:
| Column | Description |
|---|---|
| Rank | Overall rank by KOL Score |
| Name | Full name |
| LinkedIn URL | Profile link |
| Headline | From LinkedIn |
| KOL Score | Composite score |
| Total Posts | Posts found in search |
| Total Reactions | Sum of reactions across posts |
| Total Comments | Sum of comments across posts |
| Avg Engagement | Average reactions+comments per post |
| Top Post URL | Highest engagement post |
| Top Post Preview | First 100 chars of top post |
| Source | post-data / web-research / both |
APIFY_API_TOKEN in .envapimaestro/linkedin-posts-search-scraper-no-cookies (keyword search)Trigger phrases:
With existing config:
python3 skills/kol-discovery/scripts/kol_discovery.py \
--config clients/example/configs/kol-discovery.json \
--output-dir clients/example/leads --yesDiscover rising category conversations, formats, sounds, questions, and creator patterns across social platforms, then separate durable demand signals from short-lived noise.
Turn TikTok, Instagram, YouTube, Facebook, X, LinkedIn, Reddit, or Rumble transcripts into timestamped hooks, claims, objections, proof, calls to action, sponsorship signals, and reusable content atoms. Use directly for transcript analysis or as support for creator, competitor, trend, demand, and repurposing work.
Produce a decision-ready brief of current brand, product, category, and competitor conversations across social platforms, including sentiment drivers, questions, risks, and growth opportunities.