A Google Tag Manager build that outlives the person who built it.
Container architecture, a written dataLayer specification, tag and trigger build, and QA across every consent state. For teams that already know what they need measured and want it built once, documented, and handed over.
What this covers
Container structure, settled before the first tag exists. The naming convention is agreed on the way in: one pattern across every tag, trigger and variable, with the destination, the event and the scope carried in the name. Folders are laid out by destination rather than by whoever added the tag last. Trigger scope is decided per tag as it is built, not corrected afterwards. The acceptance test is agreed at the same time, and it is a plain one: a developer who has never opened the container can find the tag that sends a purchase to Meta, and say what it reads, inside a minute.
A dataLayer specification your developers can build against. It is written before the tags that depend on it, and it is handed over as a standing document rather than a working note. Then every line on it is assigned. What the page already exposes is built inside the container. What only your application or your server holds becomes a named developer task, estimated and scheduled rather than discovered halfway through the build.
Tag and trigger build, with duplication settled up front. GA4 events, Google Ads conversion actions, the Meta pixel, and whatever else you buy media on. Duplication is a design decision here rather than a later discovery: one measurement path per conversion action, one transaction_id taken from the order and never minted in the browser, and one shared event ID wherever the same action is sent from more than one place. Where a Conversions API path is in scope, the container owns the browser half and the event ID contract, and the server half is provisioned separately, because a server-to-server call carrying an access token has no business running in a page. That half is scoped on the conversion tracking setup page.
Consent wired in as tags are created. Every tag gets a consent requirement when it is built, including Custom HTML tags that set cookies, and the default consent state is declared ahead of the first measurement tag. The container is wired so a visitor’s choice, including a Global Privacy Control signal, reaches the tags. Which obligations apply to you, and how the banner and region rules should behave, is consent work and is scoped on the consent and privacy page.
How it runs
Scoped first, then quoted fixed-price. The call covers what you sell, what you count, which platforms have to receive it, and what your developers can change. The build is quoted as a fixed-price project against that scope. If you have run the audit, the $900 is credited in full.
A separate workspace, named versions, rollback in one action. Nothing is built in your live container. The build has its own workspace, ships as a single named version with the change written into the notes, and can be undone in one action. The workspace is opened and closed as one unit, so a parallel edit cannot quietly overwrite half of it.
Built in dependency order. The consent default first, then the dataLayer pushes, then the tags that read them, then the triggers that scope those tags. Each layer is checked before the next one is added, so anything that misbehaves has one candidate cause instead of four.
QA across consent states, devices and connection speed. Every event is tested with consent accepted, refused and left unanswered, on desktop and on mobile, and on a throttled connection where the consent platform and the first tag are competing to run first. What gets recorded is what arrived at the destination and what the payload carried, never just that the tag fired.
One person from scoping to handover. No juniors, no handoffs. The person on the scoping call is the person in the container.
What you get
The container, published only once you approve it. Structured, named, and explained in the version notes rather than in someone’s memory.
The dataLayer specification as a standing document. Your developers build against it, and any future vendor is handed a contract instead of a guess.
Proof for every event. The request, its payload, and the consent state it was captured in.
Handover documentation written for your team. The naming convention, which tag serves which destination, which tags depend on which pushes, what to verify after a deploy or a theme publish, and how to roll back. Your next change should not require hiring anyone.
Ongoing management, if you want it. Release checks, new tags and platform changes, scoped on the tracking maintenance page. Plenty of clients take the handover and run the container themselves.
When this is the wrong fit
You do not yet know what is wrong. Paying for a build to discover a fault is the expensive order to do it in.
You want one snippet installed and nothing else. A single conversion tag on a single page does not need this much process.
Nothing on the site can change. Some values exist only in application state or on your server, and no container can invent them. With no developer time available, the build is capped at what the page already exposes.
You need several people working in parallel. One person does the work, in sequence, so a hard launch date is worth raising on the first call.
Most builds start with the Missing Conversions Audit, because a quote written against a container nobody has inspected is guesswork. It establishes what exists, what it is doing, and what the build has to cover, and the $900 is credited in full against the project that follows.
Questions
Can our developers keep working in the container after handover?
That is what the naming convention and the specification are for. Every tag, trigger and variable follows one pattern, the dataLayer contract states what each event has to carry, and the handover document records which tags depend on which pushes. The one discipline worth keeping is version hygiene: one workspace per change, a name and a note on every published version, and nothing edited in a workspace someone else has open. That is what keeps a rollback a single action rather than an investigation.
Do we need Google Tag Manager at all, or can the tags go in our site code?
Tags can live in code, and some belong there, such as a consent default you want running before the container itself loads. What you give up is a deployment path. A tag in the codebase needs a release for every change, has no version history of its own, cannot be reverted independently of the rest of the release, and tends to end up pasted into a theme where the next theme publish removes it. A container gives you change control over measurement without a code deploy each time. If your release cycle is fast and your developers want to own the tags, that is a defensible choice, and the dataLayer specification is worth the same either way.
We have a container with years of tags in it. Do you start over?
Usually not. Restructuring in place inside a workspace keeps the existing version history, and that history is often the only record of when a number changed. Where a fresh container genuinely is the answer, it goes live in one cutover with the old snippet removed in the same release, because two containers running side by side means two of every tag and a duplicate of every conversion. Either way, nothing is deleted without a list you approve in one pass.
Start hereGoogle Tag Manager auditMost of this work is scoped from what the audit finds, and the $900 is credited against it.
Related services
Next step
Find out what this is costing you.
The Missing Conversions Audit is a fixed-price teardown of your GA4, Google Tag Manager, ad pixels and consent setup. Every gap logged, the top 10 fixed and validated. $900 flat. 5 business days.
A 15 minute call
- We look at your setup from the outside and say what we can already see.
- You get a straight answer on whether the audit is worth it for your account.
- If it fits, we book the slot and send the access checklist.
Opens the calendar here. Nothing loads from Calendly until you do.
Prefer email? hello@missingconversions.com