Gtm Monitor logo

Gtm Monitor

Organization
cognyai
gtm-monitor

Weekly GTM container check — new, edited and removed tags, unpublished draft changes, orphaned tags, workspace status — diffed week-over-week

Overview

Publishercognyai
Repositoryclaude-code-marketing-skills
Skill namegtm-monitor
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 Monitor 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-monitor
  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-monitor .claude/skills/gtm-monitor
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Gtm Monitor 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 Monitor 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 Monitor 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 Monitor

A recurring weekly check on a Google Tag Manager container. Containers don't drift on their own — people change them. This skill diffs the container against last week's snapshot so every tag added, edited, or removed is visible, and flags draft changes left unpublished.

Requires: Cogny Agent subscription ($9/mo) — Sign up

Designed to be scheduled weekly via /loop or /schedule.

Works with

JobPrimaryEnhanced when connected
Container diff, orphans, unpublished changesGTM—
Did a changed tag stop sending data?—GA4 tool_run_report, or Plausible breakdown (event:goal)
Did a new tag break the page?—Microsoft Clarity get_live_insights (Script Error Count)

Prerequisites Check

If no mcp__cogny__* tools exist (no list_integrations, no cogny_status), print this and stop:

GTM Monitor needs your marketing data through Cogny's MCP gateway.

1. Sign up at https://cogny.com and connect Google Tag Manager (GA4, Plausible or
   Microsoft Clarity optional, to check downstream impact).
2. Add Cogny to .mcp.json in your project:
   {"mcpServers": {"cogny": {"type": "http", "url": "https://app.cogny.com/mcp"}}}
3. Restart Claude Code; it opens a browser for the OAuth login on first use.

Nothing to run without Cogny: the container is only readable through the GTM API.

If Cogny is connected but mcp__cogny__mcp__Google_Tag_Manager__tool_list_tags isn't, say "connect Google Tag Manager in Cogny" and stop.

Health check: call list_integrations, then tool_list_accounts as the cheap read. health_status misses revoked tokens, so a 401, Forbidden or scope error is 🔴 "reconnect Google Tag Manager"; don't retry it. If a tool named here is missing, call refresh_mcp_discovery once; new tools only load after the client reconnects, so mark that check ⚠ "needs reconnect" for this run.

Usage

/gtm-monitor — weekly change + health check on the connected container.

For a full one-time review, run /gtm-audit. This is the light weekly rhythm.

Steps

1. Read the prior snapshot

Call read_context_node on insights/gtm/monitor/latest. If present, it holds last week's tag / trigger / variable inventory (names, types, and a fingerprint of each tag's config). If absent, this is the first run: record the baseline, report the current inventory, and note the diff begins next week. The snapshot also holds the account_id, container_id and workspace_id used last week; reuse them in Step 2.

2. Pull the current container state

Pick the container. If the snapshot has account_id and container_id, use them, and skip discovery. Otherwise:

tool_list_accounts                                  → account_id (ask if several)
tool_list_containers   (account_id)                 → container_id

Pick the container whose usageContext contains web. If there are several web containers, ask which one to monitor (show name and publicId, e.g. GTM-XXXX). Server, iOS and Android containers are out of scope here.

tool_list_workspaces   (account_id, container_id)   → workspace_id (snapshot's, else Default Workspace)
tool_list_tags         (account_id, container_id, workspace_id)
tool_list_triggers     (account_id, container_id, workspace_id)
tool_list_variables    (account_id, container_id, workspace_id)
tool_get_workspace_status   (account_id, container_id, workspace_id)

3. Diff against last week

Compare current vs the snapshot:

  • Added — tags / triggers / variables that did not exist last week
  • Removed — items that existed last week and are now gone
  • Edited — items whose fingerprint changed (tool_get_tag for detail)

Use GTM's own fingerprint field on each tag, trigger and variable as its fingerprint. GTM changes it on every edit, so don't hash the config yourself.

For every change, name the item and what changed.

🔴 Flag as critical when the change touches a measurement-critical tag:

  • A GA4 configuration tag edited or removed
  • A Google Ads conversion tag edited or removed
  • A consent-related tag or trigger changed
  • A new analytics/marketing tag added with no consent check

4. Standing health checks

Re-run the fast checks from /gtm-audit:

  • Tags with no firing trigger (orphaned — fire nothing)
  • More than one GA4 config tag for the same Measurement ID
  • Paused tags that were live last week (someone turned tracking off?)

4b. Downstream impact (enhanced when connected)

Only when Step 3 found a changed or removed measurement-critical tag. Call list_integrations once and use what is healthy:

CheckCallFlag
Event still arrivingGA4 tool_run_report (property_id, last 7d vs prior 7d, dimensions: [eventName], metrics: [eventCount], filtered to the tag's event)🔴 event at zero or down >50% since the change
Same, on Plausiblebreakdown (site_id, dimension: event:goal, date_range per week)same
Pages breakingClarity get_live_insights (num_of_days: 3, metrics: [Script Error Count, Dead Click Count], dimensions: [URL]), against last week's get_insights_history🟡 script errors up on the pages the new tag fires on

Clarity allows 10 live requests a day per project; one call per run is enough. If nothing is connected, say "downstream impact not verified" next to the change.

5. Unpublished changes

From tool_get_workspace_status: if the workspace has changes not yet published, the live site is behind the container. Flag it — and if those changes have been sitting unpublished for more than a week (compare to the snapshot), say so loudly.

tool_get_workspace_status has no timestamps. Each changed entity's fingerprint is a millisecond Unix epoch of its last edit, so use it as the change date (e.g. 1760000000000 → 2025-10-09). The oldest fingerprint among unpublished changes tells you how long they've waited; save it in the snapshot so next week can compare.

6. Output

GTM Monitor — [Container Name]
Week of [YYYY-MM-DD] – [YYYY-MM-DD]

⚠️  Needs attention this week
- [Critical/important first, or "No changes — container stable."]

Changes since last week
- Added:   [N]  — [names]
- Edited:  [N]  — [names + what changed]
- Removed: [N]  — [names]

Health
- Orphaned tags: [N]
- Duplicate GA4 config: [yes/no]
- Unpublished changes: [yes — N changes, oldest X days / no]

Inventory: X tags · X triggers · X variables

Recommended actions
1. ...

7. Save this week's snapshot

Call write_context_node on insights/gtm/monitor/latest with account_id, container_id and workspace_id, plus the full current inventory (id, name, type and GTM fingerprint of every tag, trigger and variable) and the oldest unpublished-change fingerprint, so next week can diff. Also write a dated copy to insights/gtm/monitor/<YYYY-MM-DD>.

8. Record findings — selectively

Only file a create_finding for genuine concerns — a measurement-critical tag changed, an orphaned tag, changes stuck unpublished. A stable week files nothing.

json
{
  "title": "GA4 config tag edited this week — verify it was intentional",
  "body": "'GA4 - Config' was modified since last week's snapshot: the Measurement ID field changed. If unplanned, every GA4 hit may be routing to the wrong property. Confirm with whoever owns the container and check GA4 DebugView.",
  "action_type": "tag_change_review",
  "expected_outcome": "Change confirmed intentional, or reverted",
  "estimated_impact_usd": 0,
  "priority": "high"
}

On Cloud, create_ticket takes the same content with the fields mapped per section 2 of the routing guide.

Action types: tag_change_review, tag_fix, trigger_fix, consent_configuration, publish_pending.

Recording findings

Use create_ticket when the workspace has it (Cloud) and create_finding otherwise (Solo). The fields differ; see section 2 of ../marketing-engineer/references/mcp-routing.md.

Critical rules

  1. The diff is the point. Always compare to last week's snapshot; a bare inventory with no diff is not a monitor.
  2. Changes to GA4 config / Ads conversion / consent tags are critical — verify every one was intentional.
  3. Lead with what changed and what's broken. A stable week is one short line.
  4. Read-only. Never edit or publish the container.

Frequently asked questions

What does the Gtm Monitor AI skill do?

Weekly GTM container check — new, edited and removed tags, unpublished draft changes, orphaned tags, workspace status — diffed week-over-week

Why use Gtm Monitor on TypingMind?

Because you install it once and use it with any model. Gtm Monitor 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 Monitor in TypingMind?

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

Which AI models can use Gtm Monitor?

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 Monitor?

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

Is the Gtm Monitor 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 👇