Analytics Measurement Audit

Checks in production, with real interactions, that your analytics record what you think they record.

Free plan: up to 10 private skills and 3 members, no credit card.

What this skill does

Verify a site's analytics actually measure what everyone assumes they do — end-to-end, in production, with real interactions.

  • analytics
  • ga4
  • tracking
  • conversion
  • debugging
  • instrumentation

SKILL.md

An analytics setup can look complete in code and deliver zero events for months. Before trusting any number — or shipping any experiment that depends on one — prove the pipeline end-to-end. Every conclusion drawn from an unverified pipeline is potentially meaningless and must be re-examined once measurement is fixed.

Verify end-to-end, in production

Analytics scripts are client-injected: curl proves nothing. Drive a real browser at the production site:

  1. Confirm the tag loads (network request for the gtag/analytics script, correct measurement ID).
  2. Perform a real tracked interaction (click a CTA, switch a pricing tab).
  3. Confirm the event appears in dataLayer AND as an outgoing collect/beacon network request with the right event name and parameters.
  4. Confirm it lands in the backend (GA4 Realtime or DebugView).

A pipeline is verified only when all four hold. Repeat after every fix.

Where dead tracking hides

Hunt these in order — each one fails silently:

  • Shadowed modules. Two files with the same basename and different extensions (analytics.js beside analytics.ts): the resolver may pick the stale one for every importer. Build warnings about duplicate/ambiguous modules are the tell — chase them to zero.
  • Env-var gates. Guards like if (ID !== 'G-XXXXXXXXXX') reading a variable that is set nowhere silently discard every event. Grep each guard's variable against what's actually configured in each deploy environment.
  • Duplicate helpers. Multiple trackEvent implementations accumulated over time — some wired to the live tag, some not. Consolidate to one typed module and delete the rest.
  • Never-shipped components. Tracking code in components no page imports.

Instrumentation architecture

  • Instrument the listener, not the dispatch sites. If many CTAs dispatch a shared custom event that one listener handles, put the tracking call in the listener — one line covers every current and future dispatch site, instead of N copies that drift.
  • Standard parameters on every event: page path plus a placement identifying which CTA/surface fired it.
  • Distinct event names per funnel stage (open vs. submit), so drop-off is measurable.
  • Demand-test or experimental CTAs get their own event name so their signal is separable.

The admin layer (code can't fix this)

GA4 conversions ("key events") are an admin setting, not code. After events verifiably flow:

  • Star the events that represent real conversions (allow ~24h of data before they're selectable).
  • Un-star stale key events showing "No stream data" — leftovers from retired features make conversion reports lie.
  • Confirm the property's data stream points at the measurement ID the site actually loads.

Deliverable

Report: what was dead and why, what was fixed (with commits), the production verification evidence for each event, remaining admin steps only the account owner can do, and which historical conclusions are invalidated by the outage window.

Worked example

Input: a marketing site with ~70 trackEvent calls across its components — and a GA4 property that had never received a single custom event.

Root cause: a stale analytics.js sitting beside analytics.ts. The module resolver served the old .js file to every importer, and its guard read a measurement-ID env var that was set in no environment — so every event was silently discarded before reaching gtag. The build had been printing 17 warnings about duplicate modules; nobody had chased them.

Fix and proof: deleted the shadow file and its one dependent dead component (build warnings 17 → 0); moved demo-CTA tracking into the single shared event listener instead of its 13 dispatch sites; then drove a real browser at production — clicking a pricing tab produced pricing_tab and the demo CTA produced demo_request_open, both visible in dataLayer and as outgoing collect beacons, then in GA4 Realtime.

Report flagged: every GA4-based conclusion from the outage window as invalid, and listed the remaining admin-only steps — starring the three real conversion events and un-starring five stale key events showing "No stream data."

A skill is a written procedure, not a prompt. Add it to your library and it is yours to edit in plain language.

In your Agentman library

A skill you keep, not a prompt you paste

  • Versioned, not pasted

    Edit a skill once and every agent using it follows the new version.

  • Shared with your team

    One library with per-skill access control and a record of who did what.

  • One connection

    A single MCP link works across Claude, ChatGPT, Cursor and Agentman agents.

How Agent Skills work
Questions

Using a skill

What is a skill?

A skill is a written procedure an AI assistant reads before it does a task: the steps, the judgement calls, the standards and what "done" looks like. It lives in a SKILL.md file, sometimes with reference files beside it. A prompt is typed again each time; a skill is versioned and runs the same way for everyone who uses it.

How do I use this skill in Claude, ChatGPT or Agentman?

Create a free Agentman account and add the skill to your library. One MCP connection then makes your library available in Claude, ChatGPT, Cursor and Agentman agents, so you set it up once. To see it work before you sign up, use "Try it in Claude" on this page, which opens a chat that reads the public SKILL.md.

Can I edit the skill after I add it?

Yes. Cloning a skill puts a copy in your workspace that is yours to edit in plain language. Skills are versioned: edit one once and every agent using it follows the new version. The free plan covers up to 10 private skills and 3 members, no credit card.

Make it yours

Add Analytics Measurement Audit to your library, edit it to match how your team works, and use it from Claude, ChatGPT or an Agentman agent. The free plan covers up to 10 private skills and 3 members, no credit card.

Or try it in ChatGPT first.

Use this skill free