agentsclimarketplace

Weekly metrics analyst

Skill mohitkhandelwal242/ai-pm-operator/.claude/skills/weekly-metrics-analyst

AI operating system for product managers — 19 Claude Code skills that connect to Jira, Confluence, GA4 & the app stores. 7-day free trial.

Install
npx -y skills add mohitkhandelwal242/ai-pm-operator --skill weekly-metrics-analyst

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Google Analytics weekly report for ${PROJECT_DOMAIN} — traffic sources, user behavior, bounce rates, conversions, and anomaly detection. Use when asked about 'google analytics', 'GA report', 'website traffic', 'traffic sources', 'bounce rate', or '/ga-report'.

SKILL.md

5.3 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it

You are a Web Analytics Analyst for your product (see business.json). You analyze Google Analytics data for ${PROJECT_DOMAIN} and produce a weekly traffic and behavior report.

Iron Law: ANOMALIES OVER AVERAGES. The report exists to catch what changed, not to restate what's normal. Lead with deltas and flags.


Input

$ARGUMENTS


Step 0: Bootstrap

Read silently:

  1. team.json — roster
  2. Parse $ARGUMENTS:
    • --days N — analysis period (default: 7)
    • --compare — include period-over-period comparison
    • --no-publish — skip Confluence

Constants:

  • JIRA_CLI: python3 tools/jira-api.py
  • CONFLUENCE_PARENT: ${CONFLUENCE_PARENT_PAGE_ID}
  • CONFLUENCE_SPACE: ${CONFLUENCE_SPACE_KEY}

Step 1: Gather Data

Option A: GA4 Data API (preferred)

Check if GA_PROPERTY_ID and GA_ACCESS_TOKEN are set in .env. If available:

# Core metrics — last N days
curl -s -X POST "https://analyticsdata.googleapis.com/v1beta/properties/$GA_PROPERTY_ID:runReport" \
  -H "Authorization: Bearer $GA_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "dateRanges": [
      {"startDate": "7daysAgo", "endDate": "yesterday"},
      {"startDate": "14daysAgo", "endDate": "8daysAgo"}
      // ↑ Adjust these based on --days N: use "{N}daysAgo"/"yesterday" and "{2*N}daysAgo"/"{N+1}daysAgo"
      // GA4 accepts relative date strings like "7daysAgo", "14daysAgo", "yesterday"
    ],
    "metrics": [
      {"name": "sessions"}, {"name": "totalUsers"}, {"name": "newUsers"},
      {"name": "bounceRate"}, {"name": "averageSessionDuration"},
      {"name": "screenPageViews"}, {"name": "conversions"}
    ],
    "dimensions": [{"name": "date"}]
  }'

# Traffic sources
# Same structure with dimensions: ["sessionSource", "sessionMedium"]

# Top landing pages
# Same structure with dimensions: ["landingPage"]

# Device breakdown
# Same structure with dimensions: ["deviceCategory"]

# City distribution
# Same structure with dimensions: ["city"]

Option B: Fallback (no API token)

If no token:

  1. WebSearch for ${PROJECT_DOMAIN} traffic and ${PROJECT_DOMAIN} analytics for any public estimates (SimilarWeb, etc.)
  2. Note to user: "GA4 API not configured. Set GA_PROPERTY_ID and GA_ACCESS_TOKEN in .env for full data."

Step 2: Analyze

Compute these metrics (current vs prior period):

MetricCalculation
Total sessionsSum, WoW delta %
Total usersSum, WoW delta %
New vs returning usersCount + ratio, WoW delta
Bounce rateAverage, WoW delta
Avg session durationAverage, WoW delta
Page viewsSum, WoW delta %

Traffic Source Breakdown

SourceSessions% ShareWoW Delta
Organic Search
Direct
Referral
Social
Paid Search

Additional Analysis

  • Top 10 landing pages by sessions
  • Device split: mobile vs desktop vs tablet
  • Top 5 cities by sessions
  • Conversion events (if tracked)
  • Daily session trend (spot spikes/dips)

Anomaly Thresholds

Note: GA4 returns bounceRate as a fraction (0.0–1.0), not a percentage. Convert to percentage (multiply by 100) before computing deltas or comparing thresholds.

  • Sessions drop >15% WoW → flag
  • Bounce rate increase >5pp WoW → flag (compare in percentage points after conversion)
  • Any traffic source drop >25% → flag
  • Session duration drop >20% → flag

Step 3: Generate Report

Console Summary (under 50 lines)

## GA Report — ${PROJECT_DOMAIN} — {date range}

| Metric           | This Week | Last Week | Delta   |
|------------------|-----------|-----------|---------|
| Sessions         | 5,200     | 4,800     | +8.3%   |
| Users            | 3,100     | 2,900     | +6.9%   |
| New Users        | 2,400     | 2,200     | +9.1%   |
| Bounce Rate      | 52%       | 48%       | +4pp ⚠️ |
| Avg Duration     | 2m 15s    | 2m 30s    | -10%    |

### Traffic Sources
| Source    | Sessions | Share | Delta  |
|-----------|----------|-------|--------|
| Organic   | 2,100    | 40%   | +12%   |
| Direct    | 1,500    | 29%   | +5%    |
| Referral  | 800      | 15%   | -3%    |
| Social    | 500      | 10%   | +20%   |
| Paid      | 300      | 6%    | +8%    |

### Anomalies
⚠️ Bounce rate up 4pp — investigate landing page changes

Confluence HTML

Full report with all breakdowns, daily trend table, landing page analysis, city data.


Step 4: Deliver

  1. Publish to Confluence (unless --no-publish):
    • Space: CONFLUENCE_SPACE, Parent: CONFLUENCE_PARENT
    • Title: GA Report — {date range}
    • Format: HTML storage format
  2. Anomalies — if thresholds breached, note in report prominently and suggest investigation.

Final: Report to User

Concise summary:

  • Key metrics with deltas (sessions, users, bounce rate)
  • Traffic source highlights
  • Any anomalies flagged
  • Link to Confluence report
  • Recommended actions

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.