Analytics & Tracking
Numbers you can quote in a meeting
Three dashboards disagreeing is not a mystery, it is a measurement problem, and it is usually one event firing twice or not at all. We would rather hand you one number you can defend than four you have to apologise for.
The problem, as we usually find it
What is actually going wrong on most of the sites we are called into — before anything about what we would charge.
Three dashboards disagreeing is not a mystery and it is not normal. It is a measurement problem, and it is usually one event firing twice, or not at all, or firing on a page nobody reaches.
The cost is not the confusion. It is that every decision downstream — which campaign to scale, which page to fix, which channel to cut — is being made against a number nobody can defend.
We would rather hand you one number you can quote in a meeting than four you have to apologise for.
What the work covers
Everything below is included. If something is not on this list, we quote it separately rather than leaving you to find out later.
GA4 configured properly
Events, conversions and audiences set up deliberately rather than left on automatic collection.
Google Tag Manager
One container, documented, so the next person can read what fires and when.
Ecommerce tracking
Purchase, value and items verified against real orders in the admin.
Form and call tracking
Leads counted once — a surprising number of setups count them twice or not at all.
Reconciliation
Where Analytics, Ads and the store disagree, and by how much, stated in writing.
Enhanced ecommerce events
View item, add to cart, begin checkout and purchase, with values attached and firing once.
Cross-platform reconciliation
GA4, Google Ads, Meta and your store lined up so you know how far apart they are and why.
A written measurement plan
What fires, where, and what each number means — the document that stops this recurring in two years.
What we have actually found
Real numbers from real accounts. We never publish client names, so the businesses are described rather than identified — the figures are exactly as we found them.
2x
one lead event was counted twice because a plugin already sent its own
0
conversions reaching the bidding on an account whose only action was a pageview
3
sources disagreeing on the same month — resolved to one number the client could quote
22
conversion actions recording nothing for 30 days, because the tag on the site named a different Ads account
0
scripts actually executing for logged-out visitors on a site whose tag was provably in the HTML
The detail that decides it
The part most quotes leave out, because it takes experience rather than a price list.
What we find in almost every account we inherit
Events counted twice. A form plugin sends its own conversion event and someone has also added a manual one. Every lead is now two leads, and the cost per lead in the ad platform is half what it truly is.
Conversions that cannot fire. A conversion action created as an upload-only type, waiting forever for a file that no one will ever upload. It looks configured. It can never record anything.
Pageviews wearing a conversion's name. The most damaging one, because Smart Bidding will faithfully optimise toward it and the campaign will look like it is working the whole time.
Verified against real orders, not against the debugger
The tag debugger tells you an event fired. It does not tell you the value was right, that it fired once, or that it corresponds to an order that actually exists.
So verification is done against reality: place a real transaction, find it in the admin, find it in GA4, find it in the ad platform, and confirm the value matches in all three. It takes an hour and it is the only proof worth having.
For lead generation the same applies — submit the form, receive the email, and check exactly one conversion was recorded.
One documented container instead of a decade of tags
Most Tag Manager containers we open contain tags nobody remembers adding, several of which belong to agencies that stopped working with the client years ago and are still collecting data.
We inventory what is firing, decide what stays, and rebuild to a plan you can read. Where the existing container is salvageable we fix it; where it is a decade of undocumented accumulation we rebuild and explain why.
You get a one-page map: what fires, where, and what each number means. That document is what stops this happening again in two years.
The tag on your site may belong to somebody else's account
An account had spent ₹2,670 across thirty days and recorded zero conversions on all twenty-two of its conversion actions — including store visits and clicks-to-call, which need no website tag at all to work.
The tag rendering on the site was AW-11234019247. The account's own tracking id was 10848327728. A different account. Every event that site fired for months went somewhere nobody was reading.
The interface never warns about this, because everything genuinely is configured — the actions exist, they are enabled, several are primary. They were created in the right account. Only the tag points elsewhere, and a "tag not detected" warning never appears while a valid tag for *some* account is present on the page.
Two commands settle it in under a minute, and they are now the first thing we run on any account reporting no conversions: read the account's own tracking id, then read the id actually printed on the homepage, and compare them.
Your speed plugin can quietly switch your tracking off
A guest-optimisation setting on one common caching plugin applies a hardcoded preset to every logged-out visitor and ignores the exclusion list entirely. Your analytics tag is rewritten into an inert placeholder — still visible in the HTML, never executed.
What makes it slow to find is that the exclusions save correctly and do nothing. You add the tag to the do-not-defer list, the setting persists, and the behaviour does not change.
It gets worse in two directions. That plugin treats Google's own crawler as a guest, so Google's tag detector, Lighthouse and every speed-testing tool are served the crippled page — which surfaces in Google Ads as "no tag found" on a site where the tag is provably present, and reads like a detection delay. It is not. And a first-time buyer is a logged-out visitor too, so the purchase event on the thank-you page may never fire at all.
A firewall rule can do the same thing from the other side. We have seen one that blocked the <script> element itself rather than anything about the tag inside it — the same code passed once it was expressed without that element. So when a tag is missing, we check what the page actually executes, not what the page contains.
Reconciliation, stated in writing
GA4, Google Ads, Meta and your store will never agree exactly. Different attribution models, different windows, different definitions of a session. That is expected.
What is not expected is nobody knowing the size of the gap. We document where they diverge and by how much, so you can read any of them correctly rather than trusting whichever is most flattering.
Consent handling is part of this too, and it changes what gets collected far more than most people expect — often the real reason a dashboard suddenly reports less traffic.
What we need from you
Short, and worth reading before you start. What delays this work is almost never the work — it is waiting on access or a decision.
Admin on GA4 and Tag Manager
Edit level. We cannot rebuild a container we can only look at.
Website or theme access
Some events cannot be attached from the tag manager alone and need a template change.
Ad account access
Google Ads and Meta, so conversions can be verified where the bidding actually reads them.
One real test transaction
Or a real form submission. Verifying against the debugger proves an event fired; verifying against an order proves it was true.
What you actually want to measure
The two or three numbers you would defend in a meeting. Everything else is configured in service of those.
Whether this is right for you
We would rather lose the enquiry than take work we would do badly, so the right-hand column is as honest as the left.
This is for you if
- Your dashboards disagree and nobody can explain why
- You are optimising ad campaigns against conversions you do not fully trust
- You inherited a Tag Manager container nobody understands
- You want a documented setup rather than a black box
This is not for you if
- You want ongoing monthly reporting only; this is a setup project
- You cannot give admin access to Analytics, Tag Manager and the ad accounts
- You want us to make the numbers look better rather than be correct
- You are happy with the current numbers and only want a dashboard built on top
How it runs
Four steps, in this order, every time.
- We inventory what is currently firing, including the tags nobody remembers adding.
- GA4 and Tag Manager get rebuilt to a documented plan.
- Every conversion is verified against a real order or a real enquiry.
- You get a one-page map of what fires, where, and what each number means.
The Stack We
Work In Every Day
Every platform below is one we build on, maintain, rank and report from — not a logo wall.
Questions
Usually yes. Setup and verification is a project. We only stay on if you want ongoing reporting.
Whichever is cheaper. If the container is readable we fix it; if it is a decade of undocumented tags we rebuild and tell you why.
Yes, including consent mode, which changes what gets collected far more than most people expect.
Want free stats on your site first?
Send us the URL. We pull the numbers from your own accounts and tell you what is wrong before there is any quote, and before there is any contract.
No pitch deck, no obligation. Bring your URL and we will look at it together.