GTM Ultimate Stack
Inventory every tag, trigger and variable across your brands
Extract a complete GTM inventory for one brand or a whole portfolio in one pass, narrow it to the question that matters, and leave a record the next owner can repeat.
An inventory should answer who owns what
A tag count is a start. A useful inventory goes further: for each important item, what it is for, which container it belongs to, whether anything depends on it, and who can answer questions about it. That is the difference between collecting rows and understanding a set of brands.
Before you open ODDVX, agree the scope with whoever owns the accounts:
- Which brands and markets are in scope?
- Which containers are production, and which are staging, test or retired microsites?
- Is anyone else working in these containers right now?
Staging rows mixed into a production review produce false findings. It is cheaper to exclude them in a conversation than to explain them later.
A scope checklist marking two production containers in scope, one staging container to exclude and one old microsite to ask the owner about.
Pick the brands and extract
Open Inventory & Cleanup and expand Scope. The list shows every brand that has a GTM account set up in ODDVX. Type in the filter box to narrow it by brand or market, for example AU, then tick the brands you want.
- Free selects one GTM account at a time. Choosing another replaces the first.
- Premium can select several, and adds Select all (or Select shown while a filter is active).
Press Extract. There is no type, status or name filter to set first. Every tag, trigger and variable in every container of those GTM accounts comes back together, and you narrow the results afterwards. Once the extract finishes, Scope collapses to one line, for example 4 accounts · 11 containers · extracted 09:42. That line is the scope of everything you see next.
A scope form: the brand filter types AU, four AU brands are ticked, and a summary line shows four accounts, eleven containers and the extract time.
Read what came back
The inventory opens with five tiles: Tags, Triggers, Variables, Orphaned and Only inactive users. Below them is one table with a row per item. Its columns are Name, Type, Status, Usage, Account and, once more than one container is involved, Container.
- Type uses GTM's own names, such as Google Analytics: GA4 Event or Custom Event. Community Template items show the template's name.
- Status is Active or Paused, for tags only. Triggers and variables have no paused state.
- Usage says whether anything that can fire depends on the item. It is separate from Status: a paused tag that still has triggers reads In use. See Reading GTM usage verdicts.
Look at all three kinds of item, not just the tags with familiar vendor names. The variables and triggers usually explain how an inherited set-up actually works.
An inventory table fills with rows across brands while the count tiles rise to 184 tags, 96 triggers, 212 variables, 37 orphaned and 14 only used by inactive items.
Narrow the table to one question
A portfolio extract can run to thousands of rows. Don't scroll through it. Use the filter bar to ask one question at a time:
- Entity: all, tags, triggers or variables. The KPI tiles do the same thing in one click.
- Usage: in use, only inactive users or orphaned.
- Name: contains, equals, starts with, ends with or regex, with an Aa toggle for case. An invalid regex says so and matches nothing.
- Type: a grouped, searchable list of the types actually present, with counts.
- Status: any, active or paused.
- Container: one container, when the extract spans several.
- Pending only: just the rows with a staged change.
Questions that work well: every GA4 Event tag in Brand B, orphaned triggers in every container, anything named with 'test'. Write down the filters you used. A filtered count is the answer to that question, not the size of the account.
Filter chips activate one after another, Tags, a name filter typed as GA4 - Event, and a type filter, while non-matching rows collapse.
Separate observations from decisions
An inventory tells you what exists. It doesn't tell you what should change. Keep three outcomes apart as you review:
- Retain: the purpose and owner are known and the item supports a current journey.
- Investigate: the purpose is unclear, the item is paused, or it is orphaned and nobody has confirmed why. Name the person who can answer.
- Change: there is a specific, agreed reason to rename, pause, remove or add something.
An orphaned item is a candidate for review, not a safe deletion. A paused campaign may be back next month. A badly named tag may be the only record of an important action. If you can't identify an owner, write that down rather than guessing a purpose.
Three panels, retain, investigate and change, each receiving inventory items with a short note.
Leave a record the next owner can repeat
Record the review date, the scope line, the filters you used, the item names that matter and the questions still open. Someone else should be able to repeat your review and get the same rows.
- On Premium, Export CSV writes the table as gtm_inventory.csv, with entity, account, container, name, type, status, usage and reference count. The same file can be emailed. Keep the original export next to your annotated findings.
- On Free, record the on-screen review in your own notes, with the same columns.
- Optionally, Ask Oddie about these results explains what the table shows, using your own AI provider key. It only describes items that exist in GTM, never staged ones, and it doesn't make decisions for you.
Before sharing an export with anyone outside the account team, remove client identifiers and anything personal.
A five-step record strip fills in, followed by a CSV export card and a handover notes card.
ODDVX for Windows
Build once. Stage it in every brand.
Start free on one GTM account. Premium adds several accounts in one run, exports and scheduled reports.