posthog/competitor-data-verifier
Verify and update competitor product data by scraping competitor websites using WebFetch/WebSearch. Use when the user asks to verify, check, or update competitor information in competitorData files (like amplitude.tsx, mixpanel.tsx), or when they want to ensure competitor feature data is accurate and current. This skill systematically checks product features, pricing, platform details, and generates update recommendations with source URLs for verification.
npx skills add https://github.com/PostHog/posthog.com --skill competitor-data-verifier
Verify and update competitor product data in src/hooks/competitorData/*.tsx by scraping competitor websites.
Read the competitor data file and understand what needs verifying:
Read src/hooks/competitorData/{competitor}.tsx
If any feature key is unclear (e.g. instant_rollbacks, persist_across_auth), check the matching feature definition file in src/hooks/featureDefinitions/ for the human-readable label and description. For example, feature keys under feature_flags.management.features are defined in src/hooks/featureDefinitions/feature_flags.tsx. This tells you exactly what the feature means so you can search for the right thing on the competitor's site.
This is the most important optimization. Launch multiple WebFetch and WebSearch calls in parallel — don't do them one at a time.
Batch 1 — Direct page fetches + searches in parallel:
WebFetch: {competitor}.com/pricing → pricing, plan names, free tier limits
WebFetch: {competitor}.com/session-replay → session replay features
WebSearch: "{Competitor} features documentation site:{competitor}.com"
WebSearch: "{Competitor} security compliance SOC2 HIPAA site:{competitor}.com"
Batch 2 — Fill gaps (for anything Batch 1 missed or 404'd):
WebFetch: URLs discovered from Batch 1 search results
WebSearch: "{Competitor} {product} free tier limit {current_year}"
WebSearch: "{Competitor} integrations {specific_tool_name}"
Batch 3 — Targeted follow-ups for remaining unknowns. Try docs subdomains (docs.{competitor}.com) which scrape more reliably than marketing pages.
WebFetch often returns incomplete content (nav/footer only) on JS-heavy pages. When this happens:
docs.{competitor}.com pages are usually static and scrape well/pricing vs /plans vs /buy/security vs /trust vs /compliance/analytics vs /product-analytics vs /products/analytics/integrations vs /data-connections vs /marketplaceFor each field in the competitor data file, classify as:
Use this streamlined format (see references/report-template.md for full template):
# Competitor Data Verification: {Name}
Date: {date} | File: src/hooks/competitorData/{competitor}.tsx
## High-Confidence Changes (recommend applying)
**{field_path}**
Current: `{old}` → Recommended: `{new}`
Source: {url} | Quote: "{exact quote}"
## Needs Manual Verification
| Field | Current | Question | Source |
|-------|---------|----------|--------|
## Proposed Diff
/pricing page is the single highest-value page — it reveals plan names, feature gates, and free tier limits all at oncedocs.{competitor}.com) scrape more reliably than marketing pagesTake posthog/competitor-data-verifier from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.