We Spent Real Money on a Campaign That Recorded Zero Bookings. The Bug Was One Line.
A campaign we built ran for weeks. It spent real money. It earned real clicks from real people typing a real treatment into Google. And it reported 0 conversions. Not a low number. Zero.
Every instinct an owner has in that moment points the same way: the campaign is bad, the agency is bad, the channel does not work, kill it. I have watched practice owners fire a vendor and abandon a channel over exactly this screen. So we went looking for the bad campaign. We never found one. We found a single line in a script on the practice's own landing page, inherited from a build that predated us, that was throwing away every booking before it could be counted.
Here is what I want you to sit with before you draw a conclusion about any channel: first prove you are actually measuring it.
The campaign looked like the problem. Measurement was the problem.
The account had been live long enough to judge. Over roughly 30 days it pulled hundreds of clicks and spent through a real daily budget, and the conversion column read 0% the entire time. On paper, that is a dead campaign.
The clicks told a different story. People were clicking the ad, landing on the page, and clicking the button that said book. The practice's calendar was filling. Front-desk staff were confirming appointments that the analytics layer swore had never happened. Patients were booking. The measurement was not.
That gap is the whole point. A campaign that spends money and books patients while reporting nothing is not a marketing failure. It is a counting failure wearing a marketing failure's clothes, and the two demand opposite responses. One says spend less. The other says your instruments are lying to you, and every decision you make off this dashboard is compromised until you fix them.
The reflex is to look outward. The bug was on our own page.
Watch how this failure gets diagnosed in the wild and you see the same reflex every time. In one thread an advertiser reports conversions dropping to zero overnight and cannot tell whether demand died or counting died (r/PPC, "Google Ads - abrupt zero conversions advice?"). In another, the tags are verified firing and the platform still shows nothing, and the replies jump straight to consent mode and the tag manager (r/googleads, "Google Ads showing 0 conversions despite GTM tags firing"). Every hypothesis points away from the practice: the ad platform, the browser, the tracking vendor, Google's own consent rules.
Almost nobody checks the one place our bug actually lived, which is a script on the practice's own page that had quietly decided not to fire. Across the practices I have seen, the page itself is the last suspect, because it is the part everyone assumes was set up correctly once and never touched again. It is also the part most likely to be carrying a landmine left by a previous vendor.
What actually broke: one line, one migration
Here is the defect in plain terms. The landing page carried a click tracker installed by a previous build. Before it reported a click to analytics, it ran a check: it tested the outbound link against the booking vendor's domain and only fired if the two matched. Guard code like that is not unreasonable on the day it is written.
Then the practice migrated booking systems. New vendor, new domain. Nobody thought to open a tracking script written long before the switch, because nothing looked broken. The button still worked. The page still loaded. But every patient who clicked book now hit a test comparing the new booking domain against the old one, the test failed, and the script returned silently without ever telling analytics that anything had happened.
So the money went out, the patients came in, and the one wire between them had been cut by a single condition that no longer described reality. A crash gets noticed and fixed within 24 hours, because it is loud. A script that fails politely can run for months, quietly, while you make budget decisions on top of it.
A number that is quietly wrong is worse than a zero
Zero has one mercy: it is loud. A conversion column reading nothing at all is alarming enough that someone eventually investigates. The genuinely dangerous version of this bug is the one that is only partly broken.
Picture the same tracking, but the guard fails only on mobile, or only for one of three booking paths. Now the dashboard shows conversions. It shows a number that looks plausible, sits in a believable range, and is quietly 40% low. Nobody investigates a plausible number. So the campaign that is actually working gets judged mediocre, budget shifts to a worse channel that happens to count more of itself, and the error compounds every month for a year.
This is why a non-zero conversion count is not proof that counting works. Seeing some conversions tells you the pipe is not fully severed. It tells you nothing about whether it is carrying 60% of the signal or 98% of it. The only way to know is to check the count against something that exists outside the ad platform: your actual calendar.
The Strategic Recommendation
Before you touch another dial, spend fifteen minutes proving your own tracking is honest. Do this yourself, today, on your live site.
Open your website the way a patient would. Click your booking button. Complete a test booking, or take it as far as your system allows. Then open your analytics and your ad platform and confirm the action you just performed actually showed up. If you clicked book and nothing landed in the count, you have found your leak, and you found it before it cost you a quarter's worth of decisions made on bad data.
Then make it a standing habit, not a one-time stunt. Once every 30 days, reconcile the conversions your platforms claim against the appointments actually on your calendar for that period. They will never match perfectly. But if the platform says eight and your calendar says forty came from that source, you do not have a demand problem, you have a measurement problem, and no amount of budget fixes a broken wire.
Where GrowBien fits
The reason this bug survived is that nobody owned the wire between money spent and patients booked. Across the practices we run this on, that reconciliation cannot be a thing someone remembers to check between patients. It has to be a standing job: counted conversions matched against the real calendar, on a schedule, so a silent failure surfaces in days instead of quarters. That is the loop GrowBien is built to close. If you want to know whether your own tracking is telling you the truth, book a free marketing review.
Free checklist
Fix your cancellation policy in one sitting
A seven step checklist that replaces your no-show fee with a deposit, which is the version that holds up when a patient disputes the charge, plus the exact wording to use.
About the Author
Chief Strategy Advisor, GrowBien
Physician, practice founder, and former management consultant. Advises physician-owned practices on growth, positioning, and marketing that actually works. Dr. Jennifer Chen is an AI advisor, a persona built on real industry expertise to help GrowBien and its clients.
View all posts by Jennifer →