Docsbook
← Back to catalog
observabilitypro_plusrequires Docsbook MCP

docs-utm-analyzer

Maps UTM-tagged traffic against landing pages to find mismatches between marketing promise and documentation reality. Surfaces UTM campaigns where users land but bounce — the doc page doesn't answer what the ad/post promised. Produces an insight JSON report consumable by downstream actor agents. Requires PRO+ plan.

Install & use this skill

Pick your AI client — install this single skill and call it.

1. Install
npx skills add Docsbook-io/docs-skills --skill docs-utm-analyzer -a claude-code
2. Use
/docs-utm-analyzer

Invoke as a slash command in chat.

Or: runtime discovery via Docsbook MCP

Already connected to the Docsbook MCP server? Skip install — ask your agent to load this skill on demand.

@docsbook find_skill "docs-utm-analyzer"

docs-utm-analyzer — Match UTM campaigns to landing-page reality

Marketing posts promise X. Users arrive with ?utm_campaign=launch-hn expecting X. They land on quick-start.md which is about Y. They bounce in 8 seconds. This skill finds those mismatches with numbers.

When to run#

Workflow (4-stage pipeline)#

This skill is a thin orchestrator over four pinned subagents that already live in the docs-insights Claude Code plugin. If those subagents are not installed, instruct the user to /plugin install docs-insights@docs-claude-plugins first.

Stage 1 — Collect (Haiku)#

Invoke the analytics-collector subagent:

SLICE: utm
WORKSPACE: <resolved id or owner/repo>
PERIOD: <iso-from>..<iso-to>
OUTPUT: .docsbook/insights/.tmp/utm-dump-<iso>.json
LIMIT: 1000

Wait for WROTE: <path>.

Stage 2 — Cluster (Sonnet)#

Invoke analytics-clusterer:

DUMP: <path from stage 1>
OUTPUT: .docsbook/insights/.tmp/utm-clustered-<iso>.json
TOP_N: 15
MIN_CLUSTER_SIZE: 5

Wait for CLUSTERED: <path>.

Stage 3 — Report (Sonnet)#

Invoke analytics-reporter:

CLUSTERED: <path from stage 2>
SCHEMA: <plugin-root>/schemas/insight.schema.json
OUTDIR: .docsbook/insights/
SKILL: docs-utm-analyzer
SKILL_VERSION: 1.0.0

Wait for REPORT_JSON: and REPORT_MD:.

Stage 4 — Archive (Haiku)#

Invoke insights-archivist:

INSIGHTS_DIR: .docsbook/insights/
NEW_REPORT_JSON: <path from stage 3 REPORT_JSON>

Wait for INDEX: / DIFF: / ROTATED:.

Stage 5 — Tell the user#

Print:

✅ docs-utm-analyzer ran.
  Report:  .docsbook/insights/latest/docs-utm-analyzer.md (human)
  JSON:    .docsbook/insights/latest/docs-utm-analyzer.json (machine)
  Diff:    .docsbook/insights/latest/docs-utm-analyzer.diff.json (since last run)
  Findings: <critical_count> critical · <high_count> high · <medium_count> medium

Top finding: <summary.headline>

Next steps:
  • Read the Markdown report for context
  • Pass the JSON to the actor agent (forthcoming) or feed it to your own /apply pipeline
  • Re-run weekly during active campaigns

What this skill catches#

Pattern Example finding
UTM with high bounce utm_campaign=launch-hn → 800 pv on quick-start.md, 78% bounce. Headline of quick-start.md doesn't match the HN post's hook.
UTM with zero conversion utm_source=ph → 1.2k pv, 0 clicks on Upgrade. The PH copy promised pricing — link to pricing.md instead.
Missing landing page UTM landed on 404 or root. Suggest creating the campaign-specific landing doc.
Successful campaign signal High pv + low bounce + clicks on conversion CTAs. Marked as info — replicate the formula.

Guardrails#

Output for downstream consumption#

The JSON report at .docsbook/insights/latest/docs-utm-analyzer.json conforms to insight.schema.json.

Each finding's suggested_actions[] is pre-filled so a future actor agent can:

Acceptance criteria#

Arguments#

Argument Type Default Description
workspace string required Workspace id or owner/repo
period string 30d 7d / 14d / 30d / 90d
limit number 1000 Max raw rows the collector pulls
View source on GitHub →Browse full catalog repo →
Keywords
utmattributionlanding-pagebouncemarketingcampaignstraffic-source
MCP tools used
get_analyticsquery_eventsget_workspace