monitoring

KOL Content Monitor

Track what key opinion leaders (KOLs) in your space are posting on LinkedIn and Twitter/X. Surfaces trending narratives, high-engagement topics, and early signals of emerging conversations before they peak. Chains linkedin-profile-post-scraper and twitter-mention-tracker. Use when a marketing team wants to ride trends rather than create them from scratch, or when a founder wants to know which topics are resonating with their audience.

Gooseby Athina AI
Install
Terminal
npx gooseworks install --all

# then, in Claude Code, Cursor, or Codex:
/gooseworks use the kol-content-monitor skill
About This Skill

KOL Content Monitor

Track what Key Opinion Leaders in your space are writing about. Surface trending narratives early — before they peak — so your team can join the conversation at the right time with relevant content.

Core principle: For seed-stage teams, the fastest path to content distribution is riding a wave that's already breaking, not creating one from scratch.

When to Use

  • "What are the top voices in [our space] posting about?"
  • "What topics are trending on LinkedIn in [industry]?"
  • "I want to know what content is resonating before I write anything"
  • "Track [list of founders/experts] and tell me what they're saying"
  • "Find trending narratives I can contribute to"

Phase 0: Intake

KOL List

  1. Names and LinkedIn URLs of KOLs to track (if known)
    • If unknown: use kol-discovery skill first to build the list
  2. Twitter/X handles for the same KOLs (optional but recommended for full picture)
  3. Any specific topics/keywords you care about? (for filtering noisy feeds)

Scope

  1. How far back? (default: 7 days for weekly monitor, 30 days for first run)
  2. Minimum engagement threshold to include a post? (default: 20 reactions/likes)

Save config to the current working directory as kol-monitor.json (or user-specified path).

{
  "kols": [
    {
      "name": "Lenny Rachitsky",
      "linkedin": "https://www.linkedin.com/in/lennyrachitsky/",
      "twitter": "@lennysan"
    },
    {
      "name": "Kyle Poyar",
      "linkedin": "https://www.linkedin.com/in/kylepoyar/",
      "twitter": "@kylepoyar"
    }
  ],
  "days_back": 7,
  "min_reactions": 20,
  "keywords": ["GTM", "growth", "AI", "outbound", "founder"],
  "output_path": "kol-monitor-[DATE].md"
}

Phase 1: Scrape LinkedIn Posts

Run linkedin-profile-post-scraper for all KOL LinkedIn profiles:

python3 skills/linkedin-profile-post-scraper/scripts/scrape_linkedin_posts.py \
  --profiles "<url1>,<url2>,<url3>" \
  --days <days_back> \
  --max-posts 20 \
  --output json

Filter results: only include posts with reactions ≥ min_reactions.

Phase 2: Scrape Twitter/X Posts

Run twitter-mention-tracker for each handle:

python3 skills/twitter-mention-tracker/scripts/search_twitter.py \
  --query "from:<handle>" \
  --since <YYYY-MM-DD> \
  --until <YYYY-MM-DD> \
  --max-tweets 20 \
  --output json

Filter: only include tweets with likes ≥ min_reactions / 2 (Twitter engagement is lower than LinkedIn).

Phase 3: Topic Clustering

Group all posts across all KOLs by topic/theme:

Clustering approach:

  1. Extract the main topic from each post (1-3 word label)
  2. Group similar topics together
  3. Count: how many KOLs touched this topic? How many total posts?
  4. Rank by: total engagement (sum of reactions/likes across all posts on that topic)

This surfaces topics with broad consensus (multiple KOLs talking about it) vs. individual takes.

Signal types to flag:

SignalMeaningExample
Convergence3+ KOLs on same topic in same weekMultiple founders posting about "AI SDR fatigue"
SpikeTopic that 2x'd in volume vs last weekSuddenly everyone's talking about [new thing]
Underdog1 KOL posting about topic nobody else coversPotential early-mover opportunity
ControversyPosts with high comment/reaction ratioDebate you could weigh in on

Phase 4: Output Format

# KOL Content Monitor — Week of [DATE]
 
## Tracked KOLs
[N] KOLs | [N] LinkedIn posts | [N] tweets | Period: [date range]
 
---
 
## Trending Topics This Week
 
### 1. [Topic Name] — CONVERGENCE SIGNAL
- **KOLs discussing:** [Name 1], [Name 2], [Name 3]
- **Total posts:** [N] | **Total engagement:** [N] reactions/likes
- **Trend direction:** ↑ New this week / ↑↑ Growing / → Stable
 
**Best posts on this topic:**
 
> "[Post excerpt — first 150 chars]"
— [Author], [Date] | [N] reactions
[LinkedIn URL]
 
> "[Tweet text]"
— [@handle], [Date] | [N] likes
[Twitter URL]
 
**Content opportunity:** [1-2 sentences on how to contribute to this conversation]
 
---
 
### 2. [Topic Name]
...
 
---
 
## High-Engagement Posts (Top 5 This Week)
 
| Post | Author | Platform | Engagement | Topic |
|------|--------|----------|------------|-------|
| "[Preview...]" | [Name] | LinkedIn | [N] reactions | [topic] |
...
 
---
 
## Emerging Topics to Watch
 
Topics picked up by 1 KOL this week — too early to call a trend but worth tracking:
- [Topic] — [KOL name] — [brief description]
- [Topic] — ...
 
---
 
## Recommended Content Actions
 
### This Week (Ride the Wave)
1. **[Topic]** is peaking — ideal moment to publish your take. Suggested angle: [angle]
2. **[Controversy]** is generating debate — consider a nuanced response post. Your positioning: [suggestion]
 
### Next Week (Get Ahead)
1. **[Emerging topic]** is early-stage — write something now before it gets crowded.

Save to the current working directory as kol-monitor-[YYYY-MM-DD].md (or user-specified path).

Phase 5: Build Trigger-Based Content Calendar

Optional: from the monitor output, propose a content calendar entry for each "Ride the Wave" opportunity:

Topic: [topic]
Best post format: [LinkedIn insight post / tweet thread / blog]
Suggested hook: [hook]
Supporting points: [3 bullets from your product/experience]
Ideal publish date: [within 3 days of peak]

Scheduling

Run weekly (Friday afternoon — catches the week's peaks and gives weekend to draft):

0 14 * * 5 python3 run_skill.py kol-content-monitor --client <client-name>

Cost

ComponentCost
LinkedIn post scraping (per profile)~$0.05-0.20 (Apify)
Twitter scraping (per run)~$0.01-0.05
Total per weekly run (10 KOLs)~$0.50-2.00

Tools Required

  • Apify API tokenAPIFY_API_TOKEN env var
  • Upstream skills: linkedin-profile-post-scraper, twitter-mention-tracker
  • Optional upstream: kol-discovery (to build initial KOL list)

Trigger Phrases

  • "What are the top voices in [space] posting about this week?"
  • "Track my KOL list and give me content ideas"
  • "Run KOL content monitor for [client]"
  • "What's trending on LinkedIn in [industry]?"

What's included

·
"What are the top voices in [our space] posting about?"
·
"What topics are trending on LinkedIn in [industry]?"
·
"I want to know what content is resonating before I write anything"
·
"Track [list of founders/experts] and tell me what they're saying"
·
"Find trending narratives I can contribute to"
You Might Also Like

Render VO Anchored Motion Listicle

Assemble an expert/educator motion-graphic LISTICLE video ad from a config — a spoken authoritative voiceover carries a numbered listicle while N web-animated hyperframe beats (HTML plus the Web Animations API, one branded design system of alternating tiles, big hero numerals, and glass-pill callouts) are rendered frame-by-frame via Playwright and anchored to the VO's word-level timestamps, periodic color-graded B-roll windows give visual breath, and captions burn ONLY inside those B-roll windows (2-word chunks, ASS Format header carrying a Name field so none drop) with the VO mixed under a low music bed. This is the FREE deterministic assembly stage (Playwright beat render plus ffmpeg concat plus window-masked caption burn plus VO-and-music mix plus final composite) — the VO, the music bed, and the stock B-roll come from create-vo-elevenlabs, create-music-elevenlabs, and media-proxy. Use for the vo-anchored-motion-listicle format.

Render Stopmotion Hand Swatch Cycle

Assemble a stop-motion hand-swatch-cycle product-demo ad from a config — a sequence of still PLATES (one hand swiping a single-barrel cosmetic across a cream skin-patch, the barrel + swatch changing per plate while the hand, background, crop, and lighting stay locked) is PNG→mp4 loop-encoded at each plate's own stop-motion hold (fast motion frames 150–250ms, per-shade ~380ms, hero beats 1100–1800ms), concat-demuxed with HARD cuts into a silent master, closed on a Playwright HTML-rendered branded end card (serif tagline + sans subtitle + real logo SVG over a hero BG, never AI-rendered text), and muxed with a pre-sourced music track playing under the end card with a fade tail (no VO). This is the FREE deterministic assembly stage (loop-encode + concat-demux + end-card render + music mux); the master-anchor plate, shade plates, and end-card BG come from create-image-gpt-image-fal and the track from create-music-elevenlabs. Use for the stopmotion-hand-swatch-cycle format.

Render Split Screen Creator

Assemble a split-screen creator ad from a config — a two-zone vertical composite where a supplied AI-creator lip-sync take fills the BOTTOM ~48% while real 16:9 product/demo clips run uncropped in the TOP ~52%, each top clip contain-fit with a darkened blurred cover-scale fill of the same clip (never black bars), a 3px brand-color divider between the zones, the creator slice cover-fit per the per-scene VO timing, scenes hard-concatenated with the body audio being the concatenated creator VO slices, an end card held on the last sharp frame ~3s, then the ASSEMBLED cut transcribed with local Whisper (not the raw VO — concat drops inter-scene silence) and word-level captions burned in the chosen style. This is the FREE deterministic assembly + caption stage (two-zone composite + blurred fill + divider + hard-concat + end card + captions); the VO comes from create-vo-elevenlabs, the anchor from create-image-gpt-image-fal, and the whole-VO lip-sync from a paid VEED Fabric 1.0 take (a no-atom upstream input). Use for the split-screen-creator format.

Newsletter

Learn to build Growth systems with AI

2-3 compounding systems per week using Claude Code, OpenClaw, and more.