anysite-competitor-analyzer
Competitor Analyzer
Systematic framework for gathering and analyzing competitive intelligence using Anysite MCP tools.
When to Use This Skill
Trigger this skill when users ask to:
- "Analyze [competitor name]"
- "Research our competitors"
- "Create a competitive analysis of [company]"
- "How does [competitor] position themselves?"
- "What are [competitor]'s strengths and weaknesses?"
- "Compare our product with [competitor]"
- "Who are our main competitors?"
- "Build a battle card for [competitor]"
Quick Start
For single competitor analysis:
# 1. Generate analysis template
python scripts/analyze_competitor.py "Competitor Name" "https://competitor.com"
# 2. Use Anysite tools to gather data (see workflow below)
# 3. Fill in the JSON template with findings
# 4. Generate final report
python scripts/analyze_competitor.py "Competitor Name" "https://competitor.com" | \
python -c "import sys,json; exec('from scripts.analyze_competitor import format_markdown_report; print(format_markdown_report(json.load(sys.stdin)))')" \
> /mnt/user-data/outputs/competitor_report.md
Analysis Workflow
Phase 1: Foundation (15-20 min)
Step 1: Initialize Analysis Structure
Run the analysis script to create structured template:
python scripts/analyze_competitor.py "Competitor Name" "https://competitor.com" > /tmp/analysis.json
Step 2: Web Presence Reconnaissance
Scrape key pages to understand positioning:
# Homepage - core messaging
Anysite:parse_webpage({
"url": "https://competitor.com",
"only_main_content": true,
"strip_all_tags": true
})
# Pricing - cost structure
Anysite:parse_webpage({
"url": "https://competitor.com/pricing",
"only_main_content": true
})
# About - company background
Anysite:parse_webpage({
"url": "https://competitor.com/about",
"only_main_content": true,
"extract_contacts": true
})
Extract from homepage:
- H1/H2 headlines → positioning_statement
- Feature bullets → core_features
- Customer logos → customer_logos
- Value prop → value_proposition
Extract from pricing:
- Tier names and prices → pricing.tiers
- Cost per unit → pricing.unit_economics
- Free tier details → pricing.free_tier_limits
- Entry price → pricing.entry_price
Extract from about:
- Company description → company_overview.description
- Location → company_overview.headquarters
- Team size hints → company_overview.employee_count
Phase 2: LinkedIn Intelligence (10-15 min)
Step 3: Find Company Profile
# Search for company
Anysite:search_linkedin_companies({
"keywords": "competitor name",
"count": 5
})
# Get detailed profile using slug from search results
Anysite:get_linkedin_company({
"company": "company-slug-from-search"
})
Extract:
follower_count→ Online presence indicatoremployee_count→ Company sizedescription→ Self-positioningheadquarters→ Locationspecialties→ Keywords they emphasize
Step 4: Analyze Team & Growth
# Check employee growth signals
Anysite:get_linkedin_company_employees({
"companies": ["company-slug"],
"keywords": "engineer developer",
"count": 50
})
# Find leadership
Anysite:get_linkedin_company_employees({
"companies": ["company-slug"],
"keywords": "CEO founder",
"count": 10
})
Use findings to assess:
- Team size → growth_indicators.employee_growth
- Eng:sales ratio → GTM strategy signal
- Recent hires → growth phase indicator
Step 5: Content Strategy
# Analyze posting activity
Anysite:get_linkedin_company_posts({
"urn": "company-urn-from-profile",
"count": 20
})
Analyze posts for:
- Frequency → content_strategy.blog_frequency
- Themes → content_strategy.key_topics
- Engagement → online_presence.linkedin.engagement_quality
- Tone → content_strategy.tone_of_voice
Phase 3: Deep Social & Community Research (20-30 min)
Step 6: Twitter Deep Dive
A. Company Account Analysis
# Get profile stats
Anysite:get_twitter_user({
"user": "competitor_handle"
})
# Recent activity (analyze more posts)
Anysite:get_twitter_user_posts({
"user": "competitor_handle",
"count": 100
})
Extract from company account:
- Followers → reach indicator
- Tweet frequency → activity level
- Content mix (product updates, thought leadership, customer engagement)
- Response time to mentions
- Tone of voice
- Most engaging tweets (viral content patterns)
B. Founder/Executive Twitter Presence
# Find and analyze founder accounts
Anysite:get_twitter_user({
"user": "founder_handle"
})
Anysite:get_twitter_user_posts({
"user": "founder_handle",
"count": 100
})
Leadership Twitter signals:
- Personal brand strength
- Technical credibility (what they share)
- Customer engagement quality
- Industry thought leadership
- Follower quality (who follows them)
- Retweet patterns (what they amplify)
C. Brand Mentions & Sentiment
# Comprehensive mention search
Anysite:search_twitter_posts({
"query": "competitor_name OR @handle OR #competitor_hashtag",
"count": 200
})
# Problem/complaint mentions
Anysite:search_twitter_posts({
"query": "competitor_name (problem OR issue OR bug OR slow OR expensive)",
"count": 100
})
# Positive sentiment
Anysite:search_twitter_posts({
"query": "competitor_name (love OR great OR amazing OR best OR solved)",
"count": 100
})
# Competitive mentions
Anysite:search_twitter_posts({
"query": "competitor_name vs OR competitor_name alternative OR switching from competitor_name",
"count": 100
})
Sentiment scoring:
For each mention batch, calculate:
- Positive mentions: praise, recommendations, success stories
- Negative mentions: complaints, frustrations, churn signals
- Neutral mentions: questions, feature discussions
- Competitive mentions: comparisons with alternatives
Sentiment Score = (Positive - Negative) / Total
Range: -1.0 (very negative) to +1.0 (very positive)
D. Customer Voice Analysis
# Find actual users
Anysite:search_twitter_posts({
"query": "using competitor_name OR tried competitor_name",
"count": 100
})
# Power users
Anysite:search_twitter_posts({
"query": "@handle thanks OR @handle helped OR @handle support",
"count": 50
})
Extract:
- Real use cases (what customers actually do)
- Pain points (what they struggle with)
- Success stories (what works well)
- Feature requests (what they want)
- Support quality (how fast company responds)
Step 7: Reddit Deep Community Intelligence
A. Brand Presence Mapping
# General mentions across Reddit
Anysite:search_reddit_posts({
"query": "competitor_name",
"count": 100
})
# Industry-specific subreddits
relevant_subs = [
"SaaS", "startups", "Entrepreneur", # Business
"webdev", "programming", "devops", # Tech
"nocode", "automation", # No-code
"datascience", "analytics" # Data
]
for sub in relevant_subs:
Anysite:search_reddit_posts({
"query": "competitor_name",
"subreddit": sub,
"count": 50
})
B. Competitive Discussions
# Direct comparisons
Anysite:search_reddit_posts({
"query": "competitor_name vs",
"count": 100
})
# Alternative searches
Anysite:search_reddit_posts({
"query": "alternative to competitor_name",
"count": 100
})
Anysite:search_reddit_posts({
"query": "better than competitor_name",
"count": 50
})
# Problem space
Anysite:search_reddit_posts({
"query": "[problem they solve] tools OR solutions",
"count": 100
})
C. Deep Thread Analysis
For high-engagement threads, get comments:
# Get specific post details
Anysite:get_reddit_post({
"post_url": "reddit.com/r/subreddit/comments/..."
})
# Get all comments
Anysite:get_reddit_post_comments({
"post_url": "reddit.com/r/subreddit/comments/..."
})
Analyze thread comments for:
- Detailed user experiences
- Technical discussions
- Feature comparisons
- Pricing discussions
- Customer support experiences
- Decision factors (why they chose/didn't choose)
D. Sentiment & Voice Analysis
Positive signals:
- "I love [competitor]"
- "Works perfectly for..."
- "Best tool for..."
- "Highly recommend"
- "Switched to [competitor] and..."
Negative signals:
- "Disappointed with..."
- "Overpriced"
- "Customer support is..."
- "Buggy/unreliable"
- "Looking for alternative"
- "Switched away from..."
Neutral/informational:
- "How does [competitor] work?"
- "Anyone tried [competitor]?"
- "Pricing question"
- Feature clarifications
E. Community Size & Engagement
Calculate metrics:
Brand Awareness Score:
- Total unique mentions (last 30 days)
- Number of different subreddits mentioned in
- Average upvotes per mention
- Comment volume per mention
Community Health:
- Positive/Negative mention ratio
- Response rate to questions
- Problem resolution in comments
- Community helping each other
Step 7.5: Cross-Platform Insight Synthesis
Compare Twitter vs Reddit:
Twitter typically shows:
- Official company narrative
- Marketing messaging
- Quick customer service interactions
- Surface-level sentiment
- Broader reach
Reddit typically reveals:
- Unfiltered user opinions
- Detailed technical discussions
- Pricing sensitivity
- Competitive comparisons
- Real problems and workarounds
Look for disconnects:
- Company claims strong product (Twitter) but users complain (Reddit)
- High Twitter engagement but low Reddit mentions → Marketing-driven, not organic
- Reddit loves it but low Twitter presence → Word-of-mouth, under-marketed
- Consistent messaging → Authentic product-market fit
Phase 4: Leadership & Founders Intelligence (15-20 min)
Step 8: Identify Key Leaders
# Find founders and C-level
Anysite:search_linkedin_users({
"company_keywords": "competitor-name",
"title": "founder OR CEO OR CTO OR CPO",
"count": 10
})
# Get detailed profiles
Anysite:get_linkedin_profile({
"user": "founder-linkedin-username",
"with_experience": true,
"with_education": true,
"with_skills": true
})
Extract for each leader:
- Full career history → their experience and expertise
- Previous companies → track record
- Education background → academic credentials
- Skills → technical depth
- Languages → market reach
- Recommendations → credibility signals
Step 9: Analyze Leadership Activity
# Get personal posts
Anysite:get_linkedin_user_posts({
"urn": "user-urn-from-profile",
"count": 50
})
# Check comments on others' posts
Anysite:get_linkedin_user_comments({
"urn": "user-urn",
"count": 30
})
# See what they're engaging with
Anysite:get_linkedin_user_reactions({
"urn": "user-urn",
"count": 50
})
Analyze for:
- Posting frequency and themes
- Technical depth in posts
- Market perspective
- Customer engagement
- Thought leadership quality
- Network quality (who engages with them)
Step 10: Twitter Leadership Presence
# Founder Twitter activity
Anysite:get_twitter_user({
"user": "founder_handle"
})
Anysite:get_twitter_user_posts({
"user": "founder_handle",
"count": 100
})
Leadership indicators:
- Personal brand strength
- Technical credibility
- Customer relationships
- Industry influence
- Communication style
- Transparency level
Phase 5: Technical & Data Discovery (10-15 min)
Step 11: Documentation Quality
# Scrape docs homepage
Anysite:parse_webpage({
"url": "https://competitor.com/docs",
"only_main_content": true
})
# Check API reference
Anysite:parse_webpage({
"url": "https://competitor.com/api",
"only_main_content": true
})
Step 11: Documentation Quality
# Scrape docs homepage
Anysite:parse_webpage({
"url": "https://competitor.com/docs",
"only_main_content": true
})
# Check API reference
Anysite:parse_webpage({
"url": "https://competitor.com/api",
"only_main_content": true
})
Assess:
- Documentation completeness
- Code examples presence
- Interactive explorer
- SDK availability → Feed into technical_capabilities
Step 12: GitHub Presence (if applicable)
# Parse GitHub profile page
Anysite:parse_webpage({
"url": "https://github.com/competitor-org",
"only_main_content": true
})
# Check main repository
Anysite:parse_webpage({
"url": "https://github.com/competitor-org/main-repo",
"only_main_content": true
})
Extract:
- Star count (developer interest)
- Fork count (actual usage)
- Commit frequency (development velocity)
- Contributors count (community size)
- Issue response time (support quality)
- Open source components (ecosystem play)
Step 13: Alternative Data Sources
# Glassdoor reviews (if company page exists)
Anysite:parse_webpage({
"url": "https://www.glassdoor.com/Reviews/competitor-name",
"only_main_content": true
})
What to extract:
- Overall rating (employee satisfaction)
- CEO approval rating (leadership quality)
- Salary ranges (compensation level)
- Interview difficulty (hiring standards)
- Work-life balance (culture signal)
- Recent reviews (current state)
Step 14: Integration Ecosystem
# Get sitemap to find all pages
Anysite:get_sitemap({
"url": "https://competitor.com/sitemap.xml",
"count": 50
})
# Parse integrations page
Anysite:parse_webpage({
"url": "https://competitor.com/integrations",
"only_main_content": true
})
Step 14: Integration Ecosystem
# Get sitemap to find all pages
Anysite:get_sitemap({
"url": "https://competitor.com/sitemap.xml",
"count": 50
})
# Parse integrations page
Anysite:parse_webpage({
"url": "https://competitor.com/integrations",
"only_main_content": true
})
Extract:
- Integration partners → technical_capabilities.integrations
- Platform focus (Zapier, enterprise tools, etc.)
- API-first vs GUI-first
Phase 6: Synthesis (15-20 min)
Step 15: Competitive Analysis
Compare findings against your own product:
Strengths (what they do well):
- Identify 3-5 clear advantages they have
- Based on features, pricing, market position, or execution
Weaknesses (where they struggle):
- Identify 3-5 clear gaps or problems
- Missing features, high prices, poor UX, etc.
Opportunities (what you can exploit):
- Their weaknesses that you can capitalize on
- Underserved segments they're missing
- Messaging/positioning gaps
Threats (what you need to watch):
- Their strengths that could hurt you
- Recent funding or growth
- Feature development velocity
Step 16: Strategic Insights
Synthesize everything into:
Key Takeaways (3-5 bullets):
- Most important findings
- Clear, actionable insights
Competitive Threats (2-3 bullets):
- What they could do to hurt your position
- Their strategic advantages
Opportunities to Exploit (3-5 bullets):
- How to position against them
- Their vulnerabilities to target
- Market gaps they're missing
Watch Areas:
- Things to monitor quarterly
- Signals of strategic shifts
Step 17: Generate Final Report
Update the JSON template with all findings, then generate markdown:
import json
from scripts.analyze_competitor import save_analysis
# Load populated template
with open('/tmp/analysis.json', 'r') as f:
data = json.load(f)
# Generate reports
json_path, md_path = save_analysis(data)
print(f"Reports saved:\n JSON: {json_path}\n Markdown: {md_path}")
Move final files to outputs:
cp /tmp/analysis.json /mnt/user-data/outputs/
cp /tmp/analysis.md /mnt/user-data/outputs/
Advanced Techniques
Multi-Competitor Analysis
For analyzing 3-5 competitors simultaneously:
- Run analysis workflow for each competitor
- Create comparison matrix in spreadsheet format
- Focus on key differentiators:
- Pricing comparison table
- Feature matrix (rows=features, cols=competitors)
- Market position map (price vs capabilities)
- Social presence comparison
Ongoing Monitoring
For quarterly updates (not full re-analysis):
Quick check (30 min):
# 1. Re-scrape pricing
Anysite:parse_webpage({"url": "competitor.com/pricing"})
# 2. Check recent posts
Anysite:get_linkedin_company_posts({"urn": "...", "count": 10})
# 3. Employee growth
Anysite:get_linkedin_company_employees({"companies": ["..."], "count": 20})
# 4. Recent mentions
Anysite:search_twitter_posts({"query": "competitor", "count": 50})
Update only changed sections in JSON template.
Battle Card Creation
For sales team quick reference:
Focus on:
- Quick facts (1-2 sentences)
- Head-to-head feature comparison (table format)
- Pricing comparison (clear numbers)
- 3 reasons we win
- 3 reasons we might lose
- Talk tracks ("When they say X, we say Y")
Keep to 1-2 pages maximum.
Reference Files
When you need detailed guidance:
-
Data collection methodology: See data_collection.md
- Use when unsure which Anysite tools to use
- Use when planning data gathering strategy
- Contains detailed tool parameters and extraction techniques
-
Analysis frameworks: See analysis_frameworks.md
- Use when analyzing specific company types (SaaS vs Enterprise vs Consumer)
- Use when creating battle cards or competitive matrices
- Contains templates for different output formats
Common Patterns
Pattern 1: Rapid Assessment (30-45 min)
For quick competitive scan:
- Homepage + pricing scrape
- LinkedIn company profile
- Recent social posts (20 total)
- Fill core sections only (skip deep dives)
- Generate brief summary (1 page)
Pattern 2: Deep Intelligence (2-3 hours)
For comprehensive analysis:
- Full web presence (7-10 pages)
- Complete LinkedIn intelligence
- Social media deep dive (50-100 posts/mentions)
- Community sentiment analysis
- Technical documentation review
- Full JSON template populated
- Detailed markdown report
Pattern 3: Pricing Focus
For pricing-specific analysis:
- Scrape all pricing pages
- Calculate unit economics
- Map tier structures
- Compare to market
- Identify pricing strategy
- Generate pricing comparison table
Pattern 4: Leadership Focus
For founder/team intelligence:
- Identify all founders and C-level
- Deep dive into founder LinkedIn profiles
- Analyze personal posting activity (50+ posts)
- Track Twitter presence and influence
- Map previous company experience
- Assess thought leadership quality
- Evaluate public credibility
Use when:
- Considering partnerships
- Evaluating acquisition targets
- Assessing strategic threats
- Understanding company DNA
Tips for Effective Analysis
Be Systematic:
- Follow the phase order
- Don't skip LinkedIn intelligence (best growth signals)
- Always check pricing (most volatile data)
Think Strategically:
- Not just "what" they do, but "why"
- Look for patterns in their behavior
- Consider their constraints (funding, team size)
Verify Claims:
- Marketing copy ≠ reality
- Cross-reference multiple sources
- Note confidence levels (verified vs estimated)
Focus on Actionable Insights:
- Don't just describe, analyze implications
- What should YOUR company do based on findings?
- What threats need immediate response?
Document Data Freshness:
- Always note analysis date
- Mark which data is recent vs stale
- Plan update frequency based on importance
Output Quality Standards
Good competitive analysis includes:
- ✅ Clear positioning statement
- ✅ Quantified metrics (prices, follower counts, team size)
- ✅ Specific examples (actual quotes, feature lists)
- ✅ Strategic implications explained
- ✅ Data sources noted
- ✅ Confidence levels indicated
Avoid:
- ❌ Vague assessments ("they seem good at X")
- ❌ Unsupported claims ("probably losing money")
- ❌ Missing pricing details
- ❌ Outdated data without date stamps
- ❌ Pure feature lists without analysis
Troubleshooting
"Can't find LinkedIn company":
- Try variations of company name
- Search for CEO name, find company from profile
- Check if they use different legal name
"Pricing page missing/unclear":
- Check /plans, /buy, /subscribe URLs
- Look for pricing calculator
- Note "Contact Sales" as signal (enterprise focus)
"No social media presence":
- Still document the absence (itself a signal)
- Check founder personal accounts
- Look for employee posting activity
"Too much data, overwhelmed":
- Start with Phase 1 & 2 only (foundation + LinkedIn)
- Generate partial report
- Add Phase 3 & 4 if needed for depth