The challenge
Williams Homes was marketing several new-home communities at once and needed end-of-funnel actions (viewings booked, forms filled, calls made) to accelerate without letting spend drift. The block was not demand. It was visibility. Reporting was too topline to act on: the team could see traffic and spend, but not which community, which query or which ad was producing appointments. When every community shares one blurry scoreboard, budget decisions turn into guesswork, and guesswork gets expensive at new-build prices.
The approach
We started with measurement, because ads optimised against fuzzy data just get efficiently wrong. First came a standardised GA conversion taxonomy: every meaningful action tracked the same way across every community, from viewing appointments and lead forms to phone contacts, email contacts and driving directions. Then we segmented performance by source, so Google Ads’ real contribution could be isolated from everything else claiming credit for the same sale.
With the scoreboard fixed, the media had something honest to aim at. We refined the ads structure around high-intent queries: the searches people make when they are close to booking a viewing, not idly browsing floor plans. A creative-insights workflow tied individual assets to conversion lift, so creative calls were made on receipts rather than taste. And granular automated monthly reporting kept each community’s performance visible, tying spend to appointments, leads, calls and directions instead of vanity clicks.
The results
Within three months the numbers moved exactly where they should: at the end of the funnel. Viewing appointments rose 20%, passing 550 booked. Lead forms climbed 15%, feeding more than 300 community leads. Phone contacts were up 15%, email contacts up 10%, and driving directions (the closest thing digital gives you to someone getting in the car) rose 7%. Multiple communities sold out on the back of it. None of that came from spending more for its own sake. It came from knowing precisely what the budget was buying, then buying more of what worked.