SKILL.md
Competitor Profiling
Every claim in a profile traces to a source: a scraped page, a review, or a metric. Profiles follow one template so they compare side by side. Untraceable claims are opinions, label them or cut them.
Workflow
- Confirm scope. Read any product marketing context file (
.agents/product-marketing.mdor.claude/product-marketing.md) first. Then confirm: competitor URLs, quick scan or deep profile, focus areas. Default to quick scan unless the user asks for depth or gives 3 or fewer competitors. - Quick scan: homepage + pricing, domain-level SEO summary.
- Deep profile: all key pages, review mining, full backlink and keyword data.
- Persist raw data first. Save every scrape and API response to disk before synthesizing, so runs are auditable and repeatable without re-fetching: ``
competitor-profiles/raw/<competitor-slug>/<YYYY-MM-DD>/scrapes/<page>.md competitor-profiles/raw/<competitor-slug>/<YYYY-MM-DD>/seo/<endpoint>.json competitor-profiles/raw/<competitor-slug>/<YYYY-MM-DD>/reviews/<source>.md`` Never overwrite a prior date's folder, snapshots enable diffing over time. - Scrape key pages. Map the site, then pull: homepage, pricing, features, about, customers, integrations, changelog. Extraction targets per page are in references/profile-template.md.
- Mine reviews (deep profile). G2, Capterra, TrustRadius, Product Hunt. Extract rating, review count, praise themes, complaint themes, 3-5 representative quotes.
- Pull SEO data if a data provider is available: domain rank, backlinks, referring domains, ranked keywords, top pages, estimated traffic. Pull identical metrics for every competitor or the comparison is worthless. No provider: skip and note the gap, do not estimate.
- Synthesize. Build one profile per competitor using the template in references/profile-template.md. Cross-check claims: "10,000 customers" on the homepage should square with their traffic and backlink footprint. Include the generation date and a Raw Data Sources section pointing at the raw folder.
- Summarize across competitors. After all profiles:
_summary.mdwith a comparison table, positioning map, 3-5 strategic takeaways, and underserved gaps.
For 10+ competitors, propose profiling the top 5 first by market overlap.
Verification
Run ls competitor-profiles/raw/<slug>/$(date +%Y-%m-%d)/scrapes/ for each profiled competitor. Expect at least homepage.md and pricing.md. Missing files mean the profile was written from memory or assumption, re-scrape before delivering. Then pick 3 claims from any profile and trace each to a raw file. Any claim you cannot trace: label it as inference or delete it.
Good vs Bad
Bad: "CompetitorX is weak on enterprise features and losing market share." No source, reads as wishful thinking, and the user will repeat it in a board deck.
Good: "CompetitorX: 14 G2 reviews in the last quarter mention missing SSO/SCIM (raw/competitorx/<date>/reviews/g2.md). Their changelog shows no enterprise-auth work in the pulled snapshot. Inference: enterprise readiness is a current gap."
Footguns
- Synthesizing before saving raw data. The run cannot be audited or re-used, and re-scraping costs real money. Fix: raw files first, always.
- Inconsistent metrics across competitors. Traffic for one, backlinks for another, comparison table becomes fiction. Fix: same metric set for every competitor.
- Stale snapshots presented as current. Pricing pages change constantly. Fix: date every profile, flag anything that looks outdated, re-check pricing first on updates.
- Exaggerating weaknesses. Flattering-but-wrong profiles cause bad strategy. Fix: state competitor strengths plainly, the user needs accuracy, not comfort.
Completion checklist
- [ ] Raw data saved under dated folders before synthesis
- [ ] Every profile uses the shared template with generation date
- [ ] Identical metric set across all competitors
- [ ] 3-claim trace test passed
- [ ] Cross-competitor summary delivered
Any box unchecked: not done. Fix or say so.