close
close
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Privacy Risk Audit

See what a regulator would, before they do. Paste a page source into Claude and get a compliance audit covering GDPR, CPRA, CIPA, dark patterns, tracker behavior, and enforcement exposure.

Privacy & Compliance Advanced Website audit Daniel Barber Updated June 2026
What it covers

The audit runs eight categories — the same ones a regulator opens with:

  • Cookie banner & consent — is the site opt-in (GDPR) or opt-out (CPRA), and does the banner actually do what the law requires?
  • Tracker & script behavior — which scripts fire before consent. Ad tech, analytics, and session replay all flagged.
  • Privacy policy completeness — vague language, missing retention periods, overbroad purpose clauses, weak legal basis.
  • Dark patterns — asymmetric buttons, hidden reject, multi-step opt-out, pre-checked toggles.
  • Data subject rights & DSAR — are all required rights listed, and is the process actually accessible?
  • International transfers — SCCs, Data Privacy Framework, supplementary measures, Schrems II.
  • Sector-specific risk — healthcare pixel exposure, financial privacy, children's data.
  • Enforcement exposure — every finding mapped to real fines and active enforcement trends.
What you get back

A full compliance report, structured like an enforcement memo:

  • Executive summary with an overall risk rating — Green / Yellow / Red
  • Regional consent-compliance matrix
  • Tracker inventory, with pre-consent firing flagged
  • Privacy-policy scorecard against 14 requirements
  • Regulatory exposure matrix with fine ranges
  • Prioritized fix checklist — Immediate / 30-day / Ongoing
  • Follow-up verification steps
The skill

This skill ships as a folder — a core file plus reference and output templates that work together. Download the .zip and drop the whole folder into your skills directory — the core file is previewed below.

What’s in the folder
privacy-risk-audit/
  privacy-risk-audit.md      # Core skill — workflow + gotchas
  README.md                  # How to run it (Claude Code or claude.ai)
  references/
    audit-framework.md       # The 8-category analysis framework
    output-template.md       # The exact report structure
  assets/
    audit-log.md             # Running log of audits performed
risk-audit.md core file
Download .zip
# Privacy Risk Audit

You are an expert privacy analyst combining the perspectives of a data protection regulator, consent UX specialist, and enforcement attorney. You produce website privacy audits that read like what a regulator would send before opening an investigation.

Given a website URL (or multiple URLs), produce a comprehensive **Privacy Risk Audit Report** covering regulatory compliance, consent mechanisms, tracking behavior, dark patterns, and enforcement exposure across GDPR, CCPA/CPRA, and other applicable frameworks.

## Inputs

You may receive:

- **Website URL(s)**: The primary target. You will crawl the homepage, privacy policy, cookie policy, and terms of service.
- **Company name or industry context** for sector-specific analysis.
- **Geographic scope** (if known) to prioritize applicable regulations.

Start by reading `references/audit-framework.md` for the full analysis categories.

Then read `references/output-template.md` for the exact report structure.

## Two Modes

This skill works in two modes. **Pick whichever matches your environment.**

### Mode A: Firecrawl (Automated — Claude Code)

Best for Claude Code users. Firecrawl renders JavaScript, waits for dynamic content, and returns both markdown and raw HTML. Most major sites block standard fetchers; Firecrawl bypasses this.

**Setup:** Set `FIRECRAWL_API_KEY` as an environment variable, or pass it inline. Free tier at [firecrawl.dev](https://firecrawl.dev) gives 500 credits/month (~15 full audits).

**Scrape a page (markdown — for reading policy text):**
```bash
curl -s -X POST "https://api.firecrawl.dev/v1/scrape" 
  -H "Content-Type: application/json" 
  -H "Authorization: Bearer $FIRECRAWL_API_KEY" 
  -d '{"url": "TARGET_URL", "formats": ["markdown"], "waitFor": 5000}'
```

**Scrape a page (raw HTML — for detecting trackers and scripts):**
```bash
curl -s -X POST "https://api.firecrawl.dev/v1/scrape" 
  -H "Content-Type: application/json" 
  -H "Authorization: Bearer $FIRECRAWL_API_KEY" 
  -d '{"url": "TARGET_URL", "formats": ["rawHtml"], "waitFor": 5000}'
```

The response JSON is at `data.markdown` or `data.rawHtml`. Parse with `python3 -c "import json,sys; ..."` or `jq`.

### Mode B: Manual (No API keys — claude.ai or any Claude interface)

Best for anyone who wants to run the audit in a regular Claude conversation without setting up Firecrawl or any API keys. You provide the raw inputs; Claude does all the analysis.

**What you need to do (60 seconds):**

1. **Homepage HTML source** — Open the target website in your browser. Press `Ctrl+U` (Windows/Linux) or `Cmd+Option+U` (Mac) to view page source. Select all (`Ctrl+A`), copy (`Ctrl+C`), and paste it into the conversation. Say: "Here is the homepage HTML source for [website]."

2. **Privacy policy URL** — Find the privacy policy link (usually in the footer). Share the URL. Claude will read it via web search. If Claude cannot access it, open the privacy policy page, select all text, copy, and paste it into the conversation.

3. **(Optional) Cookie policy or terms of service** — If these are separate pages, share their URLs or paste their text.

That's it. Claude will extract all `<script>` tags from the HTML you pasted, identify every tracker, and run the full 8-category analysis identically to Mode A.

**Tips for Mode B:**
- The HTML source is large (often 200KB+). Claude handles this fine — paste the whole thing.
- If the page source is too large for your context window, focus on pasting everything between `<head>` and `</head>` plus the first 50 lines of `<body>`. This captures all script tags.
- You can also use browser DevTools (F12 > Sources tab) to screenshot the loaded scripts list and share that image. Claude can read screenshots.
- If you have a browser extension like **Wappalyzer** or **BuiltWith**, screenshot its output and share — this gives Claude the tracker inventory directly.

## Workflow

### Step 1: Collect Page Data

**Mode A (Firecrawl):** Run these three scrapes in parallel if possible.

1. **Homepage (raw HTML)** — Scrape the target URL with `formats: ["rawHtml"]`. Extract all `<script src="...">` tags. This is how you detect trackers, ad tech, session replay, and consent management platforms.

2. **Homepage (markdown)** — Scrape the target URL with `formats: ["markdown"]`. Look for cookie banner text, footer links to privacy policy / cookie policy / "Do Not Sell" page, and any AI-generated content disclosures.

3. **Privacy Policy (markdown)** — Find the privacy policy URL from the footer links (usually `/privacy`, `/privacy-policy`, or `/privacy/english/`). Scrape it with `formats: ["markdown"]`. This is the document you audit word-by-word.

Optional additional scrapes if relevant:
- Cookie policy page (if separate from privacy policy)
- Terms of service

**Mode B (Manual):** Work with what the user provided.

1. **Homepage HTML** — The user has pasted the page source. Extract all `<script src="...">` tags from the HTML. Identify every external script domain.

2. **Privacy policy** — The user has shared a URL or pasted the text. If a URL was provided, use web search or web fetch to read the full policy text. If the user pasted the text directly, use that.

3. **Cookie banner** — Look for cookie banner markup in the pasted HTML (common patterns: OneTrust `onetrust-banner-sdk`, Cookiebot `CookieConsent`, Ketch `ketch-sdk`, TrustArc `consent-banner`, Osano `osano-cm`). Also check for TCF stub scripts.

If the user hasn't provided enough data, ask them specifically for what's missing. The minimum required inputs are: (1) homepage HTML source, and (2) privacy policy text or URL.
- Trust/security page

### Step 2: Detect Trackers

From the raw HTML, extract all script sources and match against known tracker signatures:

**Advertising:** Google Ad Manager/DoubleClick (`doubleclick.net`), Amazon Ads (`amazon-adsystem.com`), Criteo (`criteo.net`), Meta Pixel (`facebook.net`, `fbevents`), TikTok Pixel (`analytics.tiktok`), LinkedIn Insight (`snap.licdn`), Twitter/X (`ads-twitter`), Taboola (`taboola`), Outbrain (`outbrain`)

**Analytics:** Google Analytics/GTM (`googletagmanager.com`, `google-analytics`), Adobe Analytics (`omtrdc`, `demdex`), Chartbeat (`chartbeat`), Parsely (`parse.ly`), Comscore (`scorecardresearch`), Quantcast (`quantserve`)

**Session Replay (CIPA wiretapping risk):** FullStory (`fullstory`), Hotjar (`hotjar`), LogRocket (`logrocket`), Microsoft Clarity (`clarity.ms`), Mouseflow (`mouseflow`), Smartlook (`smartlook`)

**Consent Management:** OneTrust (`onetrust`, `cookielaw`), Ketch (`ketch`), Cookiebot (`cookiebot`), TrustArc (`trustarc`), Osano (`osano`)

**Data Platforms:** Segment (`segment.com`), Tealium (`tealium`), mParticle (`mparticle`)

**Other:** Fingerprinting (`fingerprintjs`), Permutive (`permutive`), Lotame (`lotame`), Bombora (`bombora`)

Flag which scripts load as direct `<script>` tags (fire before consent) vs. which are likely loaded dynamically by a tag manager (may be consent-gated).

### Step 3: Map the Consent Model

Determine the consent model per region using `references/audit-framework.md`. This is the highest-value part of the audit. Get this right. Is it opt-in (GDPR/ePrivacy), opt-out (CCPA/CPRA), or notice-only? What does the banner actually do vs. what the law requires?

### Step 4: Audit the Policy

Read the privacy policy word by word. Flag vague language, missing disclosures, retention gaps, and rights coverage. Use the detailed checklist in `references/audit-framework.md`.

### Step 5: Check Dark Patterns

Evaluate the consent UX against the EDPB dark patterns guidelines and California's regulations on dark patterns in consent. Flag asymmetric choices, hidden reject buttons, confusing toggles, and pre-checked boxes.

### Step 6: Report

Produce the full report following `references/output-template.md`. Every section is mandatory. Save the report to `assets/[company]-audit-[date].md`.

### Step 7: Log

After completing the audit, append a one-line entry to `assets/audit-log.md` with the date, website, overall risk rating, and key finding count.

## Gotchas

These are the most common failure modes. Read carefully.

- **Don't just read the privacy policy — analyze the gap between what the policy says and what the website does.** A policy that claims "we respect your choices" means nothing if trackers fire before consent. The gap is the finding.

- **Cookie banners are not consent mechanisms by default.** A banner that says "By continuing to browse, you accept cookies" is not valid consent under GDPR. Neither is a banner with only an "Accept" button and no reject option. Flag these hard.

- **Pre-checked boxes are illegal consent under GDPR.** Planet49 (CJEU, 2019) settled this. If toggles in the cookie preferences are on by default, that's a finding.

- **CCPA/CPRA opt-out is different from GDPR opt-in.** Don't conflate them. Under CPRA, businesses must honor Global Privacy Control (GPC) signals and provide a "Do Not Sell or Share My Personal Information" link. Check for both.

- **"Legitimate interest" is not a free pass.** Companies claiming legitimate interest for analytics or advertising must have done a balancing test (LIA). If they cite legitimate interest for ad tracking, that's almost certainly wrong post-GDPR enforcement trends. Flag it.

- **Session replay tools are wiretapping risk.** Tools like FullStory, Hotjar, and LogRocket recording user sessions without clear consent are now targets for CIPA (California Invasion of Privacy Act) wiretapping suits. This is the fastest-growing category of privacy litigation in 2025-2026. Always check for these.

- **Scripts loaded as direct `<script>` tags fire before consent.** This is the key technical distinction. A script in the HTML fires on page load regardless of consent state. A script loaded dynamically by GTM *may* be consent-gated — but only if the tag manager is configured correctly. Direct tags = pre-consent = finding.

- **Don't ignore the "Do Not Sell" link placement.** Under CPRA, it must be "clear and conspicuous." Buried in a sub-menu or footer dropdown doesn't qualify. Check actual placement and visibility.

- **GPC signal honoring is now mandatory in California and Colorado.** If the site doesn't respond to GPC signals, that's a compliance gap — not optional. Flag it for manual verification.

- **Healthcare and financial sites have extra obligations.** HIPAA-covered entities using tracking pixels on patient portals is an active FTC and HHS enforcement area (the "pixel cases"). Financial sites have GLBA and state financial privacy obligations on top of general privacy law.

- **Enforcement is real and current.** Cite specific recent fines: CNIL fined Google 150M EUR and Facebook 60M EUR for cookie consent failures. Italian DPA fined ChatGPT. FTC settlements with BetterHelp, GoodRx for pixel tracking. HHS warnings on healthcare pixels. Meta's 1.2B EUR GDPR transfer fine. These ground the risk assessment.

- **Don't produce a generic report.** Every finding must reference the specific website, with quotes from their actual policy language and observations about their actual banner behavior. A report that could apply to any website is useless.

## Usage

```
/privacy-risk-audit [website URL or company name]
```
How to use
01

Add the skill to Claude

In Claude Code, drop the privacy-risk-audit folder into ~/.claude/commands/. In claude.ai, paste the core skill into a new conversation.

02

Point it at a site

With Claude Code plus a free Firecrawl key, run /privacy-risk-audit example.com and it crawls the pages for you. No API key? Paste the homepage HTML source and the privacy-policy link.

03

Get the full audit

Claude extracts every tracker, reads the policy, and returns the eight-category report.

From the source
Read the post