Competitor content tracker
Monitor competitor content across blogs, LinkedIn, and Twitter/X on a recurring basis.
How to use it
- Hit Copy SKILL.md — or use the Claude Code line below to get every file.
- Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
ChatGPT: make a Project and paste it into Instructions.
Neither? Paste it at the top of a new chat — it works for that chat. - Describe your job in plain words. The AI follows the skill from there.
npx degit gooseworks-ai/goose-skills/skills/competitive-intel/composites/competitor-content-tracker#main ~/.claude/skills/competitor-content-trackerFor one project only, change the path to .claude/skills/competitor-content-tracker. This skill also uses run_skill.py — copying SKILL.md alone won't be enough. See the folder on GitHub.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Show the full text191 lines
Competitor Content Tracker
Monitor competitor content activity across three channels — blog, LinkedIn, Twitter/X — and produce a consolidated digest highlighting what's new, what's getting traction, and where you have a content gap.
When to Use
- "Track what [competitor] is publishing"
- "Show me what my competitors posted this week"
- "What topics are competitors winning on?"
- "I want a weekly competitor content digest"
Phase 0: Intake
Competitors to Track
- List of competitor company names + blog URLs (e.g.,
https://clay.com/blog) - LinkedIn profile URLs of competitor founders/CMOs to track (optional but high-value)
- Twitter/X handles of the competitors or their founders (optional)
Scope
- How far back? (default: 7 days for weekly digest, 30 days for first run)
- Any topics/keywords you care most about? (used to surface relevant posts first)
Output
- Format preference: full digest (everything) or highlights only (top 3-5 per competitor)?
Save config to clients/<client-name>/configs/competitor-content-tracker.json.
{
"competitors": [
{
"name": "Clay",
"blog_url": "https://clay.com/blog",
"linkedin_profiles": ["https://www.linkedin.com/in/kareem-amin/"],
"twitter_handles": ["@clay_hq", "@kareemamin"]
}
],
"days_back": 7,
"keywords": ["GTM", "outbound", "AI agents", "growth"],
"output_mode": "highlights"
}
Phase 1: Scrape Blog Content
Run blog-feed-monitor for each competitor blog URL:
python3 skills/capabilities/blog-feed-monitor/scripts/scrape_blogs.py \
--urls "<competitor_blog_url>" \
--days <days_back> \
--keywords "<keywords>" \
--output summary
Collect: post title, publish date, URL, excerpt.
Phase 2: Scrape LinkedIn Posts
Run linkedin-profile-post-scraper for each tracked founder/executive LinkedIn URL:
python3 skills/capabilities/linkedin-profile-post-scraper/scripts/scrape_linkedin_posts.py \
--profiles "<linkedin_url_1>,<linkedin_url_2>" \
--days <days_back> \
--max-posts 20 \
--output summary
Collect: post text preview, date, reactions, comments, post URL.
Phase 3: Scrape Twitter/X
Run twitter-mention-tracker for each handle:
python3 skills/capabilities/twitter-mention-tracker/scripts/search_twitter.py \
--query "from:<handle>" \
--since <YYYY-MM-DD> \
--until <YYYY-MM-DD> \
--max-tweets 20 \
--output summary
Collect: tweet text, date, likes, retweets, URL.
Phase 4: Analyze & Synthesize
After collecting raw data, synthesize across all channels:
For each competitor, identify:
- New blog posts — titles, dates, topics
- Top LinkedIn post — by engagement (reactions + comments), topic, key message
- Top tweet — by likes, topic
- Recurring themes — what topics did they post about most this period?
- Content format patterns — are they doing listicles, opinion pieces, case studies?
Cross-competitor analysis:
- Shared trending topics — what are multiple competitors writing about?
- Coverage gaps — topics they're covering that you're not
- Topics you own — where you're publishing and they're not
- Engagement benchmarks — average likes/reactions across competitors (context for your own performance)
Phase 5: Output Format
Produce a structured markdown digest:
# Competitor Content Digest — Week of [DATE]
## Summary
- [N] new blog posts tracked across [N] competitors
- Top trending topic: [topic]
- Biggest content gap for you: [topic]
---
## [Competitor Name]
### Blog
- [Post Title] — [Date] — [URL]
> [One-sentence summary]
### LinkedIn (top post)
> "[Post preview...]"
— [Author], [Date] | [Reactions] reactions, [Comments] comments
[URL]
### Twitter/X (top tweet)
> "[Tweet text]"
— [@handle], [Date] | [Likes] likes
[URL]
### Themes this week: [tag1], [tag2], [tag3]
---
## Content Gap Analysis
| Topic | Competitors covering | You covering |
|-------|---------------------|--------------|
| [topic] | Clay, Apollo | ❌ No |
| [topic] | Nobody | ✅ Yes |
## Recommended Actions
1. [Specific content opportunity to act on this week]
2. [Topic to consider writing a response/alternative take on]
Save digest to clients/<client-name>/intelligence/competitor-content-[YYYY-MM-DD].md.
Scheduling
This skill is designed to run weekly (Mondays recommended). Set up a cron job:
# Every Monday at 8am
0 8 * * 1 python3 run_skill.py competitor-content-tracker --client <client-name>
Cost
| Component | Cost |
|---|---|
| Blog scraping (RSS mode) | Free |
| LinkedIn post scraping | ~$0.05-0.20/profile (Apify) |
| Twitter scraping | ~$0.01-0.05 per run |
| Total per weekly run | ~$0.10-0.50 depending on scope |
Tools Required
- Apify access — via Gooseworks proxy by default (no key needed); set
APIFY_API_TOKENto BYO Apify - Upstream skills:
blog-feed-monitor,linkedin-profile-post-scraper,twitter-mention-tracker
Trigger Phrases
- "Run competitor content tracker for [client]"
- "What did my competitors publish this week?"
- "Give me a competitor content digest"
- "What's [competitor] writing about?"
| 1 | |
| 2 | name competitor-content-tracker |
| 3 | description > |
| 4 | Monitor competitor content across blogs, LinkedIn, and Twitter/X on a recurring basis. |
| 5 | Surfaces new posts, trending topics, and content gaps you can own. Chains blog-feed-monitor, |
| 6 | linkedin-profile-post-scraper, and twitter-mention-tracker. Use when you want a weekly digest |
| 7 | of what competitors are publishing and which topics are generating engagement. |
| 8 | tags [competitive-intel] |
| 9 | |
| 10 | |
| 11 | # Competitor Content Tracker |
| 12 | |
| 13 | Monitor competitor content activity across three channels — blog, LinkedIn, Twitter/X — and produce a consolidated digest highlighting what's new, what's getting traction, and where you have a content gap. |
| 14 | |
| 15 | ## When to Use |
| 16 | |
| 17 | "Track what [competitor] is publishing" |
| 18 | "Show me what my competitors posted this week" |
| 19 | "What topics are competitors winning on?" |
| 20 | "I want a weekly competitor content digest" |
| 21 | |
| 22 | ## Phase 0: Intake |
| 23 | |
| 24 | ### Competitors to Track |
| 25 | List of competitor company names + blog URLs (e.g., `https://clay.com/blog`) |
| 26 | LinkedIn profile URLs of competitor founders/CMOs to track (optional but high-value) |
| 27 | Twitter/X handles of the competitors or their founders (optional) |
| 28 | |
| 29 | ### Scope |
| 30 | How far back? (default: 7 days for weekly digest, 30 days for first run) |
| 31 | Any topics/keywords you care most about? (used to surface relevant posts first) |
| 32 | |
| 33 | ### Output |
| 34 | Format preference: full digest (everything) or highlights only (top 3-5 per competitor)? |
| 35 | |
| 36 | Save config to `clients/<client-name>/configs/competitor-content-tracker.json`. |
| 37 | |
| 38 | |
| 39 | { |
| 40 | "competitors": [ |
| 41 | { |
| 42 | "name": "Clay", |
| 43 | "blog_url": "https://clay.com/blog", |
| 44 | "linkedin_profiles": ["https://www.linkedin.com/in/kareem-amin/"], |
| 45 | "twitter_handles": ["@clay_hq", "@kareemamin"] |
| 46 | } |
| 47 | ], |
| 48 | "days_back": 7, |
| 49 | "keywords": ["GTM", "outbound", "AI agents", "growth"], |
| 50 | "output_mode": "highlights" |
| 51 | } |
| 52 | |
| 53 | |
| 54 | ## Phase 1: Scrape Blog Content |
| 55 | |
| 56 | Run `blog-feed-monitor` for each competitor blog URL: |
| 57 | |
| 58 | |
| 59 | python3 skills/capabilities/blog-feed-monitor/scripts/scrape_blogs.py \ |
| 60 | --urls "<competitor_blog_url>" \ |
| 61 | --days <days_back> \ |
| 62 | --keywords "<keywords>" \ |
| 63 | --output summary |
| 64 | |
| 65 | |
| 66 | Collect: post title, publish date, URL, excerpt. |
| 67 | |
| 68 | ## Phase 2: Scrape LinkedIn Posts |
| 69 | |
| 70 | Run `linkedin-profile-post-scraper` for each tracked founder/executive LinkedIn URL: |
| 71 | |
| 72 | |
| 73 | python3 skills/capabilities/linkedin-profile-post-scraper/scripts/scrape_linkedin_posts.py \ |
| 74 | --profiles "<linkedin_url_1>,<linkedin_url_2>" \ |
| 75 | --days <days_back> \ |
| 76 | --max-posts 20 \ |
| 77 | --output summary |
| 78 | |
| 79 | |
| 80 | Collect: post text preview, date, reactions, comments, post URL. |
| 81 | |
| 82 | ## Phase 3: Scrape Twitter/X |
| 83 | |
| 84 | Run `twitter-mention-tracker` for each handle: |
| 85 | |
| 86 | |
| 87 | python3 skills/capabilities/twitter-mention-tracker/scripts/search_twitter.py \ |
| 88 | --query "from:<handle>" \ |
| 89 | --since <YYYY-MM-DD> \ |
| 90 | --until <YYYY-MM-DD> \ |
| 91 | --max-tweets 20 \ |
| 92 | --output summary |
| 93 | |
| 94 | |
| 95 | Collect: tweet text, date, likes, retweets, URL. |
| 96 | |
| 97 | ## Phase 4: Analyze & Synthesize |
| 98 | |
| 99 | After collecting raw data, synthesize across all channels: |
| 100 | |
| 101 | ### For each competitor, identify: |
| 102 | **New blog posts** — titles, dates, topics |
| 103 | **Top LinkedIn post** — by engagement (reactions + comments), topic, key message |
| 104 | **Top tweet** — by likes, topic |
| 105 | **Recurring themes** — what topics did they post about most this period? |
| 106 | **Content format patterns** — are they doing listicles, opinion pieces, case studies? |
| 107 | |
| 108 | ### Cross-competitor analysis: |
| 109 | **Shared trending topics** — what are multiple competitors writing about? |
| 110 | **Coverage gaps** — topics they're covering that you're not |
| 111 | **Topics you own** — where you're publishing and they're not |
| 112 | **Engagement benchmarks** — average likes/reactions across competitors (context for your own performance) |
| 113 | |
| 114 | ## Phase 5: Output Format |
| 115 | |
| 116 | Produce a structured markdown digest: |
| 117 | |
| 118 | |
| 119 | # Competitor Content Digest — Week of [DATE] |
| 120 | |
| 121 | ## Summary |
| 122 | - [N] new blog posts tracked across [N] competitors |
| 123 | - Top trending topic: [topic] |
| 124 | - Biggest content gap for you: [topic] |
| 125 | |
| 126 | |
| 127 | |
| 128 | ## [Competitor Name] |
| 129 | |
| 130 | ### Blog |
| 131 | - [Post Title] — [Date] — [URL] |
| 132 | > [One-sentence summary] |
| 133 | |
| 134 | ### LinkedIn (top post) |
| 135 | > "[Post preview...]" |
| 136 | — [Author], [Date] | [Reactions] reactions, [Comments] comments |
| 137 | [URL] |
| 138 | |
| 139 | ### Twitter/X (top tweet) |
| 140 | > "[Tweet text]" |
| 141 | — [@handle], [Date] | [Likes] likes |
| 142 | [URL] |
| 143 | |
| 144 | ### Themes this week: [tag1], [tag2], [tag3] |
| 145 | |
| 146 | |
| 147 | |
| 148 | ## Content Gap Analysis |
| 149 | |
| 150 | | Topic | Competitors covering | You covering | |
| 151 | |-------|---------------------|--------------| |
| 152 | | [topic] | Clay, Apollo | ❌ No | |
| 153 | | [topic] | Nobody | ✅ Yes | |
| 154 | |
| 155 | ## Recommended Actions |
| 156 | 1. [Specific content opportunity to act on this week] |
| 157 | 2. [Topic to consider writing a response/alternative take on] |
| 158 | |
| 159 | |
| 160 | Save digest to `clients/<client-name>/intelligence/competitor-content-[YYYY-MM-DD].md`. |
| 161 | |
| 162 | ## Scheduling |
| 163 | |
| 164 | This skill is designed to run weekly (Mondays recommended). Set up a cron job: |
| 165 | |
| 166 | |
| 167 | # Every Monday at 8am |
| 168 | 0 8 * * 1 python3 run_skill.py competitor-content-tracker --client <client-name> |
| 169 | |
| 170 | |
| 171 | ## Cost |
| 172 | |
| 173 | | Component | Cost | |
| 174 | |-----------|------| |
| 175 | | Blog scraping (RSS mode) | Free | |
| 176 | | LinkedIn post scraping | ~$0.05-0.20/profile (Apify) | |
| 177 | | Twitter scraping | ~$0.01-0.05 per run | |
| 178 | | **Total per weekly run** | **~$0.10-0.50** depending on scope | |
| 179 | |
| 180 | ## Tools Required |
| 181 | |
| 182 | **Apify access** — via Gooseworks proxy by default (no key needed); set `APIFY_API_TOKEN` to BYO Apify |
| 183 | **Upstream skills:** `blog-feed-monitor`, `linkedin-profile-post-scraper`, `twitter-mention-tracker` |
| 184 | |
| 185 | ## Trigger Phrases |
| 186 | |
| 187 | "Run competitor content tracker for [client]" |
| 188 | "What did my competitors publish this week?" |
| 189 | "Give me a competitor content digest" |
| 190 | "What's [competitor] writing about?" |
| 191 |