How We Generated $180k in Revenue for a Roofing Company with $12k in Ad Spend
A full breakdown of the exact Google Ads strategy, landing page structure, and follow-up sequence that turned a slow quarter into a roofing company's best year on record.
In Q3 of last year, a Northern Colorado roofing company came to us with a problem most contractors know well: summer was ending, storm season was slowing down, and the pipeline was drying up faster than expected. They had a great crew, a spotless reputation, and 325+ five-star Google reviews. What they didn't have was a reliable way to generate leads on demand.
Over the next 90 days, we spent $12,400 of their money on Google Ads. That investment generated $181,000 in closed revenue — a 14.6× return. This is the full breakdown of exactly how we did it.
I want to be upfront: not every roofing campaign produces a 14× ROAS. Results like this require the right market conditions, the right offer, and — critically — the right infrastructure on the landing page and in the follow-up process. We'll cover all three. Understanding why it worked will help you replicate the parts that apply to your situation.
Why most roofing ad campaigns fail
Before we talk about what we did, it's worth understanding why most home services ad campaigns produce disappointing results. We've taken over campaigns from other agencies and from business owners running ads themselves, and the same mistakes appear over and over.
The most common mistake is sending ad traffic to a general website homepage. A homepage is designed to introduce your company — it's not designed to capture a lead in crisis mode at 11pm after they noticed a leak. When someone clicks a Google Ad for "emergency roof repair Loveland CO," they need to land on a page that immediately confirms: yes, this is exactly what you need, here's why we're the right call, here's what happens next. A homepage doesn't do that.
The second most common mistake is running broad match keywords without negative keyword lists. Broad match on "roofing" will spend your budget on searches like "roofing nails price" and "roofing memes" before lunch. We've seen campaigns where 60% of spend was going to completely irrelevant searches. The cost-per-lead on these campaigns looks terrible because the denominator is bloated with wasted clicks.
The third mistake — and the one that costs the most money — is slow lead follow-up. The data on this is unambiguous: the probability of qualifying a lead drops by 80% if you wait longer than 5 minutes to respond. Roofing is a high-urgency, high-consideration purchase. Someone who clicks your ad and fills out a form is not comparison shopping for the next two weeks. They need help now. If your follow-up is a phone call 4 hours later, you're handing the job to whoever called them back in 10 minutes.
"The probability of qualifying a lead drops by 80% if you wait longer than 5 minutes to respond. Someone who fills out your form at 9pm needs a callback — not an email drip sequence."
The campaign structure we built
We structured the Google Ads account around three distinct intent categories, each with its own ad groups, keywords, and landing pages. This is critical — the intent behind "roof replacement cost" is completely different from "emergency roof repair," and they require different messaging and different offers.
Budget allocation: 45% of total spend
Keywords targeting immediate need: emergency roof repair, roof leak repair, storm damage roof, roof tarp service. These searches come from people with an active, urgent problem. The offer: same-day inspection, 24/7 availability, direct phone number prominently displayed. CPC was higher ($18–32) but close rate was significantly better because the intent was so strong.
Budget allocation: 40% of total spend
Keywords targeting planned replacement: roof replacement Loveland CO, new roof installation cost, best roofing company Northern Colorado. These are homeowners who know they need a new roof and are evaluating options. The offer: free inspection + written estimate, financing available, local reviews front and center. Lower urgency but higher average job value ($8,000–$18,000).
Budget allocation: 15% of total spend
Keywords targeting homeowners who aren't sure they have a problem: roof inspection Loveland, hail damage roof check, how old is my roof. The offer: free no-obligation inspection. Lower close rate but higher volume, and it seeded the pipeline for the following 60 days as inspections converted to replacement jobs.
Each campaign fed a dedicated landing page — not the homepage, not the general services page. Three campaigns, three landing pages, each speaking directly to the intent behind the search.
The landing page anatomy
The landing pages we built followed a conversion-optimized structure that we've refined across dozens of home services clients. The goal of every element on the page is to move someone from "I'm considering options" to "I'm ready to call."
| Section | Purpose | What we included |
|---|---|---|
| Hero (above fold) | Establish relevance in 3 seconds | Headline matching the ad, subheadline with location + social proof number, click-to-call button, photo of completed local job |
| Trust bar | Defuse skepticism immediately | Google review rating + count, years in business, BBB badge, license number visible |
| Problem acknowledgment | Make them feel understood | 2-3 sentences naming the exact problem they searched for, confirming we solve it |
| Process section | Reduce friction by explaining what happens next | 3-step graphic: Call → Free Inspection → Written Quote. Eliminates the fear of the unknown |
| Social proof | Third-party validation | 3 specific Google reviews from similar jobs, with reviewer name and neighborhood |
| Offer + CTA | Give them a reason to act now | Free same-day inspection, limited availability messaging, large phone number + form |
| FAQ | Handle objections without a sales call | 5 questions: insurance claims, timeline, financing, what inspection includes, service area |
The key insight is that the page is not trying to close a sale. It's trying to get a phone call or a form submission. Every design decision — button placement, color contrast, text length — was made in service of that single conversion event.
We also ran the page through a 5-second test with new users: if someone can't tell within 5 seconds what you do, who you serve, and what they should do next — the page fails. Our landing pages passed. Most roofing websites don't.
"The landing page is not trying to close a sale. It's trying to get one action: a phone call or a form submission. Every element exists to serve that single goal."
The follow-up sequence that closed the jobs
The ads and the landing page generated the leads. The follow-up sequence is what converted them into $181,000 in revenue. This part of the system is almost always underbuilt by contractors who run ads, and it's where most of the money gets left on the table.
We implemented a 3-channel follow-up sequence triggered immediately on form submission:
- Minute 0–2: Automated SMSThe moment a form is submitted, an automated text message fires to the lead's phone number. Not a generic "thanks for submitting" — a personalized message: "Hi [Name], this is [Company] — we just got your inspection request. Someone from our team will call you in the next 10 minutes. If you need immediate help, call us directly: [number]." This sets an expectation and keeps the lead warm while the human is notified.
- Minute 5–10: Live phone callThe lead notification goes to the owner's phone immediately. The goal of this call is not to sell anything — it's to schedule the inspection. Get on the phone, confirm the problem, and book a specific time slot. Scripts matter here: we wrote a 90-second call script focused entirely on confirming availability and locking in a time.
- Hour 1: Email confirmationAfter the call, a confirmation email goes out with the inspection date/time, what to expect, a photo of the technician who will show up, and a link to leave a Google review after the job (planted early, harvested after completion). This email had a 78% open rate.
- Day before inspection: Reminder SMSA reminder text the evening before the inspection with the technician's name, estimated arrival window, and a direct number to reschedule if needed. No-show rate dropped to under 8% with this in place.
- Post-inspection: Same-day estimate deliveryThe written estimate was delivered on-site or by email within 2 hours of the inspection. Every day between inspection and estimate delivery that passes is an opportunity for the homeowner to get competing quotes. We closed 67% of jobs where the estimate was delivered same-day.
The numbers, broken down
Here's the full attribution breakdown for the 90-day campaign:
| Metric | Value |
|---|---|
| Total ad spend | $12,400 |
| Total clicks | 1,847 |
| Average cost per click | $6.72 |
| Landing page conversion rate | 11.3% |
| Total leads generated | 209 |
| Cost per lead | $59.33 |
| Leads contacted within 5 min | 94% |
| Inspections booked | 148 (71% of leads) |
| Estimates delivered | 141 |
| Jobs closed | 38 |
| Lead-to-close rate | 18.2% |
| Average job value | $4,763 |
| Total revenue closed | $181,000 |
| ROAS | 14.6× |
The 11.3% landing page conversion rate is roughly 3× the industry average for home services (typically 3–5%). That delta alone — the difference between a generic homepage and a purpose-built landing page — accounts for most of the performance gap between this campaign and what most roofing companies experience.
What you can take from this
You don't need to be a roofing company to apply this framework. The underlying structure — segmented campaigns by intent, dedicated landing pages, immediate multi-channel follow-up — works for any local service business with a high average job value.
The three things that had the most impact, in order:
- 01Dedicated landing pages matched to ad intent — stop sending paid traffic to your homepage
- 025-minute follow-up — build the notification and response system before you run a single ad
- 03Negative keyword hygiene — audit your search terms report weekly for the first month and add negatives aggressively
If you're running Google Ads and not seeing returns like this, the problem is almost certainly in one of those three areas. Fix the infrastructure before you increase budget.
Ready to put this
into practice?
We work with local businesses across Colorado and beyond to build marketing systems that actually grow revenue. Let's talk about your situation.