Plumbing · Sun Belt metro
$3,000 a month in ads, landing on a page that lost three buyers in four.
The ads were fine. The site behind them was the problem, and nobody in the building could say which half of the budget worked.
Read this first
A public teardown, not a client.Everything here comes from publicly visible data — rankings, load times, site structure and response testing. Names are withheld, identifying details are altered, and the fixes are what I would do first if they called.
The setup
A plumbing company in a fast-growing Sun Belt metro, spending about $3,000 a month on search ads. I want to say this clearly before taking anything apart: the ads were competently run. Sensible keywords, tight match types, ad copy that read like a human wrote it. If you audited the ad account alone, you’d shake the manager’s hand.
This teardown is about what happens one click later, because that’s where the budget actually goes to die. In emergency home services, the paid click is the easy half of the transaction — the searcher has a burst pipe, high intent and a credit card. Everything that matters happens in the ninety seconds after they land, and those ninety seconds are the part nobody in this account had ever tested on a phone.
Following the click
Every ad — emergency repair, water heaters, repiping, drain cleaning — landed on the same generic homepage. On a 4G connection, that page took 9.4 seconds to become usable. It opened with a stock-photo carousel, and the only path to a quote was a form with eleven fields that wanted a street address before it would surface a phone number.

And because there was no call tracking and no per-campaign landing pages, nobody in the building could say which keywords produced booked jobs. The budget was being steered by clicks — which is to say, by guesswork with a dashboard.
The arithmetic nobody ran

That’s not an advertising problem — it’s a website problem wearing an advertising costume. The bitter part: fixing it costs a fraction of one year’s waste, and you pay it once. The waste renews monthly, automatically, forever, and it compounds in a second way — every month of unusable data is a month the account can’t learn which keywords actually book jobs.
Why does this survive? Because everyone involved is looking at a number that flatters them. The ad platform reports clicks, and clicks are plentiful. The web company reports uptime, and the site is up. The owner sees the phone ring sometimes and assumes the machine works. The only number that would expose the leak — cost per booked job, by campaign — doesn’t exist in any of their dashboards, because nobody was ever asked to build it. A well-run competitor in the same metro converts paid clicks at three to four times this rate, spending the same money. That’s the whole competitive gap, and it has nothing to do with who plumbs better.
What I’d fix first
- One landing page per service, matched to the ad that bought the click. Emergency traffic gets an emergency page with a phone number as the hero — not a carousel.
- Call tracking with per-campaign numbers, so the budget can finally be steered by booked jobs instead of clicks.
- Cut the form to three fields — name, phone, problem — and print the phone number in plain sight for everyone who’d rather dial.
- Get mobile load under 2.5 seconds. At this spend, page weight is a line item with a dollar figure on it.
What I would tell you to check
- Load your own landing page on your phone, on cellular, not on the office wifi. Count the seconds out loud. It’s more uncomfortable that way, which is the point.
- Count your form fields, then ask which ones your intake team actually uses on the first call. Delete the rest.
- If you spend on ads and can’t name your cost per booked job — not per click, per job — the tracking gap is the first fix, before any creative work.
- Check where each ad group lands. If more than one lands on your homepage, you’re paying specialist prices for a generalist page.
Want this pointed at your site?
The audit finds exactly this kind of thing — the leak everyone walked past because nothing looked broken. Twenty-seven checkpoints, your data, plain English.
Start the Audit