The challenge
The client operates 11 HVAC service trucks across Houston, Sugar Land, and The Woodlands. By the time they came to us, they had been running Meta Ads for 18 months with two prior agencies, both percentage-of-spend retainers. Spend had climbed to $48,000 per month. The dashboards said ROAS was healthy. The operations team said it didn't feel that way.
The first audit confirmed both were partially right. Tracked conversions on Meta showed ~140 booked jobs per month at a $340 cost per job. Their service-titan job database showed 92 attributable jobs that month at an actual cost per booked job of $522. The gap, 30%+ of reported conversions did not exist in the operating system, had compounded for over a year.
Worse: 71% of monthly spend ran through six "evergreen" campaigns that the prior agency had been afraid to touch. Three were broad-targeting awareness sets with no conversion event firing. One was a remarketing pool that hadn't been refreshed in 9 months and was burning $4,800/month on the same 12,000 stale users.
What we found
Our two-week audit produced a 23-page fix list. The headlines:
- Measurement was lying. Meta Pixel was firing on phone-call clicks, not actual booked jobs. CAPI had been installed but pointed at a Zapier flow that broke during a ServiceTitan integration update 7 months prior.
- Campaign structure was sprawl. 34 active campaigns. 142 active ad sets. Most had been launched, then forgotten.
- Creative was stale. The top 5 spending ads averaged 18 months old. Frequency above 7 in their core retargeting pool.
- Landing pages were generic. One landing page handled every service category and every geography. Mobile load time hit 6.2s.
Approach
We sequenced the fix so the operating numbers would move before the team had to defend any decisions internally.
Measurement rebuild
Re-installed CAPI through Stape with full server-side event mapping. Connected ServiceTitan's CRM to GA4 via offline-conversion uploads. Validated 100% of booked jobs were firing within 24 hours.
Campaign consolidation
Killed 27 of 34 active campaigns. Consolidated the remaining 7 into 3 structured around the three highest-LTV service lines: replacement, repair, and maintenance plan.
Creative cadence
Briefed and shipped 12 new creative concepts: 4 weather-triggered ads (heat-wave + cold-snap), 4 social proof ads built from real ServiceTitan review data, 4 explainer ads on maintenance plan economics.
Landing page rebuild + CRO
Built 3 dedicated landing pages (replacement, repair, maintenance) with geo-aware copy. Shipped 4 A/B tests across the funnel, the maintenance plan offer test alone lifted attach rate from 23% to 38%.
Execution
The measurement rebuild was the most important week of the engagement and the one the client found hardest to greenlight, because it required two weeks of "no campaign changes" while we instrumented the backend. We held that line because every campaign decision afterward depended on knowing what was real.
By week 6, the new structure had been live long enough that we could read true cost per booked job, not Meta-reported conversions. The data revealed something the prior agencies had missed: the maintenance plan attach offer, which the client treated as a footnote, was their highest-LTV acquisition surface. Maintenance plan subscribers had a 12-month gross-margin LTV roughly 4.1× a one-off replacement customer.
We rebuilt the creative cadence around that insight. Of the 12 concepts we shipped in weeks 5-8, 4 were maintenance-plan-led. By week 9, the maintenance plan campaign was the highest-ROAS surface in the account, and we re-allocated 40% of total spend toward it.
$522
What the operations system actually showed before engagement
$87
Tracked through full CAPI + offline-conversion stack at week 12
Results
After 90 days the operating dashboard showed numbers that finally matched the operating reality. Cost per booked job dropped from $522 to $87, most of the move came from killing wasted spend and pointing the budget at the campaigns that were always working but were buried in the noise. Tracked revenue moved from $106K/month to $340K/month while spend grew only 22% over the same window.
(See the full headline-results grid at the top of this page.)
What we learned
The instinct in a high-spend account is to fix creative first. The right instinct is to fix measurement first. Three months in, we ran a counterfactual exercise with the founder, if we had only changed creative and left the measurement broken, the dashboards would have shown a 25-30% improvement that the operations team would have correctly disbelieved. The trust ceiling on every subsequent decision is determined by whether the dashboard tells the truth.
Two specific operating decisions came out of this engagement that the client has kept:
- Weekly Friday Loom under 10 minutes is now the only reporting cadence. No monthly slide decks.
- Maintenance plan attach is the north-star metric, not ROAS. The team scoreboards it daily.
The measurement rebuild was the boring two weeks that paid for every quarter since. We can finally make the next call without flying blind.