saccoai-competitive-analysis

Installation
SKILL.md

This skill crawls the client's site and all specified competitor sites simultaneously, extracts performance, design, SEO, compliance, and technical signals from each, and produces a structured comparison.

Two output modes: quick (comparison table + key findings) and full (table + per-competitor narrative + screenshots + prioritised recommendations).

The output feeds directly into saccoai-proposal for the competitive context section of project proposals.

Inputs

Input Required Default Description
Client URL Yes The client's current website
Competitor URLs Yes 3–5 competitor URLs, space-separated. Alternatively, provide an industry keyword for auto-discovery (the skill will search for the top 5 competitors)
--depth quick|full No quick quick produces a comparison table; full adds narrative, screenshots, and recommendations

Execution Model

Single-agent hybrid. Uses superpowers:dispatching-parallel-agents for Phase 1 (crawling all sites in parallel — the primary performance win). Phases 2 and 3 are sequential and run in the main agent after all crawl data is collected.

Preconditions

Before starting, check for cached output:

  • If .saccoai/competitive/comparison.md exists, ask: "A competitive analysis already exists from a previous run. Re-run and overwrite, or use the existing one?"
  • If re-running, delete .saccoai/competitive/ before proceeding.

Phase 1: Crawl All Sites

Invoke saccoai-website-analysis on the client site and every competitor site in parallel using superpowers:dispatching-parallel-agents.

Auto-discovery (if an industry keyword was provided instead of URLs)

Before dispatching agents, search for the top 5 competitor URLs in the given industry:

  1. Use agent-browser to search "{keyword} top companies site:linkedin.com OR site:crunchbase.com" — extract company websites
  2. Fallback: search "{keyword} agency Switzerland" (or relevant geography) — collect homepage URLs
  3. Confirm the discovered URLs with the user: "I found these competitors: {list}. Proceed with all 5, or remove any?"

Parallel crawl

Dispatch one agent per site (client + all competitors). Each agent runs saccoai-website-analysis with these targets:

  • Page count and navigation structure
  • Content depth (word count per key page, image count)
  • Tech stack detection (framework, hosting, CDN)
  • Lighthouse scores: Performance, Accessibility, Best Practices, SEO — run 3×, take the median
  • Core Web Vitals: LCP, CLS, INP
  • Total page weight breakdown (JS, CSS, images in KB)
  • Image optimization signals (WebP/AVIF usage, lazy loading)
  • Meta tags: title, description, OG tags presence and quality
  • Structured data: JSON-LD types present
  • Sitemap and robots.txt presence
  • i18n coverage: detected languages
  • Design signals: font families (from CSS), primary/accent colors (from CSS custom properties), dark mode support, animation presence
  • Compliance signals: privacy policy linked, cookie consent banner present, Impressum present, HTTPS enforced
  • Accessibility quick scan: axe-core critical violations count

Each agent saves its output to .saccoai/competitive/raw/{domain}/ — structured JSON plus any notes.

After all agents complete

Collect all raw outputs. Validate that each site was successfully crawled. If a site returned an error (timeout, blocked, etc.), note it in the output as "crawl failed — manual review needed" and continue with the remaining data.

Phase 2: Benchmark

Normalize all crawl data into a consistent benchmark structure for each site. For each site, produce:

Performance

Metric How to collect
Lighthouse Performance Median of 3 Lighthouse runs
Lighthouse Accessibility Median of 3 runs
Lighthouse Best Practices Median of 3 runs
Lighthouse SEO Median of 3 runs
LCP From Web Vitals report
CLS From Web Vitals report
INP From Web Vitals report
Total page weight Sum of JS + CSS + images (KB)

Design Quality

  • Font choices: note the display and body font families — flag "generic" (Arial, sans-serif system stacks, default Bootstrap fonts) vs "distinctive" (custom typefaces, variable fonts)
  • Color palette consistency: compare colors across 2–3 pages — flag if inconsistent
  • Mobile responsiveness: check viewport meta tag, touch target sizes (flag if < 44px), horizontal overflow
  • Dark mode support: check for prefers-color-scheme: dark media query or data-theme toggle
  • Animation presence: note whether Framer Motion, GSAP, or CSS animations are detected; classify as none / minimal / rich
  • Visual consistency: flag major layout/style inconsistencies between pages

Content and SEO

  • Total page count (from crawl)
  • Content depth: average word count per page, average image count per page
  • Structured data types present (JSON-LD: Organization, LocalBusiness, WebSite, BreadcrumbList, etc.)
  • Meta completeness: % of pages with title + description + OG tags
  • Sitemap: present and valid / present but missing pages / absent
  • robots.txt: present / absent
  • i18n: languages detected, completeness (all pages in all languages vs partial)

Compliance

  • Privacy policy: linked from footer on all pages / linked on some / absent
  • Cookie consent banner: present with granular choice / present (accept-all only) / absent
  • Impressum: present / absent (flag as required for Swiss sites)
  • HTTPS: enforced with redirect / enforced without redirect / mixed content / absent
  • Accessibility: axe-core critical violation count

Technical

  • Framework: Next.js / Nuxt / WordPress / Webflow / Custom HTML / Unknown
  • Hosting: Vercel / Netlify / AWS / traditional shared / Unknown (infer from response headers)
  • CDN usage: detected / not detected
  • Image optimization: WebP or AVIF served / JPEG/PNG only; lazy loading: present / absent

Save all benchmark data as structured JSON to .saccoai/competitive/benchmarks.json.

Phase 3: Report

Generate the output files based on the --depth flag.

Quick mode (--depth quick)

Save to .saccoai/competitive/comparison.md:

# Competitive Analysis — {client domain} vs {N} competitors

**Date**: {date}
**Depth**: quick

| Metric | {client} | {competitor 1} | {competitor 2} | {competitor 3} |
|--------|----------|----------------|----------------|----------------|
| Lighthouse Perf | {score} | {score} | {score} | {score} |
| Lighthouse A11y | {score} | {score} | {score} | {score} |
| Lighthouse Best Practices | {score} | {score} | {score} | {score} |
| Lighthouse SEO | {score} | {score} | {score} | {score} |
| LCP | {Xs} | {Xs} | {Xs} | {Xs} |
| CLS | {score} | {score} | {score} | {score} |
| INP | {Xms} | {Xms} | {Xms} | {Xms} |
| Page weight | {KB} | {KB} | {KB} | {KB} |
| Pages | {N} | {N} | {N} | {N} |
| Languages | {N} | {N} | {N} | {N} |
| Mobile | ✅/⚠️/❌ ||||
| Dark mode | ✅/❌ ||||
| Structured data | ✅/⚠️/❌ ||||
| Sitemap | ✅/❌ ||||
| Privacy policy | ✅/⚠️/❌ ||||
| Cookie consent | ✅/⚠️/❌ ||||
| Impressum | ✅/❌ ||||
| HTTPS | ✅/❌ ||||
| Framework | {name} | {name} | {name} | {name} |
| Hosting | {name} | {name} | {name} | {name} |

Legend: ✅ pass · ⚠️ partial · ❌ fail or absent

## Key Findings

- **Where {client} leads**: {2–3 metrics where client is clearly ahead}
- **Where {client} lags**: {2–3 metrics where client is clearly behind}
- **Biggest opportunity**: {the single most impactful area to improve, with a concrete action}

Full mode (--depth full)

Generate everything from quick mode (comparison.md), plus take screenshots and produce .saccoai/competitive/full-report.md.

Screenshots: For each site, use agent-browser to capture:

  • Homepage desktop (1440px wide)
  • Homepage mobile (390px wide)
  • 1–2 additional pages that showcase design quality (services, about, or product page)

Save screenshots to .saccoai/competitive/screenshots/{domain}/.

Full report structure for .saccoai/competitive/full-report.md:

# Full Competitive Report — {client domain}

**Date**: {date}

## Executive Summary

{1 paragraph: the client's current competitive position, the 2–3 biggest gaps vs the competition, and the single top recommendation}

## Per-Competitor Breakdown

### {Competitor 1}: {company name}
- **URL**: {url}
- **Strengths**: {what they do better than the client — be specific: "Performance score 94 vs client's 68", "Full Swiss compliance including Impressum and cookie consent", "Distinctive editorial typography (Freight Display + Karla)"}
- **Weaknesses**: {where they fall short — "No multilingual support despite Swiss market", "No structured data — missing local SEO"}
- **Design assessment**: {font choices, color palette character, layout quality, animation quality — 2–4 sentences}
- **Screenshots**: [desktop]({path}) · [mobile]({path})

(repeat for each competitor)

## Design Comparison

Side-by-side design token comparison:

| Aspect | {client} | {comp 1} | {comp 2} | {comp 3} |
|--------|----------|----------|----------|----------|
| Display font | {name} | {name} | {name} | {name} |
| Body font | {name} | {name} | {name} | {name} |
| Primary color | {hex} | {hex} | {hex} | {hex} |
| Aesthetic character | {1 word} | {1 word} | {1 word} | {1 word} |
| Animation richness | none/minimal/rich ||||

**Most distinctive design**: {competitor or client} — {1 sentence why}

## Recommendations

Ordered by impact:

1. **{Category}: {Specific action}** — {Why: what competitive disadvantage this closes and what improvement to expect}
2. **{Category}: {Specific action}** — {Why}
3. **{Category}: {Specific action}** — {Why}

## Opportunity Score

**{N}/10** — {1–2 sentence explanation of the score: how much room exists to improve vs competitors, and what the primary lever is}

Composition

saccoai-website-analysis (parallel, N+1 times) ──→ saccoai-competitive-analysis
                                                          ├── reads:   .saccoai/competitive/raw/{domain}/ (crawl output)
                                                          ├── writes:  .saccoai/competitive/comparison.md (always)
                                                          ├── writes:  .saccoai/competitive/benchmarks.json (always)
                                                          ├── writes:  .saccoai/competitive/full-report.md (full mode only)
                                                          └── writes:  .saccoai/competitive/screenshots/ (full mode only)

saccoai-competitive-analysis ──→ saccoai-proposal
                                    (reads .saccoai/competitive/comparison.md for the competitive context section)

Standalone Usage

Invoke this skill when:

  • Preparing a new client proposal and needing competitive context ("how does our site compare to competitors?")
  • A client asks "what are our competitors doing better?"
  • Benchmarking a rebuilt site against the market after launch
  • The user mentions "competitive analysis", "compare to competitors", "how do we stack up", or "benchmark"

When invoked standalone, ask for:

  1. The client's URL
  2. Competitor URLs (or an industry keyword for auto-discovery)
  3. Depth preference (default: quick)

Then run all three phases and present the output.

Edge Cases

  • Competitor site blocked or timed out: Note the failure in the comparison table ("crawl failed") and proceed with remaining data. Do not abort the entire analysis.
  • Fewer than 3 competitors provided: Proceed with what was given. The comparison table scales to however many sites are available.
  • Client site has no .saccoai/analysis/ from a prior run: That is fine — saccoai-website-analysis runs fresh in Phase 1. This skill does not require pre-existing analysis output.
  • All Lighthouse runs fail (e.g., site blocks headless browsers): Record "N/A" for all Lighthouse metrics and note the reason. The skill can still report on structure, compliance, and design signals.
  • Full mode on a site with many pages: Screenshots are limited to homepage (desktop + mobile) and 1–2 supporting pages per site. Do not attempt to screenshot every page.
  • Auto-discovery returns irrelevant results: Present the discovered URLs to the user for confirmation before crawling. Never proceed with auto-discovered URLs without user confirmation.
Related skills

More from saccoai/agent-skills

Installs
1
First Seen
Mar 27, 2026