Find Key Opinion Leaders in a given domain by combining web
Kol discovery

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…
--- name: kol-discovery description: > 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." tags: [outreach] --- # KOL Discovery 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. ## Phase 0: Intake
Overview
Find Key Opinion Leaders in any domain by searching LinkedIn posts for prolific, high-engagement authors and merging with web-researched influencers.
Manual install (npx, ZIP)
npx skills add gooseworks-ai/goose-skills --skill kol-discovery -g -a claude-codemkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/gooseworks-ai/goose-skills/tar.gz/615c685f34f8 \
| tar -xz -C ~/.claude/skills --strip-components=4 goose-skills-615c685f34f8/skills/social/capabilities/kol-discoveryNew-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/6629016e20fbc2b7265d/kol-discovery.zip" -OutFile "$env:TEMP\kol-discovery.zip"; Expand-Archive "$env:TEMP\kol-discovery.zip" -DestinationPath "$HOME\.claude\skills" -ForceConnects with Agent Alley MCP · agentalley.io/mcp
Files included
SKILL.md6.1 KBskill.meta.json286 Bscripts/1 file · 22.3 KB
Read the files here
Show the full text167 lines
KOL Discovery
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.
Phase 0: Intake
Ask the user these questions:
Domain & Audience
- What does your company/product do? What space are you in?
- What specific domain or topic are the KOLs you want to find expert in?
- Who is your target audience? (The people the KOLs influence)
- Any KOLs you already know about? (LinkedIn URLs — these become the baseline)
- Anyone to EXCLUDE? (Competitors, your own team, irrelevant voices)
Phase 1: Generate Domain Keywords
Based on intake, generate 15-25 topic/authority keywords. These are NOT pain-language — they're the terms thought leaders use when sharing expertise:
- Industry terms — "freight tech", "supply chain innovation"
- Thought leadership signals — "lessons learned in logistics", "future of dispatch"
- Conference/event terms — "supply chain summit keynote"
- Content creator signals — "newsletter freight", "podcast logistics"
Also generate:
- KOL title keywords — titles that signal thought leadership (vp, founder, analyst, editor, host)
- Vendor exclusion keywords — titles to filter out (software engineer, recruiter, saas)
- Domain relevance keywords — core industry terms for relevance scoring
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
}
Phase 2: Run KOL Discovery Pipeline
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 limit
What the script does:
- Keyword search —
apimaestro/linkedin-posts-search-scraper-no-cookiesfor each domain keyword - Author aggregation — Group posts by author, compute engagement metrics
- Scoring — Composite KOL score: engagement volume (log-scaled) + consistency (post count) + quality (avg engagement) + relevance (keyword breadth) + web research bonus
- Merge — Combine post-data KOLs with web-researched KOLs, flag overlaps
- Export — Ranked CSV
Cost estimate: ~$0.10 per keyword. Full run with 20 keywords: ~$2-3.
Always run with --test first.
Phase 2b: Web Research (Agent-Driven)
Before or alongside the script, do web research to find known KOLs:
- Search for "top [industry] influencers on LinkedIn"
- Find conference speakers, newsletter authors, podcast hosts
- Check industry publications for frequent contributors
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.
Phase 3: Review & Refine
Present results:
- Top 20 KOLs — rank, name, headline, KOL score, total engagement, top post
- Source breakdown — how many from post-data vs web-research vs both
- Keyword performance — which keywords surfaced the most KOLs
Common adjustments:
- Too many irrelevant authors — refine domain keywords, add exclusion patterns
- Missing known KOLs — add more keyword variants, expand web research
- Too few results — lower
min_postsormin_total_engagementthresholds
Phase 4: Output
CSV 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 |
Tools Required
- Apify API token — set as
APIFY_API_TOKENin.env - Apify actors used:
apimaestro/linkedin-posts-search-scraper-no-cookies(keyword search)
Example Usage
Trigger phrases:
- "Find KOLs in the freight/logistics space"
- "Who are the influencers in [industry]?"
- "Discover thought leaders for [domain]"
- "Run KOL discovery for [client]"
With existing config:
python3 skills/kol-discovery/scripts/kol_discovery.py \
--config clients/example/configs/kol-discovery.json \
--output-dir clients/example/leads --yes
| 1 | |
| 2 | name kol-discovery |
| 3 | description > |
| 4 | Find Key Opinion Leaders (KOLs) in a given domain by combining web research |
| 5 | with LinkedIn post search. Given a company/idea and target domain, generates |
| 6 | authority keywords, searches LinkedIn posts to find prolific authors with |
| 7 | high engagement, and merges with web-researched influencers. Use when someone |
| 8 | wants to "find influencers in X space" or "who are the KOLs for Y industry." |
| 9 | tags [outreach] |
| 10 | |
| 11 | |
| 12 | # KOL Discovery |
| 13 | |
| 14 | Find Key Opinion Leaders in any domain by searching LinkedIn posts for prolific, high-engagement authors and merging with web-researched influencers. |
| 15 | |
| 16 | **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. |
| 17 | |
| 18 | ## Phase 0: Intake |
| 19 | |
| 20 | Ask the user these questions: |
| 21 | |
| 22 | ### Domain & Audience |
| 23 | |
| 24 | What does your company/product do? What space are you in? |
| 25 | What specific domain or topic are the KOLs you want to find expert in? |
| 26 | Who is your target audience? (The people the KOLs influence) |
| 27 | Any KOLs you already know about? (LinkedIn URLs — these become the baseline) |
| 28 | Anyone to EXCLUDE? (Competitors, your own team, irrelevant voices) |
| 29 | |
| 30 | ## Phase 1: Generate Domain Keywords |
| 31 | |
| 32 | Based on intake, generate 15-25 topic/authority keywords. These are NOT pain-language — they're the terms thought leaders use when sharing expertise: |
| 33 | |
| 34 | **Industry terms** — "freight tech", "supply chain innovation" |
| 35 | **Thought leadership signals** — "lessons learned in logistics", "future of dispatch" |
| 36 | **Conference/event terms** — "supply chain summit keynote" |
| 37 | **Content creator signals** — "newsletter freight", "podcast logistics" |
| 38 | |
| 39 | Also generate: |
| 40 | **KOL title keywords** — titles that signal thought leadership (vp, founder, analyst, editor, host) |
| 41 | **Vendor exclusion keywords** — titles to filter out (software engineer, recruiter, saas) |
| 42 | **Domain relevance keywords** — core industry terms for relevance scoring |
| 43 | |
| 44 | **Present keywords to user for approval before running.** |
| 45 | |
| 46 | Save config in the current working directory or wherever the user prefers: |
| 47 | |
| 48 | Config JSON structure: |
| 49 | |
| 50 | { |
| 51 | "client_name": "example", |
| 52 | "domain_keywords": ["\"freight tech\" thought leadership", "supply chain innovation"], |
| 53 | "exclusion_patterns": ["hiring.*position", "we.re recruiting"], |
| 54 | "kol_title_keywords": ["vp", "founder", "analyst", "editor", "host"], |
| 55 | "vendor_exclude_keywords": ["software engineer", "saas", "recruiter"], |
| 56 | "domain_relevance_keywords": ["freight", "logistics", "supply chain"], |
| 57 | "country_filter": "", |
| 58 | "max_posts_per_keyword": 50, |
| 59 | "min_posts": 2, |
| 60 | "min_total_engagement": 50, |
| 61 | "top_n_kols": 50 |
| 62 | } |
| 63 | |
| 64 | |
| 65 | ## Phase 2: Run KOL Discovery Pipeline |
| 66 | |
| 67 | |
| 68 | python3 skills/kol-discovery/scripts/kol_discovery.py \ |
| 69 | --config kol-discovery.json \ |
| 70 | --output-dir . \ |
| 71 | [--test] [--web-kols kol-web-kols.json] [--yes] |
| 72 | |
| 73 | |
| 74 | **Flags:** |
| 75 | `--config` (required) — path to client config JSON |
| 76 | `--output-dir` — directory for output CSV (default: current working directory) |
| 77 | `--test` — limit to 5 keywords (validation run) |
| 78 | `--web-kols` — path to web-researched KOL JSON (agent generates this) |
| 79 | `--yes` — skip cost confirmation prompts |
| 80 | `--max-runs` — override Apify run limit |
| 81 | |
| 82 | **What the script does:** |
| 83 | |
| 84 | **Keyword search** — `apimaestro/linkedin-posts-search-scraper-no-cookies` for each domain keyword |
| 85 | **Author aggregation** — Group posts by author, compute engagement metrics |
| 86 | **Scoring** — Composite KOL score: engagement volume (log-scaled) + consistency (post count) + quality (avg engagement) + relevance (keyword breadth) + web research bonus |
| 87 | **Merge** — Combine post-data KOLs with web-researched KOLs, flag overlaps |
| 88 | **Export** — Ranked CSV |
| 89 | |
| 90 | **Cost estimate:** ~$0.10 per keyword. Full run with 20 keywords: ~$2-3. |
| 91 | |
| 92 | **Always run with `--test` first.** |
| 93 | |
| 94 | ## Phase 2b: Web Research (Agent-Driven) |
| 95 | |
| 96 | Before or alongside the script, do web research to find known KOLs: |
| 97 | Search for "top [industry] influencers on LinkedIn" |
| 98 | Find conference speakers, newsletter authors, podcast hosts |
| 99 | Check industry publications for frequent contributors |
| 100 | |
| 101 | Save as JSON in the current working directory: |
| 102 | |
| 103 | |
| 104 | [ |
| 105 | { |
| 106 | "name": "Jane Doe", |
| 107 | "linkedin_url": "https://www.linkedin.com/in/janedoe/", |
| 108 | "source": "FreightWaves conference speaker 2025", |
| 109 | "notes": "Hosts weekly logistics podcast" |
| 110 | } |
| 111 | ] |
| 112 | |
| 113 | |
| 114 | Pass to script via `--web-kols`. |
| 115 | |
| 116 | ## Phase 3: Review & Refine |
| 117 | |
| 118 | Present results: |
| 119 | **Top 20 KOLs** — rank, name, headline, KOL score, total engagement, top post |
| 120 | **Source breakdown** — how many from post-data vs web-research vs both |
| 121 | **Keyword performance** — which keywords surfaced the most KOLs |
| 122 | |
| 123 | Common adjustments: |
| 124 | **Too many irrelevant authors** — refine domain keywords, add exclusion patterns |
| 125 | **Missing known KOLs** — add more keyword variants, expand web research |
| 126 | **Too few results** — lower `min_posts` or `min_total_engagement` thresholds |
| 127 | |
| 128 | ## Phase 4: Output |
| 129 | |
| 130 | CSV exported to the current working directory: |
| 131 | |
| 132 | | Column | Description | |
| 133 | |--------|-------------| |
| 134 | | Rank | Overall rank by KOL Score | |
| 135 | | Name | Full name | |
| 136 | | LinkedIn URL | Profile link | |
| 137 | | Headline | From LinkedIn | |
| 138 | | KOL Score | Composite score | |
| 139 | | Total Posts | Posts found in search | |
| 140 | | Total Reactions | Sum of reactions across posts | |
| 141 | | Total Comments | Sum of comments across posts | |
| 142 | | Avg Engagement | Average reactions+comments per post | |
| 143 | | Top Post URL | Highest engagement post | |
| 144 | | Top Post Preview | First 100 chars of top post | |
| 145 | | Source | post-data / web-research / both | |
| 146 | |
| 147 | ## Tools Required |
| 148 | |
| 149 | **Apify API token** — set as `APIFY_API_TOKEN` in `.env` |
| 150 | **Apify actors used:** |
| 151 | `apimaestro/linkedin-posts-search-scraper-no-cookies` (keyword search) |
| 152 | |
| 153 | ## Example Usage |
| 154 | |
| 155 | **Trigger phrases:** |
| 156 | "Find KOLs in the freight/logistics space" |
| 157 | "Who are the influencers in [industry]?" |
| 158 | "Discover thought leaders for [domain]" |
| 159 | "Run KOL discovery for [client]" |
| 160 | |
| 161 | **With existing config:** |
| 162 | |
| 163 | python3 skills/kol-discovery/scripts/kol_discovery.py \ |
| 164 | --config clients/example/configs/kol-discovery.json \ |
| 165 | --output-dir clients/example/leads --yes |
| 166 | |
| 167 |
Details
- Updated
- Sep 21, 2026
- License
- MIT
- Stars on the repo
- ★ 1,220
- Checked
- Source
- gooseworks-ai/goose-skills ↗
- Creator
- gooseworks-ai · 206 listings
Made with kol-discovery

Similar skills
See all →
SkillAct as the company research engine for /sales research <urlCompany Research & Firmographic Analysis
SkillEthical people-finding and identity verificationPrivateinvestigator
SkillFree People Search to discover ICP-matching leadsApollo lead finder
SkillFind decision-makers at a specific company using ApolloCompany contact finder
SkillFind company funding history, investorsCompany funding search
SkillFull company intelligence reportCompany Intelligence - Comprehensive Company ReportsMore from gooseworks-ai
SkillMine the highest-converting ad angles from customer reviewsAd angle miner
SkillAnalyze ad campaign performance data to identify what'sAd campaign analyzer
SkillFor paid lead-gen and participant-recruitment adsAd lead quality analyzer
SkillAnalyze the message match between your ads and landing pagesAd to landing page auditor
SkillCheck and improve your brand's visibility across AI searchAeo
SkillSearch Amazon products - find items, compare pricesAmazon Product Search