Gtm Tracking Plan logo

Gtm Tracking Plan

Organization
cognyai
gtm-tracking-plan

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

Overview

Publishercognyai
Repositoryclaude-code-marketing-skills
Skill namegtm-tracking-plan
Stars
111
Forks
15
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by cognyai on GitHub. Read the source before you install it.

Installation

Install the Gtm Tracking Plan AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/cognyai/claude-code-marketing-skills/tree/main/skills/gtm-tracking-plan
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/cognyai/claude-code-marketing-skills.git /tmp/claude-code-marketing-skills
mkdir -p .claude/skills
cp -r /tmp/claude-code-marketing-skills/skills/gtm-tracking-plan .claude/skills/gtm-tracking-plan
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Gtm Tracking Plan in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Gtm Tracking Plan on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Gtm Tracking Plan is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

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:

JobWithout accountsEnhanced when connected
Existing container—GTM tool_list_tags, tool_list_triggers, tool_list_variables
GA4 Measurement IDG-XXXXXXXGA4 tool_list_data_streams
Ad-platform tags to includeask the userone row per connected ad platform (Step 4b)
Build ithand 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:

PlatformRead the ID withTag in GTM
Google Adstool_execute_gaql: SELECT conversion_action.name, conversion_action.status, conversion_action.tag_snippets FROM conversion_actionConversion Tracking (ID + label) + Conversion Linker
Metatool_list_ad_accounts → tool_get_pixels (ad_account_id)Meta Pixel (template) + CAPI via /meta-capi
TikToktool_list_advertisers → tool_get_pixels (advertiser_id)TikTok Pixel template
LinkedIntool_list_ad_accounts → tool_get_conversions (ad_account_id)Insight Tag + conversion IDs
Reddittool_list_ad_accounts → tool_get_conversion_events (ad_account_id)Reddit Pixel template
Snapchattool_list_ad_accounts → tool_list_pixels (ad_account_id)Snap Pixel template
Xtool_list_ad_accounts → tool_get_web_event_tags (account_id)X base pixel + event tags

Platforms not connected: list them as optional rows with placeholders. Microsoft Ads (UET) has no tag-reading tool; ask for the UET tag ID. All ad tags fire on the same Custom Event triggers as GA4 and pass the same transaction_id / event ID for dedup.

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 Google tag, then GA4 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 Google tag per Measurement ID. State it explicitly — duplicate Google 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. Real IDs only from the platform. Never guess a pixel or conversion ID; leave a placeholder if the platform isn't connected.
  6. This produces a build spec. To audit a live container, use /gtm-audit (requires Cogny MCP).

Frequently asked questions

What does the Gtm Tracking Plan AI skill do?

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

Why use Gtm Tracking Plan on TypingMind?

Because you install it once and use it with any model. Gtm Tracking Plan is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Gtm Tracking Plan in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/cognyai/claude-code-marketing-skills/tree/main/skills/gtm-tracking-plan. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Gtm Tracking Plan?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Gtm Tracking Plan?

As many as you like. As long as a model supports skills, you can use Gtm Tracking Plan with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Gtm Tracking Plan AI skill free?

It is published on GitHub by cognyai. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇