Systems Lab

Agent skill

competitor-content-tracker

Monitor competitor content across blogs, LinkedIn, and Twitter/X on a recurring basis.

dormantNeeds a keyActs undeclared694 words

Filed under Content and SEO and Positioning and messaging.

From edupegoretti/fluidz-skills · 116 skills · 0 · pushed 2026-03-11

What it does when it runs

Monitor competitor content across blogs, LinkedIn, and Twitter/X on a recurring basis. Surfaces new posts, trending topics, and content gaps you can own. Chains blog-scraper, linkedin-profile-post-scraper, and twitter-scraper. Use when you want a weekly digest of what competitors are publishing and which topics are generating engagement.

Read from the skill and the 1 file bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
  • APIFY_API_TOKEN
Hosts it reaches
  • clay.com
  • www.linkedin.com
Tool permissions it declares
No allowed-tools in the frontmatter. It does act, so it runs under whatever permissions your session already grants.
Actions present in the files
shellwrites files

Ask about competitor-content-tracker

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/edupegoretti/fluidz-skills.git /tmp/fluidz-skills
git -C /tmp/fluidz-skills sparse-checkout set "skills/composites/competitor-content-tracker"
mkdir -p ~/.claude/skills/competitor-content-tracker
cp -R "/tmp/fluidz-skills/skills/composites/competitor-content-tracker/." ~/.claude/skills/competitor-content-tracker/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Before you install: this skill will not complete its job on a bare agent. It needs APIFY_API_TOKEN, which you have to obtain separately.

Reproduced in full from edupegoretti/fluidz-skills/blob/a2cf697e2e8ec2ea517d85496e2d5c7f5dc44cd3/skills/composites/competitor-content-tracker/SKILL.md, which is licensed MIT (repository). 694 words, 27 headings.

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

  1. List of competitor company names + blog URLs (e.g., https://clay.com/blog)
  2. LinkedIn profile URLs of competitor founders/CMOs to track (optional but high-value)
  3. Twitter/X handles of the competitors or their founders (optional)

Scope

  1. How far back? (default: 7 days for weekly digest, 30 days for first run)
  2. Any topics/keywords you care most about? (used to surface relevant posts first)

Output

  1. 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-scraper for each competitor blog URL:

python3 skills/blog-scraper/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/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-scraper for each handle:

python3 skills/twitter-scraper/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

ComponentCost
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 API tokenAPIFY_API_TOKEN env var
  • Upstream skills: blog-scraper, linkedin-profile-post-scraper, twitter-scraper

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?"

Files bundled with it

These load only when the skill asks for them, so they cost nothing until it runs.

Other skills for the same job

Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.

Need help setting it up?

This page tells you what competitor-content-tracker does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.