Systems Lab

Agent skill

gtm-container-auditor

This skill should be used when the user asks to \"audit my GTM container\", \"find duplicate tags\", \"clean up Tag Manager\", mentions \"GTM health check\", \"unused tags and triggers\", or \"consent compliance of tags\".

activeSelf-containedInstructions only1,927 words

Filed under Analytics and reporting.

From Ad-Superpowers/ad-superpowers-plugin · 120 skills · 5 · pushed 2026-09-10

What it does when it runs

This skill should be used when the user asks to \"audit my GTM container\", \"find duplicate tags\", \"clean up Tag Manager\", mentions \"GTM health check\", \"unused tags and triggers\", or \"consent compliance of tags\". Do NOT use for: server-side tracking or CAPI implementation (use first-party-data-strategy), attribution discrepancies between platforms (use attribution-reconciler), or general tag implementation guidance (use platform-specific skills).

Read from the skill and the 0 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
None found.
Hosts it reaches
No third-party host appears in the skill or its bundled files.
Tool permissions it declares
No allowed-tools in the frontmatter. It only issues instructions, so there is nothing to bound.
Actions present in the files
None. Instructions only.

Ask about gtm-container-auditor

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/Ad-Superpowers/ad-superpowers-plugin.git /tmp/ad-superpowers-plugin
git -C /tmp/ad-superpowers-plugin sparse-checkout set "plugin/skills/gtm-container-auditor"
mkdir -p ~/.claude/skills/gtm-container-auditor
cp -R "/tmp/ad-superpowers-plugin/plugin/skills/gtm-container-auditor/." ~/.claude/skills/gtm-container-auditor/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

Or take the whole library

This repo ships a .claude-plugin manifest, so Claude Code can install all 120 skills at once. Plugin skills are invoked as /<plugin>:<skill>, so they never collide with your own.

/plugin marketplace add Ad-Superpowers/ad-superpowers-plugin
/plugin

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Reproduced in full from Ad-Superpowers/ad-superpowers-plugin/blob/9b6385d2d2d228e4dac096a1d6bc5715c04fa736/plugin/skills/gtm-container-auditor/SKILL.md, which is licensed MIT (repository). 1,927 words, 31 headings.

GTM Container Auditor

Purpose

Help agencies and advertisers assess the health and quality of their Google Tag Manager containers. Poor GTM hygiene causes duplicate conversions, inflated metrics, slow page load (from excessive tags), and tracking gaps. A clean container typically improves data accuracy by 15-40%.

When to Use This Skill

Invoke when user mentions:

  • Health check: "Audit my GTM container" / "Review my tag setup"
  • Duplicate tracking: "My conversions look doubled" / "Are there duplicate tags?"
  • Performance: "GTM is slowing my site" / "How many tags do I have?"
  • Governance: "We have a messy GTM" / "Can you find unused tags?"
  • Migration: "We switched platforms" / "Cleanup after agency handover"
  • Compliance: "GDPR audit" / "Which tags fire before consent?"

Required Tools

ToolPurpose
gtm_list_containersList all containers across accounts
gtm_auditDeep audit of a specific container (tags, triggers, variables)

Part 1: Container Discovery

Step 1: List Available Containers

gtm_list_containers()

Present a summary table:

AccountContainer NamePublic IDTypeWorkspaces
[account][name]GTM-XXXXXweb[N]

If multiple containers exist, ask the user which to audit, or audit all if requested.


Part 2: Deep Container Audit

Step 2: Run Full Audit

gtm_audit(container_path="accounts/[ID]/containers/[ID]")

The audit returns: tags, triggers, variables, workspace summary, built-in variables.


Part 3: Health Scoring Framework

Score each area 0-100, then compute overall health:

Tag Health (30% of score)

IssueSeverityPoints Deducted
Tag with no triggerCritical-15 per tag
Duplicate tag nameHigh-10 per duplicate
Paused tag (> 90 days)Medium-5 per tag
Tag firing on All Pages without filterMedium-5 per tag
Deprecated tag typeHigh-10 per tag
More than 80 tags totalLow-5

Trigger Health (25% of score)

IssueSeverityPoints Deducted
Unused trigger (no tags)High-10 per trigger
All Pages trigger on conversion tagsCritical-20
Duplicate trigger namesMedium-5 per duplicate
Regex trigger without testingMedium-5 per trigger

Variable Health (20% of score)

IssueSeverityPoints Deducted
Undefined variable referenced in tagCritical-20 per var
Unused variable (defined but not used)Low-3 per variable
Data Layer variable with typosHigh-10 per var
More than 50 custom variablesLow-5

Workspace Health (15% of score)

IssueSeverityPoints Deducted
Unpublished changes > 30 days oldHigh-15
Multiple workspaces (> 3) activeMedium-10
No version history visibleMedium-10

Governance (10% of score)

IssueSeverityPoints Deducted
Tags without notes/descriptionsLow-3 per 10 tags
Inconsistent naming conventionMedium-10
No folder organizationLow-5

Health Score Bands

ScoreRatingAction
90-100ExcellentMonitor only
75-89GoodMinor cleanup recommended
60-74FairScheduled cleanup within 30 days
40-59PoorImmediate cleanup required
< 40CriticalFull audit and remediation urgently needed

Part 4: Common Issue Patterns

Duplicate Conversion Tracking

Detected when: Multiple tags firing the same conversion event (e.g., two Google Ads conversion tags for "purchase" or identical GA4 purchase events).

Impact: Doubles reported conversions, distorts ROAS, inflates Google Ads bidding.

Fix: Consolidate to one tag per conversion event. Use GA4 linked conversions instead of separate Google Ads conversion pixel where possible.

All-Pages Firing Tags

Detected when: A tag (especially conversion or remarketing tags) has "All Pages" as its only trigger.

Impact: Fires conversion on every page visit → massive false conversion count.

Fix: Replace with specific page/event trigger (e.g., Thank You Page URL trigger, form_submit event trigger).

Orphaned Tags

Detected when: Tags exist with no trigger assigned (paused indefinitely or accidentally created).

Impact: Clutter, confusion during future edits, potential accidental activation.

Fix: Delete confirmed-unused tags or add a descriptive note + archive label.

Data Layer Race Conditions

Detected when: Variables reference dataLayer keys (e.g., ecommerce.purchase.revenue) but no dataLayer push is confirmed in the trigger configuration.

Impact: Variables evaluate as undefined → broken conversions, empty event params.

Fix: Ensure dataLayer.push() fires BEFORE GTM fires the tag. Use "DOM Ready" or custom event triggers instead of page load triggers for dynamically loaded data.

Consent Violation Risk

Detected when: Marketing/analytics tags (Google Ads, Meta Pixel, LinkedIn Insight) fire without a consent check trigger or Consent Mode configuration.

Impact: GDPR non-compliance. Potential fines up to 4% of annual revenue.

Fix: Implement Consent Mode v2. Add "consent granted" trigger to all marketing tags. Ensure tags default to denied before consent.

Consent Mode v2 is mandatory for EEA advertisers since March 2024. Consent Mode v2 adds two new required parameters beyond the original v1:

  • ad_user_data: Controls whether user data can be sent to Google for advertising
  • ad_personalization: Controls whether ads can be personalized for the user

Both must be explicitly set. Without them, Google may restrict access to audience features and Smart Bidding in the EEA. Check that your CMP (Cookiebot, OneTrust, Usercentrics, etc.) is configured to pass all four parameters: ad_storage, analytics_storage, ad_user_data, ad_personalization.


Part 5: Tag Type Classification

Classify all tags found:

CategoryTag TypesRisk Level
AnalyticsGA4, UA, Adobe AnalyticsLow
AdvertisingGoogle Ads, Meta Pixel, LinkedIn Insight, TikTok PixelHigh (consent)
RemarketingDynamic remarketing tags, Custom audience pixelsHigh (consent)
ConversionGoogle Ads conversion, GA4 conversion eventsCritical (accuracy)
UtilityCustom HTML, Custom Image, Hotjar, ClarityMedium
DeprecatedUA/GA3 tags, old conversion linkersHigh (remove)

Flag any deprecated tag types immediately — Universal Analytics ended July 2024.


Part 6: Output Format

================================================================================
               GTM CONTAINER AUDIT REPORT
               Container: [GTM-XXXXX] — [Container Name]
               Account: [Account Name]
               Audit Date: [YYYY-MM-DD]
================================================================================

OVERALL HEALTH SCORE: [N]/100 — [Rating]

SUMMARY
───────────────────────────────────
Total Tags:       [N] ([N] active, [N] paused)
Total Triggers:   [N] ([N] unused)
Total Variables:  [N] custom + [N] built-in
Workspaces:       [N] ([N] with unpublished changes)
Container Type:   [web/ios/android/amp]

CATEGORY SCORES
───────────────────────────────────
Tag Health:        [N]/100
Trigger Health:    [N]/100
Variable Health:   [N]/100
Workspace Health:  [N]/100
Governance:        [N]/100

═══════════════════════════════════
CRITICAL ISSUES (Fix Immediately)
═══════════════════════════════════
[List issues with Severity: Critical]

Example:
⛔ 2 conversion tags fire on ALL PAGES — false conversions guaranteed
   Tags: "GA4 - Purchase", "Google Ads - Conversion"
   Fix: Replace trigger with "Thank You Page" URL contains /thank-you

⛔ Google Ads conversion tag has no trigger
   Tag: "Ads Conversion - Lead"
   Fix: Assign appropriate trigger or delete if unused

═══════════════════════════════════
HIGH PRIORITY (Fix Within 7 Days)
═══════════════════════════════════
[List high-severity issues]

⚠️ 4 orphaned triggers (no tags using them)
   Triggers: [list names]
   Fix: Delete unused triggers to reduce confusion

⚠️ Universal Analytics tag detected — GA3 deprecated since July 2024
   Tag: "UA - Pageview"
   Fix: Remove. Ensure GA4 replaces all UA functionality.

═══════════════════════════════════
MEDIUM PRIORITY (Fix Within 30 Days)
═══════════════════════════════════
[List medium-severity issues]

═══════════════════════════════════
TAG INVENTORY
═══════════════════════════════════
| Tag Name | Type | Trigger | Status | Issue |
|----------|------|---------|--------|-------|
| GA4 Config | GA4 | All Pages | Active | ✅ OK |
| Ads - Purchase | Google Ads | Thank You | Active | ✅ OK |
| Old UA Tag | UA | All Pages | Paused | ⚠️ Deprecated |

═══════════════════════════════════
CONSENT COMPLIANCE CHECK (Consent Mode v2)
═══════════════════════════════════
Marketing tags found: [N]
Tags with consent trigger: [N]
Tags WITHOUT consent check: [N] ← [Compliant / RISK]

Consent Mode v2 status:
  ad_storage configured:        [Yes / No / Unknown]
  analytics_storage configured: [Yes / No / Unknown]
  ad_user_data configured:      [Yes / No / Unknown]  ← v2 required
  ad_personalization configured:[Yes / No / Unknown]  ← v2 required

[List non-compliant tags if any]

Note: All four Consent Mode v2 parameters are mandatory for EEA advertisers
(required by Google since March 2024). Missing ad_user_data or ad_personalization
will restrict Smart Bidding and audience features in Google Ads.

═══════════════════════════════════
REMEDIATION ROADMAP
═══════════════════════════════════
Week 1 — Critical fixes:
1. [Specific action]
2. [Specific action]

Week 2 — High priority:
3. [Specific action]

Month 1 — Medium priority:
4. [Specific action]

ESTIMATED EFFORT: [X] hours
EXPECTED DATA ACCURACY IMPROVEMENT: [X]%

Part 6b: Server-Side Tagging Assessment

Server-side GTM (sGTM) is now mainstream and directly relevant to container audits. When auditing a web container, assess whether server-side tagging should be recommended.

Signs Server-Side Tagging Would Help

ObservationRecommendation
15+ tags on All PagesMove heavy tags (Meta Pixel, GA4) to server-side
Ad blockers impacting conversion dataServer-side bypasses most ad blockers
ITP/cookie restrictions on SafariServer-side extends cookie lifetime
CAPI or Enhanced Conversions not implementedsGTM is the easiest path to server-side
Page load > 3s with GTM contributingOffload tag execution server-side

sGTM vs Web GTM Responsibilities

FunctionWeb GTMServer GTM
Data layer pushYesNo
Event collection (GA4)Can be replacedPreferred
Ad pixels (Meta, TikTok, LinkedIn)High risk (consent/blocking)Better — consent-aware server call
Conversion tracking (Google Ads)FineAlso fine via Enhanced Conversions
Custom HTML tagsFull controlLimited (server-side only)

When a web container has many marketing tags AND no server container is in use, flag this in the audit with a recommendation to consider sGTM as a Phase 2 improvement.


Part 7: Industry Benchmarks

Healthy Container Metrics

MetricHealthy RangeWarningCritical
Total tags< 5050-100> 100
Unused triggers< 5%5-15%> 15%
Tags without notes< 20%20-50%> 50%
Paused tags< 10%10-25%> 25%
Active workspaces1-23-4> 4

GTM Performance Impact

Each additional tag on All Pages adds ~5-15ms to page load time:

  • 20 tags: ~100-300ms overhead
  • 50 tags: ~250-750ms overhead
  • 100 tags: ~500ms-1.5s overhead (significant SEO and UX impact)

Recommend: Audit tags that fire on All Pages. Can most fire on specific events instead?

Optional: Enrich with Live Data

If the user has connected their GTM account, run a live container audit instead of relying on manual review:

# Pull a full audit of the container — tags, triggers, variables, and issues
gtm_audit(container_path="accounts/YOUR_ACCOUNT_ID/containers/YOUR_CONTAINER_ID")

This returns tag counts, firing rules, variable usage, and flags common issues (missing notes, paused tags, All Pages over-triggers). Use the audit output to populate the framework above with real data rather than estimates.

Other skills for the same job

Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.

Need help setting it up?

This page tells you what gtm-container-auditor does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.