Skip to content
Marketing
Skill

/gtm-tracking-plan

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

From plugin
claude-code-marketing-skills
11462 skills

Claude Code

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

SKILL.md

gtm-tracking-plan.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.1.1"
author: Cogny AI
platforms: []
user-invocable: true
argument-hint: "<site url>"
allowed-tools:
  - WebFetch
  - WebSearch
  - Bash
  - Read
  - Write
  # Enhanced when connected via Cogny MCP (read-only)
  - mcp__cogny__refresh_mcp_discovery
  - mcp__cogny__list_integrations
  - mcp__cogny__mcp__Google_Tag_Manager__tool_list_accounts
  - mcp__cogny__mcp__Google_Tag_Manager__tool_list_containers
  - mcp__cogny__mcp__Google_Tag_Manager__tool_list_workspaces
  - mcp__cogny__mcp__Google_Tag_Manager__tool_list_tags
  - mcp__cogny__mcp__Google_Tag_Manager__tool_list_triggers
  - mcp__cogny__mcp__Google_Tag_Manager__tool_list_variables
  - mcp__cogny__mcp__Google_Analytics_4__tool_list_data_streams
  - mcp__cogny__mcp__Google_Ads__tool_execute_gaql
  - mcp__cogny__mcp__Meta_Ads__tool_list_ad_accounts
  - mcp__cogny__mcp__Meta_Ads__tool_get_pixels
  - mcp__cogny__mcp__TikTok_Ads__tool_list_advertisers
  - mcp__cogny__mcp__TikTok_Ads__tool_get_pixels
  - mcp__cogny__mcp__LinkedIn_Ads__tool_list_ad_accounts
  - mcp__cogny__mcp__LinkedIn_Ads__tool_get_conversions
  - mcp__cogny__mcp__Reddit_Ads__tool_list_ad_accounts
  - mcp__cogny__mcp__Reddit_Ads__tool_get_conversion_events
  - mcp__cogny__mcp__Snapchat_Ads__tool_list_ad_accounts
  - mcp__cogny__mcp__Snapchat_Ads__tool_list_pixels
  - mcp__cogny__mcp__X_Ads__tool_list_ad_accounts
  - mcp__cogny__mcp__X_Ads__tool_get_web_event_tags

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.

Works with

Works with zero accounts (placeholders for every ID). When connected, the spec is filled with real IDs and diffed against the live container:

| Job | Without accounts | Enhanced when connected | |-----|------------------|-------------------------| | Existing container | — | GTM `tool_list_tags`, `tool_list_triggers`, `tool_list_variables` | | GA4 Measurement ID | `G-XXXXXXX` | GA4 `tool_list_data_streams` | | Ad-platform tags to include | ask the user | one row per connected ad platform (Step 4b) | | Build it | hand to a GTM builder | `/gtm-setup` (GTM writes, asks 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.

1b. Diff against the live container (enhanced when connected)

If Cogny isn't connected, skip this and note what connecting adds.

If GTM is connected: `tool_list_accounts` → `tool_list_containers` (`account_id`) → `tool_list_workspaces` → `tool_list_tags`, `tool_list_triggers`, `tool_list_variables` (`account_id`, `container_id`, `workspace_id`). Give every row in Steps 2–4 a **Status**: `exists` / `modify` / `new` / `remove` (duplicates, dead tags). Use the container's own naming convention if it has one. If GA4 is connected, take the Measurement ID from `tool_list_data_streams` (`property_id`).

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.

  • **Google tag** (formerly the "GA4 Configuration tag") — exactly one per Measurement

ID, on Initialization / All Pages, with the Tag ID (`G-XXXXXXXXXX`). (Calling out "exactly one" prevents the classic double-count bug.)

  • **GA4 Event tags** — one per event from Step 1, with the same Measurement ID as the Google tag, and

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`.

4b. Ad-platform tags (enhanced when connected)

If Cogny isn't connected, skip this and note what connecting adds.

Call `list_integrations` once. For each healthy ad platform, add its base tag and the conversion events the key events map to, with the real ID:

| Platform | Read the ID with | Tag in GTM | |----------|------------------|------------| | Googl

Read more
@cognyai
Ships withclaude-code-marketing-skills

AI marketing skills for Claude Code, Cursor, Windsurf, and other AI coding tools. Audit SEO, analyze ads, research competitors, qualify leads — all from your terminal. Free skills need no account. Premium skills connect your real data for $9/mo.

Stars on GitHub

Momentum

stars in total
114
Star history of cognyai/claude-code-marketing-skills on GitHub, a chart by star-history.com

More skills from other plugins.

seo

seo

Comprehensive SEO analysis for any website or business type. Full site audits, single-page analysis, technical SEO (crawlability,…

@agricidaniel@agricidanielInstall Skill
brag

brag

Turn the current project website into a short, polished, shareable launch video using Hyperframes. Use when someone says "/brag",…

brag3w21k
@latent-spaces@latent-spacesInstall Skill
geo-audit

geo-audit

Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit…

Questions about gtm-tracking-plan.

Which coding agents can use gtm-tracking-plan?
gtm-tracking-plan installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.