web-analytics

'Push-based web analytics intelligence for your entire site portfolio.

10 Tools
web-analytics Plugin
analytics Category

Allowed Tools

ReadGlobGrepBash(date:*)Bash(node:*)Bash(curl:*)Bash(python3:*)Bash(source:*)TaskAskUserQuestion

Provided by Plugin

web-analytics

Push-based web analytics intelligence — self-hosted Umami (primary) via MCP + GA4 (fallback). 9 specialist agents fetch data, detect anomalies, analyze funnels, verify claims, and deliver narrative reports across your entire site portfolio. Three tiers: 30-second pulse, 2-min brief, 5-min full deep-dive.

analytics v1.1.0
View Plugin

Installation

This skill is included in the web-analytics plugin:

/plugin install web-analytics@claude-code-plugins-plus

Click to copy

Instructions

Web Analytics Intelligence

Orchestrates a team of specialist agents to deliver business-grade analytics insights

across your entire site portfolio. Not a dashboard replacement — a push-based analytics

team that surfaces what matters.

Overview

This skill routes analytics requests to the right combination of specialist agents based

on the requested tier, compiles their outputs into a cohesive narrative, and delivers

via console, email, or Slack.

Architecture: Orchestrator (this skill) → Data Collector → Specialist Agents (parallel) → Reporter

Prerequisites

  • Umami credentials in ~/.env (UMAMI_PASSWORD for the admin user)
  • Sites configured in ${CLAUDESKILLDIR}/references/site-registry.md
  • For email delivery: /email skill working
  • For Slack delivery: /slack skill working

Data Access

The skill uses direct Umami REST API calls (more reliable than MCP):


# Get auth token
TOKEN=$(curl -s "https://analytics.intentsolutions.io/api/auth/login" \
  -X POST -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"'"$UMAMI_PASSWORD"'"}' | \
  python3 -c "import sys,json; print(json.load(sys.stdin).get('token',''))")

# Get stats (uses epoch ms, compare=prev for prior period)
curl -s "https://analytics.intentsolutions.io/api/websites/{SITE_ID}/stats?startAt={START_MS}&endAt={END_MS}&compare=prev" \
  -H "Authorization: Bearer $TOKEN"

# Get active visitors
curl -s "https://analytics.intentsolutions.io/api/websites/{SITE_ID}/active" \
  -H "Authorization: Bearer $TOKEN"

# Get daily pageviews
curl -s "https://analytics.intentsolutions.io/api/websites/{SITE_ID}/pageviews?startAt={START_MS}&endAt={END_MS}&unit=day&timezone=America%2FNew_York" \
  -H "Authorization: Bearer $TOKEN"

Instructions

Step 1: Parse Request

Extract from $ARGUMENTS or conversation context:

Parameter Default Options
Tier mini mini, medium, full
Site all Site name from registry, or all
Period 7d today, yesterday, 7d, 30d, mtd, qtd
Delivery console --email, --slack, --all
Compare auto Previous equivalent period

Examples:

  • /analytics → mini tier, all sites, 7d, console
  • /analytics medium --site=tonsofskills → medium tier, one site, 7d, console
  • /analytics full --period=30d --email → full tier, all sites, 30d, email delivery
  • how's my traffic today? → mini tier, all sites, today, console

Step 2: Load Configuration

Read these reference files for context:

  1. ${CLAUDESKILLDIR}/references/site-registry.md — site config, baselines, thresholds
  2. ${CLAUDESKILLDIR}/references/mcp-tool-reference.md — MCP tool signatures
  3. ${CLAUDESKILLDIR}/references/reporting-tiers.md — output format specs (medium/full tiers)
  4. ${CLAUDESKILLDIR}/references/interpretation-guide.md — advisory voice standards

Step 3: Route by Tier

Mini Tier (inline — no subagents)

For mini tier, handle data collection inline to minimize latency:

  1. Source ~/.env to get UMAMI_PASSWORD, then get auth token via curl
  2. Calculate time range as epoch milliseconds (use date -d "2026-04-30" +%s then append 000)
  3. For each site (or specified site):
  • Call /api/websites/{ID}/stats?startAt=...&endAt=...&compare=prev for aggregate metrics
  • Call /api/websites/{ID}/active for real-time visitor count
  1. Compute deltas using the comparison block returned by get_stats
  2. Format as mini pulse:

## Analytics Pulse — {date}

**Portfolio:** {total_visitors} visitors across {n} sites ({+/-n%} vs prior {period})

| Site | Visitors | Pageviews | Bounce | Trend |
|------|----------|-----------|--------|-------|
| {site} | {n} | {n} | {n%} | {↑↓→ n%} |

**Top Signal:** {most notable change across all sites}
**Active Now:** {n} visitors

Keep it under 15 lines. No analysis, just the numbers and one signal.

Medium Tier (4 agents)

Launch these agents using the Agent tool with subagent_type:

Phase A — Data Collection:

  1. Spawn data-collector agent with instructions:
  • Sites: {sites from request}
  • Period: {calculated time range}
  • Data needed: stats, referrers, top pages, time series
  • Provide the full content of ${CLAUDESKILLDIR}/references/mcp-tool-reference.md
  • Provide the full content of ${CLAUDESKILLDIR}/references/site-registry.md

Phase B — Parallel Analysis (after data returns):

  1. Spawn traffic-intelligence agent with data-collector output
  2. Spawn content-seo agent with data-collector output (if available)
  3. Spawn anomaly-detector agent with data-collector output (if available)

Phase C — Compilation:

  1. Spawn reporting-narrative agent with all specialist outputs
  • Tier: medium
  • Delivery format: {console/email/slack}

Full Tier (all agents)

Phase A — Data Collection:

  1. Spawn data-collector agent — request ALL data types including events, tech, geo

Phase B — Parallel Analysis:

  1. Spawn ALL specialist agents in parallel:
  • traffic-intelligence — channel/source analysis
  • content-seo — page performance
  • anomaly-detector — spike/drop detection
  • conversion-funnel — event/goal analysis
  • audience-segmentation — cohort/geo analysis

Phase C — Verification:

  1. Spawn verification-agent with all specialist outputs — adversarial quality check

Phase D — Compilation:

  1. Spawn reporting-narrative agent with all outputs + verification notes
  • Tier: full
  • Delivery format: {console/email/slack}

Step 4: Deliver

Console (default): Display the narrative report directly.

Email (--email): Invoke the /email skill with:

  • To: jeremy@intentsolutions.io
  • Subject: "Analytics {Tier} — {date} — {headline}"
  • Body: Report content (formatted for email)

Slack (--slack): Invoke the /slack skill with:

  • Channel: #operation-hired
  • Message: Report content (formatted for Slack, respect 3000-char limit)

All (--all): Console + email + Slack.

Step 5: Memory Update (Full Tier Only)

For full-tier reports, spawn the memory-agent to:

  • Record this period's baselines for future comparison
  • Note any new referral sources or traffic patterns
  • Update seasonal adjustment data if applicable

Agent Roster

Agent File Tier Purpose
data-collector ${CLAUDESKILLDIR}/agents/data-collector.md All MCP data fetching
traffic-intelligence ${CLAUDESKILLDIR}/agents/traffic-intelligence.md Medium+ Source attribution
content-seo ${CLAUDESKILLDIR}/agents/content-seo.md Medium+ Page performance
anomaly-detector ${CLAUDESKILLDIR}/agents/anomaly-detector.md Medium+ Spike/drop detection
conversion-funnel ${CLAUDESKILLDIR}/agents/conversion-funnel.md Full Event/goal analysis
audience-segmentation ${CLAUDESKILLDIR}/agents/audience-segmentation.md Full Cohort analysis
verification-agent ${CLAUDESKILLDIR}/agents/verification-agent.md Full Output quality check
reporting-narrative ${CLAUDESKILLDIR}/agents/reporting-narrative.md Medium+ Narrative compilation
memory-agent ${CLAUDESKILLDIR}/agents/memory-agent.md Full Rolling context

Troubleshooting

Issue Resolution
"Umami MCP not connected" Run /mcp to check server status. Ensure umami-analytics is in settings.json
Empty data for a site Verify site ID in site-registry.md matches Umami. Run mcpumamiget_websites to list. If all sites show zero, the tracker