← Back to Skills Marketplace
manjotpahwa

Competitor Radar

by manjotpahwa · GitHub ↗ · v1.1.0 · MIT-0
cross-platform ⚠ suspicious
249
Downloads
0
Stars
0
Active Installs
2
Versions
Install in OpenClaw
/install competitive-radar
Description
Tracks competitors weekly across 6 signals: pricing page diffs, homepage positioning changes, blog/RSS posts, job postings (hiring as strategy signal), GitHu...
README (SKILL.md)

Competitor Radar

You are a competitive intelligence agent. You track competitor companies across 6 signal types and deliver structured weekly digests. You run proactively on a cron schedule and also respond to on-demand queries.

Data Location

All state lives in the skill's data/ directory:

  • data/competitors.json — list of tracked competitors and their config
  • data/snapshots/\x3Cslug>/ — timestamped HTML/text snapshots per page type
  • data/jobs/\x3Cslug>/ — weekly job listing snapshots
  • data/digests/ — weekly digest archive (Markdown per week)
  • data/alerts/ — log of mid-week critical-change alerts

The skill directory is at: ~/.openclaw/workspace/skills/competitor-radar/ (or wherever the user installed it — check $SKILL_DIR or resolve relative to SKILL.md)

Commands

/competitor-radar setup

add competitor [name] [url]

  1. Ask the user for (in one message, not a wizard):

    • Company name
    • Homepage URL
    • Pricing page URL (say "I'll find it" is acceptable)
    • Blog or changelog URL (say "I'll find it" is acceptable)
    • LinkedIn company URL
    • GitHub org URL (optional — skip for non-dev-tools companies)
    • Which channel to send digests to (Slack channel name, Telegram, WhatsApp, or Discord)
  2. If any URL was "I'll find it", run scripts/scrape.py --discover \x3Chomepage_url> to auto-detect pricing, blog, RSS feed from sitemap.xml and common paths.

  3. Check license tier before proceeding: Run python3 scripts/license.py --status to get current tier.

    If tier is free:

    • Count active competitors in data/competitors.json
    • If count >= 1, STOP and say exactly: "You're on the free tier — 1 competitor max is already tracked. Upgrade for unlimited competitors + daily alerts: 👉 https://manjotpahwa.gumroad.com/l/competitive-radar ($39 one-time) Once you've purchased, activate with: /competitive-radar activate \x3Cyour-key>"
    • Do NOT proceed with setup.

    If tier is paid (or count is 0): continue.

  4. Run scripts/scrape.py --baseline \x3Cslug> to capture first snapshots of all URLs. Tell the user which pages were successfully snapshotted and which failed.

  5. Write the competitor entry to data/competitors.json using the schema below.

  6. Create two cron jobs via the OpenClaw cron system:

    • Weekly digest: 0 9 * * 1 — runs scripts/digest_builder.py --all
    • Daily alert check: 0 8 * * * — runs scripts/alert.py --all (daily alerts only if tier is paid — skip cron creation on free tier) Name them competitive-radar-weekly and competitive-radar-alert.
  7. Confirm: "Tracking [Name]. First baseline captured. Weekly digest runs Mondays at 9am. Critical-change alerts check daily at 8am."

/competitive-radar activate \x3Clicense_key>

activate license \x3Ckey>

  1. Run python3 scripts/license.py --activate \x3Clicense_key>
  2. If successful: confirm "✓ Paid license activated for \x3Cemail>. Unlimited competitors and daily alerts are now unlocked."
  3. If failed: show the error message and link back to https://manjotpahwa.gumroad.com/l/competitive-radar

/competitive-radar run [slug?]

run competitor digest

Run the full weekly digest pipeline manually. If a slug is specified, run only for that competitor. Otherwise run for all.

Steps:

  1. Run scripts/scrape.py --weekly \x3Cslug>
  2. Run scripts/diff.py \x3Cslug>
  3. Run scripts/jobs.py \x3Cslug>
  4. Run scripts/github_tracker.py \x3Cslug> (if github_org configured)
  5. Run scripts/digest_builder.py \x3Cslug>
  6. Run scripts/deliver.py \x3Cslug>

Report back: which competitors were processed, any errors, where digest was delivered.

/competitor-radar status

Show: list of tracked competitors, last run date, last digest date, cron job status. Read from data/competitors.json and data/digests/.

/competitor-radar remove [name]

Remove competitor from tracking:

  1. Set active: false in competitors.json (do NOT delete — preserve history)
  2. Remove or disable the cron jobs if it was the last active competitor
  3. Confirm removal

On-demand questions

These should be answered by reading from the data/ directory without running new scrapes:

  • "What changed at [company] this week?" → read latest digest for that competitor
  • "Have any competitors changed pricing?" → scan pricing_diff fields across all digests
  • "Who is [company] hiring?" → read latest jobs snapshot
  • "When did [company] last change their homepage?" → scan homepage snapshots
  • "Which competitor is growing fastest on GitHub?" → compare star_delta across competitors
  • "What are [company]'s customers complaining about?" → read review_signal from latest digest
  • "Show me last month's digest" → read from data/digests/ archive
  • "Add competitor [name]" → trigger setup flow

competitors.json Schema

{
  "competitors": [
    {
      "slug": "acme-corp",
      "name": "Acme Corp",
      "active": true,
      "added": "2026-03-10",
      "baseline_date": "2026-03-10",
      "last_run": "2026-03-10",
      "urls": {
        "homepage": "https://acme.com",
        "pricing": "https://acme.com/pricing",
        "blog": "https://acme.com/blog",
        "changelog": "https://acme.com/changelog",
        "rss": "https://acme.com/feed.xml",
        "linkedin": "https://linkedin.com/company/acme",
        "github_org": "acme",
        "product_hunt": "https://producthunt.com/products/acme"
      },
      "alert_keywords": ["new pricing", "enterprise", "raises", "acquired", "shutdown"],
      "notify_channels": ["slack:#competitor-intel"],
      "tier": "free"
    }
  ]
}

tier is determined by scripts/license.py --status (reads data/license.json). Free tier: max 1 active competitor, no daily alerts. Paid tier: unlimited competitors, daily alerts enabled. Upgrade link: https://manjotpahwa.gumroad.com/l/competitive-radar

Rules

  • Never delete snapshot files. Always append new snapshots with date suffix.
  • Always confirm before removing a competitor (destructive action).
  • If a scrape fails 3 times in a row for a URL, flag it in the digest instead of silently skipping.
  • Do not send an empty digest. If nothing changed across all competitors, send: "No significant changes detected this week."
  • When interpreting hiring signals, always reason about what the role type implies strategically — don't just list job titles.
  • Pricing changes are always flagged as high-priority regardless of alert_keywords config.
  • Log all cron run results to data/alerts/\x3Cdate>-run.log for debugging.
Usage Guidance
This skill largely does what it says, but review these before installing: - Required secrets: deliver.py expects Slack/Telegram/Discord/Twilio tokens and optionally GITHUB_TOKEN; the registry metadata incorrectly lists no env vars. Only provide tokens with scopes you trust (e.g., Slack bot tokens limited to a single channel if possible). - Data retention: the skill stores HTML/text snapshots and digests under its data/ directory and does not delete them. If you track companies with private pages, be cautious. - LLM prompts: diff.py embeds raw diff previews into 'llm_prompt' text intended for the agent/Claude. That means scraped page content could be sent to an external model — review whether you’re comfortable sending that data. - Cron and scraping: the skill sets up scheduled runs (weekly and daily alerts) which will perform network requests automatically. Confirm you want automated scraping of the listed targets and that you comply with target sites' policies. - License/activation: the skill enforces a paid tier via scripts/license.py and directs users to a Gumroad link. Inspect scripts/license.py to see how license validation is performed and whether any token/key is transmitted externally. If you decide to proceed: run the install steps manually in a constrained environment, inspect scripts/license.py and scrape.py for external endpoints, provide minimal-scoped delivery tokens, and consider running the skill in an isolated user account or container so its persistent snapshots remain separated from other data.
Capability Analysis
Type: OpenClaw Skill Name: competitive-radar Version: 1.1.0 The skill implements a competitor intelligence system that uses high-risk capabilities including automated cron job management, extensive use of subprocess to execute curl for network requests, and handling of multiple sensitive API tokens (Slack, Telegram, Twilio). While these behaviors align with the stated purpose, the scripts (notably scrape.py and jobs.py) are vulnerable to path traversal because they use competitor 'slugs'—which are derived from user-provided names—to construct file paths without sanitization. The skill also includes strict license enforcement logic within the SKILL.md instructions that restricts functionality based on a Gumroad verification check.
Capability Assessment
Purpose & Capability
Name/description (competitor tracking, diffing, and delivering digests) match the included scripts (scrape, diff, jobs, github_tracker, digest_builder, deliver, alert). Required binaries (python3, curl, jq) are plausible for the stated work; Playwright is referenced in README/requirements for JS-heavy scraping and is a reasonable dependency for a scraper.
Instruction Scope
SKILL.md tells the agent to crawl pages, capture/retain HTML/text snapshots under the skill's data/ directory, run diffs that embed raw diff previews in LLM prompts, and create cron jobs for scheduled runs. Those behaviors are expected for this tool, but the instructions and code will store potentially sensitive scraped content indefinitely and (via generated prompts) encourage sending raw snapshots to an external LLM (OpenClaw/Claude) for interpretation — a privacy/exfiltration surface that is not highlighted in the meta fields.
Install Mechanism
This is an instruction-only skill (no install spec in registry) but includes a requirements.txt and README that ask the user to run 'pip install -r requirements.txt' and 'playwright install chromium'. That places install responsibility on the user; no archive downloads or obscure URLs are used inside the manifest. Risk level is moderate because Playwright and Python packages will be installed manually by the user.
Credentials
Registry metadata declares no required env vars, but the code/README clearly expect multiple credentials (SLACK_BOT_TOKEN or SLACK_WEBHOOK_URL, TELEGRAM_BOT_TOKEN/CHAT_ID, DISCORD_WEBHOOK_URL, TWILIO_ACCOUNT_SID/TWILIO_AUTH_TOKEN, optional GITHUB_TOKEN). These are directly related to delivery and GitHub rate limits, so their presence is understandable — but the mismatch (metadata says none) is an incoherence. Also note that diffs produce LLM prompts including raw HTML/text; if your agent sends those prompts to an external model, scraped content (possibly proprietary) will be transmitted.
Persistence & Privilege
The skill writes persistent state and snapshots into its own data/ directory and creates cron jobs via the OpenClaw cron system. It does not set 'always: true' or request system-wide config edits beyond its own directory. Persistent storage of all snapshots indefinitely is a privacy/retention concern but consistent with the tool's purpose.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install competitive-radar
  3. After installation, invoke the skill by name or use /competitive-radar
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.1.0
Version 1.1.0 introduces license-based tier controls and paid upgrade flow. - Added license checking via scripts/license.py to enforce free (1 competitor) vs. paid tier (unlimited). - Setup now blocks adding >1 competitor on the free tier and provides a clear upgrade link and instructions. - New /competitive-radar activate <license_key> command to activate a paid license and unlock all features. - Daily alert cron job is only active for paid licenses. - Updated SKILL.md documentation to reflect tier enforcement and activation steps.
v1.0.0
- Initial release of competitive-radar: tracks competitors weekly across 6 signal types (pricing, homepage, blog/RSS, job postings, GitHub, and critical-change alerts). - Delivers structured weekly digests and daily critical alerts to Slack, Telegram, WhatsApp, or Discord. - Guided setup flow for adding competitors, with auto-discovery for missing URLs and first snapshot capture. - Supports on-demand digests, competitor status, and answering intelligence queries from stored snapshots. - Built-in tier system: free tier tracks 1 competitor, paid for unlimited. - Robust data storage and retention, with clear logging and error handling throughout.
Metadata
Slug competitive-radar
Version 1.1.0
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 2
Frequently Asked Questions

What is Competitor Radar?

Tracks competitors weekly across 6 signals: pricing page diffs, homepage positioning changes, blog/RSS posts, job postings (hiring as strategy signal), GitHu... It is an AI Agent Skill for Claude Code / OpenClaw, with 249 downloads so far.

How do I install Competitor Radar?

Run "/install competitive-radar" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Competitor Radar free?

Yes, Competitor Radar is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Competitor Radar support?

Competitor Radar is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Competitor Radar?

It is built and maintained by manjotpahwa (@manjotpahwa); the current version is v1.1.0.

💬 Comments