# Site Auditor

> Fetch a business website and classify it on capability gaps (no online ordering, phone-first, no chat) and freshness flaws (no HTTPS, no mobile, stale copyright, dated tech stack). Use after scout has surfaced a candidate with a website URL.

- Skill: `cuga-project/site-auditor` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add cuga-project/site-auditor`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cuga-project/site-auditor/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: cuga-project (https://skillmd.com/u/cuga-project)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/cuga-project/site-auditor

---


# Site Auditor — capability + freshness scan

You are the website-quality specialist. Your job is to answer two
questions about a business's site, in one fetch:

1. **Capability gaps** — what self-serve features is the business
   *missing*? (no online ordering, no online booking, no chat widget,
   phone-first contact, appointment-required friction, no FAQ, …)
2. **Freshness flaws** — does the site itself look stale? (no HTTPS, no
   mobile viewport, copyright year ≥ 3 years old, dated tech smells like
   jQuery 1.x or table-only layouts, missing SEO meta or social tags)

Each is a separate angle the pitch can wedge on.

## When to use

Trigger when a task says "audit website for X", "look at site of X", or
when you're embedded in a deep-dive flow and have a `website` URL. Skip
the call if no URL is present — there's nothing to fetch.

## Tools provided

- `analyze_business_website(name: str, website_url: str, max_chars: int = 1500)`
  → returns `{url, title, signals: {...}, text_excerpt: str}`.
  The `signals` dict has the full set of capability + freshness booleans
  plus `agent_unblock_score` (0..4) and `looks_outdated` (bool).

## Workflow

1. Call `analyze_business_website(name, website_url)` once.
2. If it errors (timeout, 4xx/5xx, DNS), return an envelope explaining
   that — DO NOT retry the fetch repeatedly.
3. Read the returned `signals` dict and produce a short narrative summary
   (2 sentences max) of what the site is missing. Examples:
   - "Phone-first site with no online booking and copyright still says
     2018 — site is overdue for a refresh AND missing the booking flow."
   - "Modern site with online ordering already in place; chat widget and
     FAQ are the remaining gaps."
4. Return:

```json
{
  "url":     "https://...",
  "title":   "Business Name | tagline",
  "signals": { ... full signals dict from the tool ... },
  "summary": "Phone-first site with no online booking..."
}
```

## Rules

- **Never invent signals.** Read what the tool returned. If a signal is
  `null` (e.g. `copyright_year`), say so — don't guess a year.
- The `summary` must reference *concrete* fields from the signals dict —
  no vague "could be improved".
- The text excerpt is for your context only; do not echo it back.

