Insights

Why your marketing agency can't prove ROI (and what proving it unlocks)

A regional vet group I talked with last quarter was spending tens of thousands a month on marketing across SEO, paid search, and social. The agency's monthly report showed 1,847 "Lead" conversions, at a cost per lead in the low twenties. It looked great on the slide.

I asked one question: "How many of those 1,847 became patients?"

The room went quiet.

The agency didn't know. The vet group didn't know. The GA4 "Lead" event fired every time someone submitted a contact form, including the people pricing-shopping, the spam, the wrong-number locals, and the four people who already had three appointments booked and just wanted to ask if they could bring their cat to a dog appointment. Nobody had built the connection between that form submit and a real exam-room visit. Nobody had built the connection between an exam-room visit and revenue.

They were running a half-million-dollar-a-year marketing engine on top of a measurement layer that couldn't tell them which half was actually working.

This is not an unusual story. It's the median story.

They were running a half-million-dollar-a-year marketing engine on top of a measurement layer that couldn't tell them which half was actually working.

Why most agencies stop at GA4 default events

GA4's default install does about 20% of what you need. It fires page views. It fires a few automatic events (scrolls, outbound clicks, file downloads). And if your agency is on the more diligent end, they've added a custom "Lead" event on form submit. That's where most agencies stop.

Stopping there is rational, from the agency's side. The work to go further is technical. It requires a server, a data warehouse, a working knowledge of ETL, and a real conversation with the client's revenue system, which means a real conversation with the client's office manager, their PMS vendor, their accountant, and sometimes their bank. Most agencies aren't staffed to have those conversations. So the report stays at "Lead." Smart Bidding optimizes for "Lead." The dashboard shows "Lead." The check clears.

The problem is that "Lead" is not your business. Your business is closed revenue from new patients, minus the cost of acquiring them, minus the cost of serving them. The further you can move your measurement from "Lead" toward that real number, the better every downstream decision gets. The agencies that have done that work are the ones whose engagements don't churn at the twelve-month mark. That's not a coincidence.

The plumbing: server-side GTM, BigQuery, revenue-event tying

Here is the part that earns the word "moat." Three pieces, working together, owned by you.

Server-side Google Tag Manager (sGTM). Instead of every analytics tag firing in the user's browser (where ad blockers, browser privacy modes, and slow networks eat a big share of your data), events route through a server you control (often a small cloud-run container). Your client's first-party domain sends a single event to your server. Your server then routes that event to GA4, Google Ads, Meta, TikTok, wherever it needs to go. You get more data, cleaner data, faster pages, and a privacy story that holds up.

BigQuery as the warehouse. GA4 ships with a native, free-tier BigQuery export. Every event GA4 sees lands as a row in BigQuery with a timestamp, a user pseudo-ID, a session ID, and the full event-parameter payload. You can query it. You can join it. You can keep it forever, instead of relying on the GA4 UI's sampled, retention-capped reports.

Revenue-event tying. This is the part most agencies skip. You take the client's actual revenue data (from their practice-management system, their POS, their CRM, their accountant's CSV export, whatever exists) and you join it to the BigQuery event stream on a common key. Usually that's a hashed email, a phone number, or an internal customer ID. Once that join is in place, every marketing event in BigQuery can be tied, with a query, to a real dollar.

That's the loop. Cookieless server tracking → durable warehouse → real revenue join. Once it's running, the question "which channel produced which dollar?" stops being a guess. It's a query.

Once it's running, the question "which channel produced which dollar?" stops being a guess. It's a query.

What changes when you own the plumbing

Three things change immediately. None of them are subtle.

Bid strategies get smart. Google Ads' Smart Bidding is only as smart as the conversions you feed it. Feed it "Lead" (form submitters) and it bids hard for form submitters, including the wrong ones. Feed it "New Patient Visit" with a real first-visit value via offline conversion upload from BigQuery, and it bids hard for the people who become patients. Campaigns that make this switch can see CPA drop sharply in a couple of months without changing copy or creative. The platform was always able to learn. You weren't feeding it real food.

You can kill what's not working without an argument. When a channel isn't producing revenue and you've got the query to prove it, the conversation with the client (or with your own team) stops being a debate about "branding value" and becomes a decision. Sometimes the answer is still "keep running it," for reasons that aren't bottom-of-funnel. But you make that call deliberately, not because nobody could tell you the truth.

You stop paying for the same lead twice. Without revenue-event tying, you can't see when paid search, organic, and social are all claiming credit for the same patient. With it, the math gets honest. You don't fire channels. You rebalance them. Most clients are over-indexed on the channel that's easiest to measure (paid) and under-indexed on the channel that's hardest (organic + content + AI overviews). The data fixes that.

A multi-location vet — illustrative composite

The scenario below is an illustrative composite: a realistic picture of what the plumbing changes, not a single named client's results.

A six-location vet group, several million in annual revenue, spending in the low tens of thousands a month across organic, paid search, and paid social. Before plumbing: a "Lead" CPA in the low twenties, lead-to-patient close rate unknown, true CAC unknown, and Smart Bidding optimizing for form submits.

After plumbing (sGTM + BigQuery + a nightly join against the PMS revenue export), the picture that tends to emerge looks like this:

These are not exotic outcomes when the measurement layer gets fixed. They're the shape of the median engagement once the warehouse work is taken seriously.

What measurement unlocks

Here is the part nobody on the agency side wants to say out loud. If your agency can't prove ROI to the row level, your agency is being paid to perform an activity, not to produce a result. That's a sustainable business — for the agency. The one that proves its results is the one that pays you back.

The upside compounds three ways. First, the spend you reclaim: a large share of paid budget is often running on the wrong objective because of bad conversion data. Fix the data and that budget goes back to work. Second, the reallocation you unlock: dollars that can finally move to the higher-ROI channel instead of sitting in the wrong one. Third, and largest, the compounding you set free from content, SEO, and email, once you can measure them, you can justify them, and the budget stays in exactly the channels that compound.

The clients who fix the measurement layer don't usually spend more. They spend the same dollars on different things and watch those dollars produce more revenue. That's the unsexy truth.

Your agency is being paid to perform an activity, not to produce a result.

What to do this quarter

If you're paying an agency a real monthly number and the monthly report still shows GA4 "Lead" as the headline, there's a measurement upgrade waiting for you. It might not be your agency's fault, most weren't built for this. But it's yours to claim.

Three concrete steps:

You're going to spend the marketing budget anyway. Spend it with the lights on.

Andrew Dall is the CEO of Emaration, an AI-native marketing firm built around AI orchestration and measurement that survives an audit. He's a disabled U.S. Coast Guard veteran with twenty-one years in IT, cybersecurity, and MSP leadership. Previous work includes 1,000%+ organic traffic growth at MeetGreen and revenue growth from $2M to $5M at Upward Technology. B.S. Cybersecurity, Oregon Institute of Technology, cum laude.

See your measurement gap in writing

Onboarding shows you exactly which dollars are working.

Onboarding — our automated six-layer audit and setup — is normally $1,000, and it's waived when you join via the waitlist. It includes the measurement-stack pass that tools can't run: which channels are over-credited, which are under-credited, and what the warehouse build would cost. The audit and your 30 days of monitoring are delivered and yours to keep, either way. Membership starts at $199/month, month-to-month — email human@emaration.ai to start today.

Join the waitlist — free, no card →Back to Insights