A GTM container audit is not the same as opening GTM and scrolling through the tag list. Scrolling gives you names. An audit gives you a picture of what's actually firing, how often, on what pages, for what purpose, and whether anyone still needs it. Those are different questions, and they require different tools.

This process works for any container — whether you're auditing a client's account you've just inherited, investigating performance complaints, or doing a scheduled review of your own setup. The goal at the end is a clear, categorized inventory with each tag marked as keep, review, or remove.

Do this in a staging or preview environment first. The audit itself is read-only — you're not changing anything yet. But get familiar with the container in GTM's preview mode before you start making decisions, so you have a live reference for what each tag actually does when it fires.

Step 1: Export the full container inventory

01
GTM Admin
Export the container JSON and build your audit spreadsheet

GTM lets you export the full container configuration as a JSON file. This gives you a complete, structured record of every tag, trigger, and variable — useful both as a backup and as the raw material for your inventory.

  1. In GTM, go to Admin → Export Container
  2. Select the current workspace and export as JSON
  3. Open the JSON or use GTM's tag list view to build a spreadsheet with one row per tag

Your spreadsheet should have columns for: tag name, tag type (GA4, Meta Pixel, Google Ads, etc.), trigger(s) it fires on, firing frequency (you'll fill this in later), consent status, owner/requester, last known purpose, and your audit verdict (keep / review / remove).

Don't skip the spreadsheet. Working directly in GTM's interface makes it easy to lose track of what you've reviewed and what decisions you've made. A spreadsheet gives you a record you can share with stakeholders, return to across multiple sessions, and use as the basis for cleanup decisions.

Step 2: Check what's actually firing

02
GTM Preview + Analytics
Use preview mode and firing history to separate active tags from dormant ones

A tag that exists in GTM is not necessarily a tag that fires. Tags can be paused, have broken triggers, or fire only under conditions that no longer exist on the site. Checking firing status is the fastest way to divide your tag list into things that are actively doing something and things that are just sitting there.

Using GTM Preview mode

Enter preview mode and navigate through your key page types — homepage, product/category pages, checkout, thank you page, blog posts. For each page load, GTM's preview panel will show you which tags fired and which didn't. Note any tags that appear in "Not Fired" consistently across page types — these are candidates for closer investigation.

Checking tag firing history

GTM doesn't have a native firing history dashboard, but you can cross-reference against your analytics platform. If a tag is supposed to send data somewhere — an ad platform, an analytics tool — check whether that platform has received data recently. A Meta Pixel with no events in the last 30 days, or a Google Ads conversion tag that hasn't fired in 90 days, is a strong signal the tag is dormant.

Paused tags still count against your container capacity. A tag that's been paused "just in case" is occupying space and adding to the cognitive overhead of anyone who looks at the container. Paused tags that have been inactive for more than 90 days should go through the same keep/remove evaluation as live ones.

Step 3: Identify zombie tags

03
Tag Review
Flag tags with no clear owner, no recent activity, or no identifiable purpose

A zombie tag is one that's alive in the container but serving no current business purpose. Identifying them requires asking three questions about each tag:

  • Who requested this and why? If nobody on the current team can answer, that's a yellow flag — not necessarily a removal signal, but worth investigating.
  • Is the platform it belongs to still in use? A conversion tag for an ad platform you stopped using 18 months ago is almost certainly removable.
  • Is there a corresponding business process that depends on it? Conversion tags need active campaigns. Audience tags need active remarketing lists. Analytics tags need someone reading the reports. If the downstream process doesn't exist, the tag probably doesn't need to either.

Common zombie tag patterns to look for:

  • Tags from ad platforms not in the current media plan
  • Multiple versions of the same tag (e.g. "GA4 — Pageview", "GA4 — Pageview v2", "GA4 — Pageview NEW") where only one should be active
  • Tags added by agencies that are no longer retained, with names or IDs that reference that agency
  • Test tags with "test", "temp", or a date in the name that is more than a few months old
  • Tags for tools the business has replaced (old live chat platform, retired A/B testing tool, previous CMP)
Don't assume a tag is dead just because you don't recognize it. Some tags exist for legitimate contractual or compliance reasons — affiliate verification, brand safety tools, fraud detection — and may have been added by a previous team without documentation. Flag unfamiliar tags for investigation, not immediate removal.

Step 4: Audit ad partner tags specifically

04
Ad Platform Review
Map each ad platform to its tags and identify redundancy

Ad platforms tend to accumulate the most tags because each platform typically needs multiple: a base pixel or global site tag, one or more conversion tags, and often a remarketing or audience tag. Across three or four platforms, that's easily 12–20 tags before you've added anything else — and when platforms change or campaigns evolve, old tags rarely get removed.

For each ad platform in your container, map out:

  • How many tags belong to this platform
  • Which account and campaign each conversion tag corresponds to
  • Whether there are duplicate conversion tags for the same event
  • Whether the platform is still actively used for paid media
  • Whether server-side tracking has been implemented for this platform (making the browser-side tag redundant)

A common pattern is finding three or four Google Ads conversion tags for the same conversion action, added at different times by different people, all firing simultaneously. Each one sends a separate conversion signal to Google Ads — inflating reported conversions and distorting Smart Bidding performance.

Ad platform tags are often the heaviest tags in a container. A full Meta Pixel implementation with CAPI events, a TikTok Pixel, a Google Ads global site tag with multiple conversion actions, and a LinkedIn Insight Tag can collectively add several hundred milliseconds to page load on slower connections. Auditing which of these are actually earning their performance cost is worth doing even when the container isn't at capacity.

Step 5: Check consent coverage

05
Consent Audit
Verify every tag that requires consent has the correct consent trigger

Every tag that drops a cookie, collects personal data, or sends information to a third party needs to be gated on the appropriate user consent. In GTM, this is typically implemented through a consent trigger that fires only after the user's CMP choice is registered. But in most containers, the implementation is incomplete — some tags predate the consent setup, some were added informally, and some simply weren't configured correctly.

For each tag in your inventory, note:

  • Does it require consent? (Ad pixels, analytics, personalization: yes. Functional tags like performance monitoring or error logging: often no.)
  • Does it have a consent trigger or consent check in its firing conditions?
  • Is it correctly categorized — analytics consent for analytics tags, marketing consent for ad pixels?
  • Does it fire before the CMP loads? (Tags that fire on DOM Ready or Window Loaded without a consent check may be running before the user has made a choice.)

Any tag that requires consent and doesn't have it properly implemented is a compliance gap, regardless of what your cookie banner says. The banner creates the appearance of consent management — the GTM trigger is what actually enforces it.

Step 6: Assess tag weight and trigger logic

06
Performance Review
Identify heavy tags and triggers that fire more broadly than they need to

Not all tags carry the same performance cost. A lightweight custom HTML tag might be a few hundred bytes. A full ad platform integration pulling in audience syncing, cross-device matching, and conversion modeling can be significantly heavier — and may trigger additional network requests you don't see in GTM. Identifying your heaviest tags tells you where performance gains are available if those tags can be removed, replaced, or moved server-side.

The fastest way to assess tag weight is through browser DevTools. Open the Network tab, load a key page with GTM preview mode active, and filter by third-party domains. The requests associated with each ad platform will show you both the initial payload and any subsequent calls that tag triggers.

Trigger scope

Also review whether tags are firing more broadly than their purpose requires. A conversion tag should fire on a thank-you page or a specific conversion event — not on All Pages. An audience tag for cart abandoners should fire when a product is added to the cart, not on every page load. Tags with All Pages triggers that don't actually need page-level coverage are creating unnecessary firing volume and should have their triggers tightened.

Categorizing your findings

At the end of the audit, every tag in your spreadsheet should have one of three verdicts:

StatusCriteriaNext step
KEEP Active, owned, correctly configured, consent properly handled, firing on appropriate triggers Document owner and purpose if not already noted
REVIEW Owner unclear, purpose uncertain, or configuration questionable — needs a conversation before a decision can be made Assign to a stakeholder to confirm or deny need
REMOVE Platform no longer in use, confirmed duplicate, zombie tag with no active downstream process, or paused for 90+ days with no clear return date Pause first, then follow the removal process in Part 3

The REVIEW category is where most of the work is. Getting clear answers on uncertain tags requires reaching out to stakeholders — which is slower than the technical work but more important. A tag removed without confirmation can break something. A tag that stays in REVIEW indefinitely is just a zombie with a label.

A completed audit spreadsheet is the foundation for the cleanup. Don't start removing tags until the audit is finished and reviewed. The cleanup process — pausing, confirming, removing — works from this document. Skipping the audit and going straight to deletion is how things break.
GTM problems show up in GA4 data. Duplicate tags, over-broad triggers, and zombie conversion events all affect what lands in your analytics reports. If you want to see the GA4 impact of your container issues, GA4 Health Check audits your property in 60 seconds. Run the audit — $79 →
Travis Gunn
Founder of GA4 Health Check. Working with Google Analytics since 2013, with over 250 clients audited across almost every industry vertical. 100% Job Success on Upwork for over a decade.