Know whether your tags actually fire.
Reading a page's HTML tells you nothing — anything deployed through GTM is injected at runtime and never appears in the source. This runs inside the page instead, so it sees the real network log: which containers loaded, which IDs are configured, and whether a single hit was ever sent.
Install
Drag this to your bookmarks bar, then click it on any page you want to check.
Prefer the console? Same loader:
var d=document,s=d.createElement('script');s.src='https://analytics-check.konvert7.com/check.js?t='+Date.now();d.body.appendChild(s);When the site has a strict CSP
Both of the above fetch check.js, and a strict script-src blocks that fetch. Running the loader from the DevTools console does not get around it: the console evaluates what you type, but the <script src> it appends is still the page loading a script, so the policy still applies. Paste the whole checker instead — it requests nothing.
(()=>{function G(t){return typeof t==="object"&&t!==… // the whole checker, 12.5 KB, no networkWhat it checks
Google Tag Manager
- Container ID, read from the gtm.js request
- Container loaded but never initialised
- More than one container on the page
Google Analytics 4
- Measurement ID, from the tag and from the collect beacon
- The same property measured twice — every session double counted
- Tag present but no hit ever sent
Microsoft Clarity
- Project ID, read from the tag request
- Script loaded but window.clarity never booted
- Recording but uploading nothing
Also detected, but only listed when they are actually on the page: Plausible, PostHog, Vercel Analytics, Meta Pixel, Hotjar. And the consent platform — OneTrust, Cookiebot, Osano, CookieYes or a bare TCF framework — so a tag that loaded but sent nothing names what is holding it instead of shrugging at you.
See it catch something
The demo page installs GA4 twice over and denies analytics consent. Run the bookmarklet there and it should report both. If it does not, the checker is broken — not your site.