AgentSkillsCN

competitor-analysis

从竞争对手网站中提取营销元素。仅进行结构化观察,不撰写文案或提出建议。

SKILL.md
--- frontmatter
name: competitor-analysis
description: Extracts marketing elements from competitor websites. Structured observation only. Does not write copy or make recommendations.

Competitor Analysis Skill

Purpose

Extracts observable marketing data from competitor websites. Observation only, no interpretation.

Position in Workflow

code
[competitor-analysis] → [keyword-research] → [lead-gen-copy]
         ↓
   Raw observations      →    Patterns    →    Copy decisions

This skill produces RAW DATA. Copy decisions happen in other skills.

Input

yaml
competitor_urls: ["url1", "url2", "url3"]  # min 3, max 5
analysis_focus: full | messaging | trust | pricing | cta
industry: removals | cleaning | trades | legal | healthcare

Output

yaml
competitors:
  - url: "..."
    messaging: { ... }
    trust: { ... }
    pricing: { ... }
    ctas: { ... }
observed_differences: [ ... ]  # What varies between competitors

Hard Rules

RuleRequirement
Competitor countMinimum 3, maximum 5
Data sourceVisual observation only
No scrapingManual review, no HTML parsing
No recommendationsObservations only, no "should"
Absence = explicitMissing element → not_found: true

Analysis Categories

1. Messaging

FieldExtract
headlineExact H1 text
headline_patternbenefit / feature / question / statement
value_propMain promise (1 sentence)
toneformal / professional / casual / friendly
unique_claimsList of specific claims

2. Trust Elements

FieldExtract
review_platformGoogle / Trustpilot / none
ratingNumber or not_found
review_countNumber or not_found
credentialsList: type + name
guaranteesList: type + specifics
team_visibletrue / false

3. Pricing

FieldExtract
transparencyhidden / teaser / full
lowest_shownPrice or not_found
pricing_modelfixed / hourly / quote-only
discountsList or not_found

4. CTAs

FieldExtract
primary_textExact button text
primary_placementhero / header / footer
form_fields_countNumber
phone_prominenttrue / false
mobile_stickytrue / false

Handling Missing Data

Never leave fields empty. Never guess.

yaml
# If element exists
rating: 4.8

# If element not found
rating: 
  not_found: true
  
# If unclear/ambiguous
pricing_model:
  unclear: true
  observed: "Shows 'from £X' but also 'call for quote'"

Observed Differences Rules

Differences are observations, not opportunities or recommendations.

yaml
# CORRECT - observation only
observed_differences:
  - category: pricing
    observation: "Competitors A, B show no prices. Competitor C shows 'from £299'."
    
# WRONG - contains recommendation
observed_differences:
  - category: pricing
    opportunity: "Show transparent pricing to differentiate"  # ❌ NO

"Opportunity" word is FORBIDDEN in output.

Output Stability

Same input → same output structure. Always.

ScenarioRule
Field has dataInclude with value
Field not foundInclude with not_found: true
Field unclearInclude with unclear: true + observed
NeverOmit fields

Forbidden

  • ❌ HTML scraping or parsing
  • ❌ Accessing competitor analytics
  • ❌ Recommendations or "should" statements
  • ❌ Ranking competitors (better/worse)
  • ❌ Omitting fields when data missing
  • ❌ Using word "opportunity"
  • ❌ Making strategic suggestions

Non-goals

  • Does NOT write copy
  • Does NOT rank competitors
  • Does NOT make recommendations
  • Does NOT interpret data
  • Does NOT suggest positioning

References

Definition of Done

  • 3-5 competitors analyzed
  • All categories filled (or marked not_found)
  • No recommendations in output
  • No "opportunity" word used
  • Differences are observations only