The short answer
Appliance EMT needed more repair bookings without burning budget on tire-kickers. A tight keyword negative list, a dedicated landing page per appliance type, and a 15-minute call-tracking feedback loop pushed ROAS from 1.8× to 3.2× in 90 days — without touching the ad spend ceiling.
Problem
Appliance EMT was running a single broad-match Google Ads campaign pointing to their homepage. Cost-per-click was high, bounce rate on paid traffic was 74%, and roughly 40% of booked calls turned out to be outside their service radius.
The real issue: one landing page can't speak to someone whose dishwasher is leaking and someone whose refrigerator compressor died. They're different jobs, different urgency levels, different search intents.
Approach
Audit first. I pulled 90 days of search term reports and found $1,200/month in wasted spend: competitor brand terms, DIY queries ("how to fix washer agitator"), and out-of-area modifier combinations.
Appliance-specific landing pages. I built six pages — one per major appliance type — each with a single headline matching the likely search query, a service guarantee, and a click-to-call above the fold. No nav, no distractions.
Call tracking as a feedback loop. Every phone number on every page got a unique CallRail number. I reviewed call recordings weekly, pulled the queries that drove bad calls, and added them as negatives within 15 minutes of identifying them.
Bid adjustments by device and time. Repair calls spike weekday mornings (appliance breaks overnight, person calls before work). I increased bids 30% from 7–10 AM on mobile and cut bids 50% after 8 PM when calls rarely converted.
Result
| Before | After (Month 4) |
|---|---|
| 1.8× ROAS | 3.2× ROAS |
| 74% bounce rate | 41% bounce rate |
| $2K/mo budget | $8K/mo budget |
| 40% out-of-area calls | 11% out-of-area calls |
ROAS held above 3× as we scaled spend 4×. The owner went from one technician to three within six months of the campaign start.
What I'd do differently
Start with call recording analysis on day one instead of month two. The bad-call data was sitting in CallRail the whole time — I left money on the table while I rebuilt the account structure first. Next time: parallel tracks.