Skip to content
Back to skills

Gtm Tracking Plan

ASecurity

Turn a measurement plan into a Google Tag Manager spec — tags, triggers, variables, and copy-paste dataLayer snippets for every event

  • 96 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added May 27, 2026
data-aigobashapi

Works with

  • cli
  • api
  • mcp

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add cognyai/claude-code-marketing-skills --skill gtm-tracking-plan --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Gtm Tracking Plan?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Gtm Tracking Plan
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/cognyai-gtm-tracking-plan/badge)](https://www.skillsdirectory.com/skills/cognyai-gtm-tracking-plan)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: gtm-tracking-plan
description: Turn a measurement plan into a Google Tag Manager spec — tags, triggers, variables, and copy-paste dataLayer snippets for every event
version: "1.0.0"
author: Cogny AI
platforms: []
user-invocable: true
argument-hint: "<site url>"
allowed-tools:
  - WebFetch
  - WebSearch
  - Bash
  - Read
  - Write
---

# GTM Tracking Plan

Give it a site URL and get back a complete Google Tag Manager build spec — every tag,
trigger, and variable to create, plus the exact `dataLayer.push()` snippets a
developer drops into the site. It's the implementation half of a measurement plan. No
account connection required.

Best run after `/ga4-measurement-plan` — pass the same URL and this skill builds the
GTM container to deliver that plan. Run alone, it derives a sensible plan first.

## Usage

`/gtm-tracking-plan example.com` — full GTM build spec for the site

## Steps

### 1. Establish the events to implement

If a GA4 measurement plan already exists in the conversation, use its event taxonomy.
Otherwise, `WebFetch` the site, infer the site type and funnel, and derive the event
list yourself (the same logic as `/ga4-measurement-plan`, in brief).

For each event you need: name, when it fires, its parameters, whether it's a key event.

### 2. Variables

List every variable to create, by type:

- **Data Layer Variables** — one per parameter pushed to the data layer
  (`ecommerce`, `value`, `currency`, `transaction_id`, `lead_source`, …)
- **Built-in variables to enable** — Click Element, Click URL, Click Text, Form ID,
  Page Path, Page URL, plus the relevant ones per trigger
- **Constant** — the GA4 Measurement ID (`G-XXXXXXX`)
- **Lookup / RegEx table** — only if routing or value mapping is genuinely needed
- **Consent state variables** — if Consent Mode is in scope

Present as a table: variable name, type, configuration, used by.

### 3. Triggers

One trigger per distinct firing condition. For each: name, type, and conditions.

- **Initialization / Consent Initialization** — for Consent Mode default state
- **Custom Event** triggers — one per dataLayer event (`event` equals `purchase`,
  `generate_lead`, …) — the recommended approach for anything pushed to the dataLayer
- **DOM-based** triggers (click, form submission, element visibility) only where the
  site cannot push a dataLayer event
- **History Change** — for SPA page views

Name them consistently: `CE - purchase`, `Click - CTA button`.

### 4. Tags

List every tag to create. For each: name, type, what fires it, and key fields.

- **GA4 Configuration tag** — exactly one, on Initialization / All Pages, with the
  Measurement ID. (Calling out "exactly one" prevents the classic double-count bug.)
- **GA4 Event tags** — one per event from Step 1, referencing the config tag, with
  parameters mapped from the Data Layer Variables
- **Google Ads Conversion tags** — for key events that feed Ads bidding, with
  conversion ID/label placeholders
- **Consent** — Consent Mode default + update tags if in scope

Use a clear convention: `GA4 - Event - purchase`, `Ads - Conversion - Lead`.

### 5. dataLayer snippets

This is the developer handoff. For every event that needs site code, give a
copy-paste `dataLayer.push()` snippet with realistic placeholders:

```html
<!-- Fire on the order confirmation page, after the dataLayer is initialized -->
<script>
  window.dataLayer = window.dataLayer || [];
  dataLayer.push({ ecommerce: null });   // clear the previous ecommerce object
  dataLayer.push({
    event: "purchase",
    ecommerce: {
      transaction_id: "{{ORDER_ID}}",
      value: {{ORDER_TOTAL}},
      currency: "{{CURRENCY}}",
      items: [
        { item_id: "{{SKU}}", item_name: "{{NAME}}", price: {{PRICE}}, quantity: {{QTY}} }
      ]
    }
  });
</script>
```

Include the snippet for each key event and the most important non-key events. Note
the firing location (which page / which DOM event) for each.

### 6. Implementation order & QA

Give the build sequence:
1. Enable built-in variables and create user-defined variables
2. Create triggers
3. Create the GA4 config tag, then event tags, then Ads conversion tags
4. Add the dataLayer snippets to the site
5. QA in **GTM Preview** + **GA4 DebugView** — verify each event fires once, with
   parameters populated, and not before consent
6. Publish a named version

Call out the common failure modes: dataLayer pushed *after* the GTM snippet, stale
`ecommerce` object not cleared, tags firing pre-consent, event-name typos.

### 7. Output

Deliver as one document:

```
GTM Tracking Plan — [site]

Container overview: X tags · X triggers · X variables

1. Variables table
2. Triggers table
3. Tags table
4. dataLayer snippets (per event, with firing location)
5. Build order
6. QA checklist
```

## Critical rules

1. **Exactly one GA4 configuration tag.** State it explicitly — duplicate config tags
   are the most common GTM bug.
2. **Prefer Custom Event triggers over DOM triggers.** A dataLayer push is reliable;
   scraping the DOM is brittle. Use DOM triggers only when the site can't push.
3. **Every dataLayer snippet must be copy-paste ready** with clearly marked
   placeholders and a stated firing location.
4. **Respect Consent Mode** — analytics and Ads tags must not fire before consent in
   regulated regions.
5. This produces a *build spec*. To audit a live container, use `/gtm-audit`
   (requires Cogny MCP).

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.