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.
npx gooseworks install --all # then, in Claude Code, Cursor, or Codex: /gooseworks use the kol-content-monitor skill
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.
kol-discovery skill first to build the listSave 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"
}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 jsonFilter results: only include posts with reactions ≥ min_reactions.
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 jsonFilter: only include tweets with likes ≥ min_reactions / 2 (Twitter engagement is lower than LinkedIn).
Group all posts across all KOLs by topic/theme:
This surfaces topics with broad consensus (multiple KOLs talking about it) vs. individual takes.
| Signal | Meaning | Example |
|---|---|---|
| Convergence | 3+ KOLs on same topic in same week | Multiple founders posting about "AI SDR fatigue" |
| Spike | Topic that 2x'd in volume vs last week | Suddenly everyone's talking about [new thing] |
| Underdog | 1 KOL posting about topic nobody else covers | Potential early-mover opportunity |
| Controversy | Posts with high comment/reaction ratio | Debate you could weigh in on |
# 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).
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]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>| Component | Cost |
|---|---|
| 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 |
APIFY_API_TOKEN env varlinkedin-profile-post-scraper, twitter-mention-trackerkol-discovery (to build initial KOL list)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.
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.
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.