New: Earn 20% as an AgentAlley affiliate. Share your link and earn on every sale you refer. Join now New: Earn 20% as an affiliate. Join now

Find Key Opinion Leaders in a given domain by combining web

Kol discovery

by gooseworks-ai · MIT license · ★ 1,220 on GitHub · updated Sep 21

Kol discovery cover

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)
Claude Codenpx skills add gooseworks-ai/goose-skills --skill kol-discovery -g -a claude-code
Claude Code (manual)mkdir -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-discovery
Windows (PowerShell)New-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" -Force
Claude.ai / desktopDownload the ZIP and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md6.1 KB
  • skill.meta.json286 B
  • scripts/1 file · 22.3 KB
Read the files here
gooseworks-ai/615c6853 files
SKILL.md
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
  1. What does your company/product do? What space are you in?
  2. What specific domain or topic are the KOLs you want to find expert in?
  3. Who is your target audience? (The people the KOLs influence)
  4. Any KOLs you already know about? (LinkedIn URLs — these become the baseline)
  5. 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:

  1. Keyword search — apimaestro/linkedin-posts-search-scraper-no-cookies for each domain keyword
  2. Author aggregation — Group posts by author, compute engagement metrics
  3. Scoring — Composite KOL score: engagement volume (log-scaled) + consistency (post count) + quality (avg engagement) + relevance (keyword breadth) + web research bonus
  4. Merge — Combine post-data KOLs with web-researched KOLs, flag overlaps
  5. 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_posts or min_total_engagement thresholds

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_TOKEN in .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---
2name: kol-discovery
3description: >
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."
9tags: [outreach]
10---
11 
12# KOL Discovery
13 
14Find 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 
20Ask the user these questions:
21 
22### Domain & Audience
23 
241. What does your company/product do? What space are you in?
252. What specific domain or topic are the KOLs you want to find expert in?
263. Who is your target audience? (The people the KOLs influence)
274. Any KOLs you already know about? (LinkedIn URLs — these become the baseline)
285. Anyone to EXCLUDE? (Competitors, your own team, irrelevant voices)
29 
30## Phase 1: Generate Domain Keywords
31 
32Based 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 
39Also 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 
46Save config in the current working directory or wherever the user prefers:
47 
48Config JSON structure:
49```json
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```bash
68python3 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 
841. **Keyword search** — `apimaestro/linkedin-posts-search-scraper-no-cookies` for each domain keyword
852. **Author aggregation** — Group posts by author, compute engagement metrics
863. **Scoring** — Composite KOL score: engagement volume (log-scaled) + consistency (post count) + quality (avg engagement) + relevance (keyword breadth) + web research bonus
874. **Merge** — Combine post-data KOLs with web-researched KOLs, flag overlaps
885. **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 
96Before 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 
101Save as JSON in the current working directory:
102 
103```json
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 
114Pass to script via `--web-kols`.
115 
116## Phase 3: Review & Refine
117 
118Present 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 
123Common 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 
130CSV 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```bash
163python3 skills/kol-discovery/scripts/kol_discovery.py \
164 --config clients/example/configs/kol-discovery.json \
165 --output-dir clients/example/leads --yes
166```
167 
View all files on GitHub →

Details

Updated
Sep 21, 2026
License
MIT
Stars on the repo
★ 1,220
Checked
Source
gooseworks-ai/goose-skills ↗
Creator
gooseworks-ai · 206 listings
View creator

Made with kol-discovery

Kol discovery — CleanShot 2026-07-13 at 20 16 54@2x (from the gooseworks-ai/goose-skills README)
Kol discovery — CleanShot 2026-07-13 at 20 16 54@2x (from the gooseworks-ai/goose-skills README)

by gooseworks-ai

Similar skills

See all →
SkillAct as the company research engine for /sales research <urlCompany Research & Firmographic Analysiszubair-trabzada/ai-sales-team-claude · by zubair-trabzadaYou are the company research engine for /sales research <url>. You produce deep, structured intelligence on a prospect company covering 8…★ 1.4k GitHub starsSkillEthical people-finding and identity verificationPrivateinvestigatordanielmiessler/LifeOS · by danielmiesslerEthical people-finding and identity verification via parallel research agents across people-search sites, social media, public records, and reverse phone/email/image/username lookups, with confidence-scored results requiring 3+ matching identifiers. USE WHEN find person, locate person, reconnect, lost contact, old friend, reverse phone lookup, who owns this email, reverse image search, find by username, verify identity, people search, public-data background check, who is this caller. NOT FOR structured due-diligence or company/entity intelligence investigations, or general web research synthesis (use Research).★ 19.3k GitHub starsSkillFree People Search to discover ICP-matching leadsApollo lead findergooseworks-ai/goose-skills · by gooseworks-aiTwo-phase Apollo.io prospecting: free People Search to discover ICP-matching leads, then selective enrichment to reveal emails/phones (credits per contact). Creates Apollo lists. Deduplicates against existing contacts by LinkedIn URL.★ 1.2k GitHub starsSkillFind decision-makers at a specific company using ApolloCompany contact findergooseworks-ai/goose-skills · by gooseworks-aiFind decision-makers at a specific company using Apollo, Crustdata, Fiber, and PDL people search via Gooseworks MCP. Given a company name and target titles, returns a list of contacts with name, title, LinkedIn URL, and location.★ 1.2k GitHub starsSkillFind company funding history, investorsCompany funding searchgooseworks-ai/goose-skills · by gooseworks-aiFind company funding history, investors, and investment details★ 1.2k GitHub starsSkillFull company intelligence reportCompany Intelligence - Comprehensive Company Reportsgooseworks-ai/goose-skills · by gooseworks-aiFull company intelligence report - overview, team, funding, products, news★ 1.2k GitHub stars

More from gooseworks-ai

SkillMine the highest-converting ad angles from customer reviewsAd angle minergooseworks-ai/goose-skills · by gooseworks-aiMine the highest-converting ad angles from customer reviews, Reddit complaints, support tickets, and competitor ads. Extracts actual pain language, competitor weaknesses, and outcome phrases that real buyers use. Outputs a ranked angle bank with proof quotes and recommended ad formats per angle.★ 1.2k GitHub starsSkillAnalyze ad campaign performance data to identify what'sAd campaign analyzergooseworks-ai/goose-skills · by gooseworks-aiAnalyze ad campaign performance data (Google, Meta, LinkedIn) to identify what's working, what's wasting budget, and specific cut/scale/test recommendations. Runs statistical analysis, funnel diagnostics, and multi-channel budget reallocation with specific dollar-amount shift recommendations and scenario modeling.★ 1.2k GitHub starsSkillFor paid lead-gen and participant-recruitment adsAd lead quality analyzergooseworks-ai/goose-skills · by gooseworks-aiFor paid lead-gen and participant-recruitment ads, replaces vanity CPA with true CAC per qualified lead by joining ad-platform data with downstream funnel events, surfaces tracking gaps, and classifies every creative into Scale / Keep / Investigate / Cut.★ 1.2k GitHub starsSkillAnalyze the message match between your ads and landing pagesAd to landing page auditorgooseworks-ai/goose-skills · by gooseworks-aiAnalyze the message match between your ads and landing pages. Checks if the promise in the ad copy carries through to the landing page headline, body, and CTA. Flags disconnects that kill conversion rates. Works with Google, Meta, and LinkedIn ads.★ 1.2k GitHub starsSkillCheck and improve your brand's visibility across AI searchAeogooseworks-ai/goose-skills · by gooseworks-aiCheck and improve your brand's visibility across AI search engines (ChatGPT, Perplexity, Gemini, Grok, Claude, DeepSeek). Set up tracking, run visibility analyses, audit your website for AI readability, and get actionable recommendations. Uses the npx goose-aeo@latest CLI.★ 1.2k GitHub starsSkillSearch Amazon products - find items, compare pricesAmazon Product Searchgooseworks-ai/goose-skills · by gooseworks-aiSearch Amazon products - find items, compare prices, read reviews★ 1.2k GitHub stars