The panel opens beside the page rather than on top of it, and nothing is recorded until you open it. Everything below assumes that much: the extension is installed, the panel is open, and the page you want to inspect is in the tab next to it. Reload once after opening so the panel sees the page load from the start.
Reading what a page sends
See every platform on a page
The Network tab lists every tracking request the page made, grouped by the platform that received it, with the account each one reported to printed alongside. Nothing needs configuring — whatever the page uses is recognised on sight, across 52 platforms.
This is the view to start from on a site you did not build. It is built from what the page actually sent, so a tag injected after load by a consent tool is in it too.
Read a hit without decoding it yourself
Click any request to expand it. The query string becomes named parameters: the event,
the value and currency, the items, the consent signals. Ecommerce items are unpacked from the
packed pr1 form into a readable list.
A request carrying a parameter the platform's own schema does not accept is flagged, so a typo in a parameter name does not have to wait until the report looks wrong.
Link a dataLayer push to the requests it caused
The Events tab shows each push in order, and under it the requests that followed. This pairing is the thing to look at when a tag "fires" but nothing arrives.
A push with no requests under it is a trigger that did not match. Requests with no push above them are a tag firing on something else — a timer, a history change, a hard-coded snippet.
Spot a duplicate hit
Two hits for the same event and the same account get the second one badged DUPLICATE. The account is printed beside each, which is what makes the badge safe to act on: two hits to two different properties is a normal setup, not a fault.
Consent, server-side and frames
Read consent as a sequence
The Consent tab reads the order of events out of the page: whether defaults were set before the tags loaded, whether an update followed, and what state each request went out under.
The finding that matters is at the bottom — the vendors that kept firing while advertising consent was denied. Consent is an order of events, not a setting, and a default that arrives after the tags is not a default.
Recognise server-side GTM
Requests are matched by path rather than hostname, so collection routed through your own domain is still recognised and marked as first-party. Without the label it is indistinguishable from any other request to your site.
A Google Tag Gateway endpoint is reported separately. The two look alike from the browser and mean different things.
See pushes from inside an iframe
Pushes from embedded widgets are hidden by default and the panel says so rather than dropping them quietly: "1 push from iframes hidden". Untick Main frame to include them, and each one carries the frame it came from.
Check campaign attribution
The campaign never travels as its own parameter. Expand the session's first hit and
read dl, the landing address, which carries the utm_ values
percent-encoded. _ss=1 marks the hit that started the session.
Turning what you see into a GTM setup
Pick an event and get the variables and trigger
Press Pick Event, then do the thing on the page. The push it produces is taken apart: tick the values you want and you get the Custom Event trigger and the Data Layer Variable names to match.
One click often produces several pushes, so the alternatives are offered beside it — the theme's own event is rarely the one a trigger wants.
Keep a funnel and export it as a container
Keep each catch and walk the whole funnel, then export once. What comes out is a GTM container file, not a dump of your events: a Data Layer Variable per path, a Custom Event trigger per event, and a tag wired to each.
It goes into GTM, not back into the extension. GTM shows you the diff before it applies anything, so import it as a merge and read what it says it will add.
Pick an element for a click trigger
Point at a button and the panel proposes a CSS selector for it, along with the attributes and any price or number it can read out of the text. The selector is the one to paste into a Click trigger.
Testing without making a mess
Stop test traffic reaching production
Tick the platforms to silence and their requests stop leaving the browser while the toggle is on. Blocked requests are still listed, so you can see exactly what would have been sent. The site's own functionality is untouched.
Turn on a platform's test mode
Eight platform debug modes as switches — TikTok Test Events, Meta test events, Microsoft UET debug and the rest. The ones that need a code from the platform get a field for it, and the value is written in the format that platform validates.
Inject a container into a page
Paste a container snippet and it is injected into the page you are on, optionally persisting for that site. This is how you test a container before it ships — on a client site, a staging build, or a page you do not control.
Where to go next
The guides work through the cases these features exist for, with the reasoning rather than the buttons. If you are starting from scratch, the GTM debugger page is the shortest description of what the tool is; the guides are grouped by what you are trying to do.
Try it on your own site
Tag Master is free, needs no account, and collects no data.
Add to Chrome — Free