saccoai-competitive-analysis
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.mdexists, 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:
- Use agent-browser to search
"{keyword} top companies site:linkedin.com OR site:crunchbase.com"— extract company websites - Fallback: search
"{keyword} agency Switzerland"(or relevant geography) — collect homepage URLs - 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: darkmedia query ordata-themetoggle - 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:
- The client's URL
- Competitor URLs (or an industry keyword for auto-discovery)
- 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.
More from saccoai/agent-skills
website-analysis
Crawl any website in a single pass to produce both a complete structural map and full content extraction. Discovers all pages, routes, navigation, multilingual variants, and issues while simultaneously extracting all text, images, metadata, and assets. Use before any migration, redesign, or audit.
16nextjs-fullstack
Opinionated Next.js fullstack patterns — App Router, Tailwind CSS v4, shadcn/ui, Better Auth, Drizzle ORM, Server Actions, and Vercel deployment. Use when scaffolding a new project or enforcing consistent architecture across client projects.
13seo-migration
SEO preservation during website migrations — redirect mapping, canonical URLs, sitemap generation, structured data, meta tags, and Search Console verification. Use when rebuilding a site to ensure zero SEO loss from URL changes, content moves, or domain switches.
9project-handoff
Generate complete client handoff documentation — deployment guide, environment setup, CMS instructions, maintenance checklist, architecture overview, and operational runbook. Use when delivering a finished project to a client or their team.
8client-proposal
Generate a professional project proposal from a website audit. Analyzes the prospect's current site, identifies issues, and produces a structured proposal with scope, deliverables, tech recommendations, and phased timeline. Use as a sales tool or for scoping client engagements.
6web-audit
Comprehensive website quality audit — Lighthouse scores, accessibility (axe-core), cross-browser testing, performance budgets, and mobile responsiveness. Generates actionable reports with pass/fail per page. Use to audit any live website or as a QA gate before deployment.
6