How we stopped counting ourselves: an internal-traffic cookie built in GTM
Every QA pass, every "let me just check that," every refresh from the team was quietly inflating our own GA4 numbers. IP-based exclusion doesn't survive a dynamic IP. Here's the first-party cookie we built in GTM instead — and the one link everyone on the team has to click, once.
Every analytics dashboard has the same blind spot: the people building the site are also its most frequent visitors. Every deploy check, every "does this look right on mobile," every link we click before sending it to a client — GA4 counts all of it as real traffic, sitting quietly inside session counts, bounce rate, and every report we hand a client.
The standard fix is IP-based exclusion, and it's the first thing GA4's own setup docs point you to. It also breaks the moment anyone's ISP hands them a new dynamic IP, which for most home connections is "eventually, on its own schedule." We were re-adding IPs to the exclusion list every few weeks and still catching our own visits in the data.
The fix that actually holds: a first-party cookie set once per browser, checked on every page view — not an IP.
The mechanism
Here's the mechanism, built entirely in Google Tag Manager:
- A 1st Party Cookie variable in GTM reads a cookie called
automaton_internal. - A Page View trigger checks that variable on every page load.
- A GA4 configuration tag exception tells GA4 not to fire when that cookie is present — so internal visits simply never get sent to the property in the first place, instead of being sent and filtered out later.
- A Custom HTML tag, fired once from a specific URL, sets the cookie itself.
Opting a browser out
To opt a browser out of tracking, anyone on the team visits automatonagency.com/?set_internal=true once, from their normal browser — not incognito, since the cookie needs somewhere to live. That single visit sets automaton_internal=true for two years. No IP list to maintain, no re-adding yourself every time your router reassigns an address. The cookie travels with the browser, not the connection.
The trade-off
The trade-off worth naming: this excludes browsers, not people. Clear your cookies or switch to a new device and you're back in the count until you visit the link again. For a small team that's a two-second cost, paid once every couple of years — a much better deal than the IP list we were maintaining before.
Small mechanism, but it's the kind of fix that matters more than it looks like it should: every dashboard we hand a client, every trend line we read internally, is now measuring the people who actually showed up — not the five of us checking our own work.