skills/anysite-competitor-intelligence/SKILL.md
Competitive intelligence gathering using anysite MCP server across LinkedIn, social media, Y Combinator, and the web. Track competitor activities, analyze hiring patterns, monitor content strategies, benchmark market positioning, research startup competitors, and gather strategic intelligence. Supports LinkedIn (companies, employees, posts), Instagram, Twitter/X, Reddit, YouTube, Y Combinator, and web scraping. Use when users need to analyze competitors, track competitive movements, research market positioning, monitor hiring velocity, or gather strategic market intelligence.
npx skillsauth add anysiteio/agent-skills anysite-competitor-intelligenceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Comprehensive competitive intelligence gathering using anysite MCP server. Track competitors across LinkedIn, social media, and the web to understand their strategies, monitor their activities, and identify competitive opportunities.
The anysite Competitor Intelligence skill helps you:
This skill provides 90% coverage of competitive intelligence capabilities with excellent LinkedIn and social media monitoring.
All data fetching uses the universal execute() meta-tool:
execute(source, category, endpoint, params) → returns data + cache_key
After fetching, use these for analysis and export:
get_page(cache_key, offset, limit) — paginate through large result setsquery_cache(cache_key, conditions, sort_by, aggregate, group_by) — filter/sort/aggregate cached data without re-fetchingexport_data(cache_key, format) — export to CSV, JSON, or JSONL for sharingAlways call discover(source, category) first if unsure about endpoint names or params.
Error handling: Check response for llm_hint field on errors — it provides actionable guidance (e.g., "Likely passed fsd_company URN instead of company: prefix").
Choose your competitor identification method:
| Goal | v2 Call | Output |
|------|---------|--------|
| Find similar companies | execute("linkedin", "search", "search_companies", {"keywords": "...", "count": 50}) | Company list with metrics |
| Research startup competitors | execute("yc", "search", "search_companies", {"query": "...", "count": 50}) | YC startups by industry/batch |
| Discover by employee search | execute("linkedin", "search", "search_users", {...}) → extract companies | Companies from employee profiles |
| Find by keywords/industry | execute("linkedin", "search", "search_companies", {"keywords": "...", "industry": "...", "count": 50}) | Filtered company list |
Execute MCP tools to collect competitor data:
Company Profile Analysis
execute("linkedin", "company", "company", {"company": "competitor-name"})
→ Returns: Description, size, location, website, specialties, URN
Employee Intelligence
execute("linkedin", "search", "search_users", {
"company_keywords": "Competitor Inc",
"title": "VP OR Director OR Head",
"count": 50
})
→ Returns: Key employees, org structure insights
→ Use get_page(cache_key, 10, 50) to load more results
Hiring Velocity Analysis
execute("linkedin", "company", "company_employee_stats", {
"urn": {"type": "company", "value": "<company_id>"}
})
→ Returns: Growth metrics, department distribution
→ Use query_cache(cache_key, sort_by=[{"field": "count", "order": "desc"}]) to rank departments
Content Strategy
execute("linkedin", "company", "company_posts", {
"urn": {"type": "company", "value": "<company_id>"},
"count": 20
})
→ Returns: Recent posts, engagement, messaging themes
→ Use query_cache(cache_key, aggregate=[{"field": "reactions", "function": "avg"}]) for engagement stats
Analyze gathered data for:
Use query_cache() to filter and aggregate without re-fetching:
query_cache(cache_key, conditions=[{"field": "department", "operator": "contains", "value": "Engineering"}])
Chat Summary: Competitive insights with key findings
CSV Export: export_data(cache_key, "csv") → Competitor comparison matrix
JSON Export: export_data(cache_key, "json") → Complete data for tracking over time
Scenario: Deep dive on a specific competitor
Steps:
execute("linkedin", "company", "company", {"company": "competitor"})
→ Size, industry, description, website, founding year
→ Save the URN (convert fsd_company to company: prefix for sub-endpoints)
execute("linkedin", "search", "search_users", {
"company_keywords": "Competitor Inc",
"title": "C-level OR VP OR SVP OR President",
"count": 50
})
→ C-suite and VP-level executives
→ Use get_page(cache_key, 10, 50) for more results
execute("linkedin", "company", "company_employee_stats", {
"urn": {"type": "company", "value": "<company_id>"}
})
→ Total employees, growth rate, department breakdown
For each department:
execute("linkedin", "search", "search_users", {
"company_keywords": "Competitor Inc",
"title": "<department_title>",
"count": 50
})
→ Team sizes, key roles
execute("linkedin", "search", "search_jobs", {"keywords": "Competitor Inc", "count": 50})
→ Open positions, hiring priorities, expansion areas
→ Use query_cache(cache_key, group_by="location") to see geographic expansion
execute("linkedin", "company", "company_posts", {
"urn": {"type": "company", "value": "<company_id>"},
"count": 50
})
→ Posting frequency, themes, engagement levels
execute("twitter", "user", "user", {"user": "competitor"})
execute("twitter", "user", "user_posts", {"user": "competitor", "count": 50})
→ Social media presence and strategy
execute("webparser", "parse", "parse", {"url": "https://competitor.com"})
→ Positioning, messaging, product offerings
execute("webparser", "parse", "parse", {"url": "https://competitor.com/blog"})
→ Content topics, thought leadership
execute("reddit", "search", "search_posts", {"query": "Competitor Inc", "count": 20})
→ Customer sentiment, product feedback
Expected Output:
export_data(cache_key, "csv") to create downloadable competitor reportScenario: Map all competitors in your space
Steps:
execute("linkedin", "search", "search_companies", {
"keywords": "<your industry keywords>",
"industry": "<industry>",
"employee_count": ["51-200", "201-500", "501-1000"],
"count": 50
})
For each company:
execute("linkedin", "company", "company", {"company": "<alias>"})
→ Review description for relevance
→ Check employee count and growth
→ Verify competitive overlap
Direct: Same products, same market
Indirect: Similar products, different market
Potential: Adjacent space, could expand
For each competitor:
execute("linkedin", "company", "company_employee_stats", {
"urn": {"type": "company", "value": "<company_id>"}
})
→ Employee count, growth rate
→ Department distribution
→ Use query_cache() to compare across competitors
For each competitor:
execute("linkedin", "company", "company_posts", {
"urn": {"type": "company", "value": "<company_id>"},
"count": 10
})
→ Key messaging themes
execute("webparser", "parse", "parse", {"url": "<website>/about"})
→ Value proposition, target market
execute("yc", "search", "search_companies", {"query": "<industry>", "count": 50})
→ YC competitors with funding data
→ Use query_cache(cache_key, sort_by=[{"field": "team_size", "order": "desc"}]) to rank by size
For each YC company:
execute("yc", "company", "get", {"slug": "<company_slug>"})
→ Batch, team size, description
Expected Output:
export_data(cache_key, "csv") for the full comparison matrixScenario: Monitor competitor hiring to identify growth areas
Steps:
execute("linkedin", "company", "company_employee_stats", {
"urn": {"type": "company", "value": "<company_id>"}
})
→ Current total employees
→ Department distribution
execute("linkedin", "search", "search_jobs", {"keywords": "Competitor Inc", "count": 100})
→ All open positions
→ Use query_cache(cache_key, group_by="location") to group by office
Group by department:
- Engineering roles
- Sales roles
- Marketing roles
- Operations roles
execute("linkedin", "search", "search_users", {
"company_keywords": "Competitor Inc",
"count": 100
})
→ Get all employees
→ Use get_page(cache_key, 10, 100) to paginate through full list
Filter for recent joins:
execute("linkedin", "user", "user_experience", {
"urn": {"type": "fsd_profile", "value": "<profile_id>"},
"count": 5
})
→ Start date at current company
→ Identify hires from last 3-6 months
For former employees:
execute("linkedin", "search", "search_users", {"keywords": "Competitor Inc", "count": 50})
→ Filter profiles showing "Former" or past employment
Identify:
- Leadership departures
- Team exodus (multiple from same department)
- Moves to other competitors
Identify where competitors hire from:
- For each new hire: get previous companies
- Track talent pipelines
- Identify poaching patterns
→ Use export_data(cache_key, "csv") to build a hiring tracker spreadsheet
Expected Output:
Scenario: Analyze competitor content across platforms
Steps:
execute("linkedin", "company", "company_posts", {
"urn": {"type": "company", "value": "<company_id>"},
"count": 50
})
→ Use query_cache(cache_key, aggregate=[{"field": "comment_count", "function": "avg"}]) for engagement stats
Analyze:
- Posting frequency (posts/week)
- Content types (articles, videos, polls)
- Engagement rates (likes, comments, shares)
- Topics and themes
- Employee advocacy (shares/comments from team)
execute("twitter", "user", "user", {"user": "competitor"})
execute("twitter", "user", "user_posts", {"user": "competitor", "count": 100})
Analyze:
- Tweet frequency
- Engagement metrics
- Content themes
- Use of threads/media
- Response rates
execute("youtube", "channel", "channel_videos", {"channel": "competitor", "count": 30})
For each video:
execute("youtube", "video", "video", {"video": "<video_id>"})
Analyze:
- Upload frequency
- View counts
- Engagement (likes, comments)
- Content types (demos, webinars, customer stories)
- Video length and production quality
→ Use query_cache(cache_key, sort_by=[{"field": "view_count", "order": "desc"}]) to find top videos
execute("instagram", "user", "user", {"user": "competitor"})
execute("instagram", "user", "user_posts", {"user": "competitor", "count": 50})
Analyze:
- Post frequency
- Visual style/branding
- Engagement rates
- Use of Reels vs. static posts
- Influencer partnerships
execute("webparser", "parse", "parse", {"url": "https://competitor.com/blog"})
execute("webparser", "sitemap", "sitemap", {"url": "https://competitor.com"})
→ Find all blog posts
Analyze:
- Publishing frequency
- Content topics
- SEO keywords
- Thought leadership positioning
execute("reddit", "search", "search_posts", {"query": "Competitor Inc", "count": 50})
execute("reddit", "search", "search_posts", {"query": "competitor product name", "count": 50})
Analyze:
- Customer feedback
- Common complaints
- Product strengths
- Feature requests
→ Use query_cache(cache_key, sort_by=[{"field": "comment_count", "order": "desc"}]) to find most-discussed threads
Expected Output:
export_data(cache_key, "csv") for cross-platform content comparisonCompany Profile — execute("linkedin", "company", "company", {"company": "..."})
Employee Stats — execute("linkedin", "company", "company_employee_stats", {"urn": {"type": "company", "value": "..."}})
company: prefix (not fsd_company). Convert: urn:li:fsd_company:1441 → company:1441Company Posts — execute("linkedin", "company", "company_posts", {"urn": {"type": "company", "value": "..."}, "count": N})
Search Users — execute("linkedin", "search", "search_users", {"company_keywords": "...", "title": "...", "count": N})
User Profile — execute("linkedin", "user", "user", {"user": "..."})
User Experience — execute("linkedin", "user", "user_experience", {"urn": {"type": "fsd_profile", "value": "..."}, "count": N})
Search Jobs — execute("linkedin", "search", "search_jobs", {"keywords": "...", "count": N})
Search Companies — execute("yc", "search", "search_companies", {"query": "...", "count": N})
Company Details — execute("yc", "company", "get", {"slug": "..."})
Search Founders — execute("yc", "search", "search_founders", {"query": "...", "count": N})
Twitter/X:
execute("twitter", "search", "search_posts", {"query": "...", "count": N}) — Find competitor mentionsexecute("twitter", "user", "user", {"user": "..."}) — Get competitor profileexecute("twitter", "user", "user_posts", {"user": "...", "count": N}) — Get recent tweetsInstagram:
execute("instagram", "search", "search_posts", {"query": "...", "count": N}) — Find hashtag/keyword mentionsexecute("instagram", "user", "user", {"user": "..."}) — Get profile statsexecute("instagram", "user", "user_posts", {"user": "...", "count": N}) — Get recent postsReddit:
execute("reddit", "search", "search_posts", {"query": "...", "count": N}) — Find discussions about competitorsexecute("reddit", "posts", "posts", {"post_url": "..."}) — Get post details and sentimentYouTube:
execute("youtube", "search", "search_videos", {"query": "...", "count": N}) — Find competitor videosexecute("youtube", "channel", "channel_videos", {"channel": "...", "count": N}) — Get all channel videosexecute("youtube", "video", "video", {"video": "..."}) — Get video details and metricsParse Webpage — execute("webparser", "parse", "parse", {"url": "..."})
Sitemap — execute("webparser", "sitemap", "sitemap", {"url": "..."})
Web Search — execute("duckduckgo", "search", "search", {"query": "..."})
Pagination — get_page(cache_key, offset, limit)
next_offset is returnedFilter/Aggregate — query_cache(cache_key, conditions, sort_by, aggregate, group_by)
query_cache(cache_key, sort_by=[{"field": "employee_count", "order": "desc"}])Export — export_data(cache_key, format)
Provides competitive intelligence highlights:
Use export_data(cache_key, "csv") for competitor comparison matrix with:
Use export_data(cache_key, "json") for complete competitive data for:
Track competitors over time by storing data and comparing:
Monthly Snapshot:
{
"date": "2026-01-29",
"competitors": [
{
"name": "Competitor A",
"employees": 350,
"monthly_growth": 8,
"open_positions": 25,
"linkedin_posts": 12,
"twitter_followers": 5400,
"funding_stage": "Series B"
}
]
}
Trend Analysis:
Strengths (from LinkedIn, website, reviews):
Weaknesses (from reviews, job postings, employee turnover):
Opportunities (from market analysis):
Threats (from competitive monitoring):
Track deals against specific competitors:
Data Points to Collect:
Intelligence Gathering:
For each competitor in win/loss:
1. execute("linkedin", "company", "company", {"company": "..."}) → Current positioning
2. execute("webparser", "parse", "parse", {"url": "<website>/pricing"}) → Pricing strategy
3. execute("webparser", "parse", "parse", {"url": "<website>/features"}) → Feature set
4. execute("reddit", "search", "search_posts", {"query": "competitor", "count": 20}) → Customer feedback
5. execute("linkedin", "company", "company_posts", {"urn": {"type": "company", "value": "..."}, "count": 10}) → Recent messaging
Analysis:
For Local/Retail Competitors: Focus on:
For Tech/SaaS Competitors: Excellent coverage through:
For Enterprise Competitors:
Solution:
412 means not found — check the llm_hint in the response for guidanceSolution:
Solution:
Solution:
company: prefix, NOT fsd_companyurn:li:fsd_company:1441 → use {"type": "company", "value": "1441"}fsd_profile URN from /linkedin/user responseReady to analyze competitors? Ask Claude to help you research competitors, track hiring patterns, or benchmark competitive positioning using this skill!
tools
Read-only static security audit of Claude Code skills, commands, and plugins. Analyzes SKILL.md frontmatter, body content, supporting scripts, and hooks for security risks. Use this skill when the user asks to "audit a skill", "review skill security", "check SKILL.md for risks", "scan a plugin for dangerous patterns", "verify skill safety", "check skill permissions", "analyze skill hooks", "audit a skill from GitHub", "review a remote skill", "check a skill by URL", or needs a security assessment of any Claude Code skill, command, or plugin before enabling it.
tools
Build a positioning map for 3–5 competitors and identify the empty quadrant the founder could own. Use when a founder asks "where's the positioning gap?", "how do I position against X?", "what's the competitive landscape look like on hero / pricing / hiring / customers?", or needs a structured comparison before a launch, repositioning, or fundraise. Combines Anysite MCP (LinkedIn company entity + post search + jobs search; SEC for late-stage) with Exa MCP (fetch JS-heavy SaaS marketing pages, find case studies and changelogs). Returns a comparison table across 5 axes (hero / pricing / specialities / recent shipping / hiring), 3 candidate positioning moves with explicit choice criteria, and a one-sentence positioning statement. Requires customer pain themes as input — positioning without pain context is just rearranging marketing copy. Run competitor-discovery and customer-pain-mining first if you don't have a curated competitor list + pain themes.
tools
Extract verbatim customer complaints about competitors — the exact wording the founder's product copy should steal, in customers' own words. Use when a founder asks "what do users hate about X?", "what's broken about [category]?", "what's the white space?", or needs raw customer language for landing-page copy, custdev prep, ad copy, or product strategy. Combines Anysite MCP (Reddit broad sweeps, LinkedIn issue-level pain search, YouTube comments under review videos, Twitter for viral pain quotes) with Exa MCP (semantic search for review blog posts, comparison articles, "why I left X" Medium posts). Returns 3–5 pain clusters with 2–3 verbatim quotes each plus a white-space section listing features customers ask for that no competitor ships. Run competitor-discovery first if there's no validated competitor list.
tools
--- name: competitor-discovery description: Find a startup's REAL competitors — the alternatives customers actually compare them to, not just the names on the pitch deck. Use when a founder asks "who are my real competitors?", asks "what does the choice landscape look like for X?", wants to validate or expand a pitch-deck competitor slide, or needs to map alternatives before pain mining or positioning work. Combines Anysite MCP (LinkedIn company/search, LinkedIn posts `mentioned[]` extraction +