Data resilienceAvailable now

    Ad blockers match URLs. So change the URLs.

    Moving to a first-party tagging domain fixes the hostname, but the paths give you away: /gtm.js and /g/collect are on every blocklist there is. Custom Loader serves the same endpoints from a randomised path namespace unique to your container, and measures how many requests that recovers.

    Randomised per-container paths
    Regenerate at any time
    Powers the recovered metric
    All modules
    Same container, two paths
    /gtm.jsBlocked
    /x7k2m9dq4f/l.jsDelivered
    Recovered requests
    18.4%example, measured per container

    Two requests, one blocklist

    A first-party domain is only half the fix

    Tracking-prevention lists are pattern matches, and they match more than hostnames. Once your domain is known, or once a path pattern matches, requests disappear again, and they disappear silently.

    01

    Paths are the easiest pattern to match

    Filter lists carry rules for /gtm.js, /gtag/js and /g/collect that fire regardless of which domain serves them. A custom domain alone does not get past those.

    02

    Follow-up loads leak back out

    Proxied scripts often reference googletagmanager.com internally. Those follow-up requests leave your domain again and land straight on a blocklisted URL.

    03

    You cannot see what you lost

    A blocked request never arrives, so it never appears in your reports. Without a comparison you have no way of knowing what the gap is worth.

    How it works

    Every container gets its own random path seed. The loader serves the GTM script and every collect endpoint underneath it, so there is no canonical path left to match.

    01

    A randomised namespace

    Your container is assigned a seed such as x7k2m9dq4f. The GTM script becomes /x7k2m9dq4f/l.js, GA4 collection becomes /x7k2m9dq4f/g/collect, and so on for every client.

    02

    A first-party bootstrap

    You paste one short script tag pointing at /{seed}/{seed}.js. It is served by the gateway itself, initialises the data layer and loads the real GTM script from inside the same namespace.

    03

    Script bodies rewritten

    References to googletagmanager.com inside proxied script bodies are rewritten to your own domain and seed, so follow-up loads stay first-party too. On by default, and switchable.

    04

    Regenerate on demand

    If a seed is ever burned, generate a new one from the console. The old namespace stops resolving and you update the snippet on your site.

    What you get

    A recovered-requests number

    Requests arriving inside your seed namespace came through the loader by definition. That is the signal behind the recovered metric: evidence, not an estimate.

    Unique per container

    The seed is generated per container, so no shared pattern exists across our customers for a list maintainer to target.

    No canonical path left

    The generic passthrough rule covers every client (GA4, Data Client, and anything else your container serves), not only the GTM script itself.

    Standard nginx, no exotic runtime

    The bootstrap is served by plain gateway directives, so nothing about the loader depends on optional platform components.

    Specification

    Path seed
    10 random characters, per container
    Loader script
    /{seed}/l.js
    Bootstrap script
    /{seed}/{seed}.js
    Script body rewriting
    On by default, switchable
    Cost
    Included with your container
    Request headers

    This module rewrites request paths instead of adding headers.

    When to use it

    Your conversion counts sit well below your order counts

    A persistent gap between what your shop records and what your ad platforms report is usually blocking. This is the module that closes the measurable part of it.

    You need to prove the value of server-side

    The recovered percentage is the number to put in front of a client or a finance team: this many requests arrived that would otherwise not have.

    You run paid campaigns in ad-block-heavy markets

    Where blocker adoption is high, recovered requests translate directly into better campaign optimisation, because the platforms get more of the signal they bid on.

    Questions about the Custom Loader

    Do I have to change my website?

    Yes, once. You replace the standard GTM snippet with the script tag shown in the console. It is a single tag, and the console gives you the exact markup to copy.

    Is this against Google's terms?

    No. You are serving Google's own script from your own domain over a path you chose, which is what server-side tagging is. Nothing about the script or the data it sends is modified.

    What happens if a blocklist catches up with my seed?

    Regenerate it from the console and update the snippet on your site. Because seeds are per container, a rule written against one customer's namespace has no effect on anyone else's.

    Does it work with consent mode?

    Yes. The loader changes where the script is served from, not what it does. Consent Mode signals travel in the request parameters exactly as before.

    Other modules

    Modules stack. Enable as many as you need. They compose into one configuration in front of your container.

    Ready to switch it on?

    Every module is included with your container at no extra cost. Create a container, open the modules panel, and toggle.

    See pricing