The Google search campaign that went from a 3.6% to a 12.8% conversion rate.
A one location roofing company with a crew of 6 to 8, almost all its work from referrals. I ran Google search ads and Local Services Ads for him across eight central PA counties. Halfway through I cut down the landing page and changed the copy to highlight what his best customers actually chose him for. Same campaign, same keywords, before and after.
Conversion rate here means calls and form fills divided by clicks, from the Google Ads dashboard. Search campaign only, Local Services Ads not included.
How the project ran
His own metal roofing ads
He ran Google Ads himself for metal roofing and lost a few hundred dollars on irrelevant clicks.
Learning phase
I ran the search campaign with the longer landing page. 8 qualified leads, 3.6% conversion rate.
Main run
Shorter landing page and new headline. 21 qualified leads, 12.8% conversion rate.
Pauses and end
He paused the ads for about two weeks, restarted, then paused again about three weeks later. The project ended.
Where he started
Before I came in, almost every job at this roofing company came from referrals and local name recognition. He already ranked first in local search in his hometown, but the hometown was small and lower income, so the local demand ran out.
Some weeks the crew of 6 to 8 had nothing scheduled while payroll kept running. He wanted to reach the rest of the surrounding counties.
Before September 1, he had tried Google Ads once, on his own, for metal roofing. It wasted a few hundred dollars on irrelevant clicks, but he still believed ads could work if they were done right.
What was in the way
Too few searches. Even after widening from his home county to 8 counties, there were not enough people searching for a roofer for search ads alone to fill his schedule. That is why I added Local Services Ads.
A budget too small for the clicks. The search budget was capped at up to $100 a day. At a $22 average cost per click, search averaged about 3 clicks a day.
No view of where the money went. His own metal roofing campaign was matching questions like "how" and "what," and he never saw those search terms, so he could not tell why it failed.
What I changed on November 1
This compares two periods of the same Google search campaign for his roofing replacement and repair work. The keywords were identical in both. The only known change was the landing page that ads sent people to, and its headline. Both changed on the same day, so I cannot say which one deserves the credit.
A longer landing page
Headline: "Asphalt Shingle Roofing"
Page: longer, with content that did not match what people had searched.
Keywords: near me searches such as "roof replacement near me," mostly exact match.
A shorter page with one path to an estimate
Headline: "The Only Central PA Roofer With The Owner On-Site Every Job"
Page: cut down, mobile friendly, and highlighting the transparent, fully itemized estimate process.
Keywords: the same near me searches, mostly exact match.
Local Services Ads ran alongside the search campaign the whole time, at roughly $60 a day, to cover the volume search could not reach. I did not have per page tracking, so the page and headline are the most likely cause of the jump.
What the ads produced
Spend and leads by channel, from the Google Ads dashboard and the Local Services Ads dashboard. A qualified lead is a genuine call, form fill, or LSA message, judged with the owner each week. Ghost and scam leads were removed.
Average search cost per click in Nov and Dec was $22.06. I do not know how many of the 35 LSA leads became jobs.
Jobs and revenue from all 29 qualified search leads, Sep 1 to Dec 22
On average, their sales reps closed general roofing estimates at a steady 33% from September through December, and about two thirds of those jobs were replacements and one third repairs. I applied that close rate to all 29 qualified search leads and used his average tickets: $13,500 for a replacement and $1,150 for a repair. I did not see invoices, so treat this as an estimate.
What did not go well
On December 22 the owner asked me to pause the search ads because he could not fund the ad budget. The pause lasted about two weeks, in the slow season.
Search brought in just 1 qualified lead in about three weeks. He then paused the ads again, and the project ended. The Local Services Ads kept running at a lower budget.
The main run was about 52 days. I cannot tell you how the campaign would have looked at month six.
The owner supplied close rate and job tickets. I unfortunately was not given invoice trails.
What I do differently now
This project showed me where a Google Ads project for a roofer breaks. Here is how I set up new projects.
A budget that fits the clicks
The initial daily budget is the average cost per click times 5 clicks a day. That can be held flat for 5 to 6 months, or slowly bumped up as time goes on for scale.
Incentive alignment
I no longer get paid per lead. I typically charge $500 to $1,000 upfront for setup, then suggest a 3% net profit share. That said, the performance fee can be adjusted to fit what works best for the business.
Markets with enough searches
I check search volume in an area before reaching out. This project's rural area showed me how limited a thin market is.