Should a roofing company put its next dollar into Google Ads, door knocking, Meta, or a better website? Every roofing marketing guide on the first page of Google answers that with a list of 12 to 92 ideas, which is another way of saying they don’t know. We’ve managed ad accounts for roofers in storm markets and retail markets, and the honest answer is that the right plan depends on four things about your business. Get those four answers right and the channel choice mostly makes itself.
Are you a retail roofer or a storm roofer?
This is the question almost nobody asks first, and it changes everything downstream.
A retail roofer sells replacements and repairs to homeowners who decided on their own that they need a roof. The homeowner is paying out of pocket (or financing), they’re comparing two or three bids, and the sales cycle runs anywhere from a week to three months. Marketing for this business is about being found at the moment of research and looking more trustworthy than the other two bids.
A storm roofer sells insurance-funded replacements after hail or wind events. The homeowner often doesn’t know they have damage yet. Speed and territory matter more than search rankings, because the whole market opens and closes in a six-week window. Marketing here is about getting into the neighborhood before the other 40 trucks do, and about looking legitimate enough that a skeptical homeowner lets you on the roof.
Most companies do some of both. But one of them pays the bills, and that’s the one your marketing should be built around. We’ve seen storm-heavy roofers spend $6,000 a month on Google Ads for “roof replacement” searches and wonder why the leads were all retail shoppers wanting three bids. The ads worked fine. They were just built for the wrong business.
Your average ticket sets your cost-per-lead ceiling
Before you pick a channel, do this math. It takes two minutes and it’ll save you from the most common roofing marketing mistake, which is judging a channel by cost per lead instead of cost per job.
Say your average replacement is $14,000 with a 30% gross margin. That’s $4,200 in gross profit per job. If you close one in four qualified leads, you can afford to pay up to $1,050 per lead and still break even on the first job. Most roofers we talk to are shocked by that number because they’ve been told a “good” cost per lead is $75.
Here’s why the number matters. A $75 lead from a shared lead-gen platform that closes at 8% costs you $937 per job. A $220 lead from your own Google Ads campaign that closes at 25% costs you $880 per job, and you’re not fighting four other roofers for the same homeowner. The cheaper lead was the more expensive one.
Repairs flip this. If half your volume is $800 repair tickets, you can’t afford $220 leads for those, and you should route repair traffic to organic and Google Business Profile instead of paid search.

Run the math for your two or three main job types separately. For most roofers it comes out to paid channels for replacements and organic plus referral channels for repairs. The gutter cleaning you only do as a favor gets no budget at all.
Timing: the calendar does half the work for you
Roofing demand isn’t flat, and pretending it is wastes money on both ends of the year.
In most of the country, search volume for roof replacement climbs from March, peaks between May and September, and drops off a cliff after Thanksgiving. Storm markets stack a second spike on top of that, usually within 72 hours of a named event. If you’re reading this in early September, you’re in the last strong stretch of retail demand. The companies we see doing well right now are spending more than they did in June, not less, because competition thins as smaller shops run out of budget and the homeowners still searching are the ones who need a roof before winter.
Two timing rules we’d put money on:
- Build your Google Ads campaigns, landing pages, and tracking in the slow season. January and February are for setup and testing at low budgets. If you launch a new campaign in May, you’ll spend the best six weeks of the year teaching the algorithm what a lead looks like.
- Keep something running year-round, even at $30 a day. Google’s smart bidding needs conversion history. An account that goes dark from December to March starts from scratch every spring, and the first month back is always the worst month.
For storm roofers, the timing question is different. Have the campaign built and paused before the season. Have the creative ready. When the hail hits, you turn it on that afternoon with a 25-mile radius around the damage path, not three days later after you’ve written the ads.
Under $3,000 a month? Do these three things and stop there
Budget is the fourth variable, and it’s where most roofing marketing advice falls apart. A list of 92 ideas is useless to a two-crew company that has $2,000 a month and an owner who also runs the estimates.
If that’s you, here’s the whole plan:
- Google Business Profile, done properly. Correct categories (Roofing Contractor as primary), every service listed, photos of actual jobs uploaded weekly, and a review request sent by text within 24 hours of every completed job. This is free and it’s the single biggest driver of repair leads for a local roofer. Most profiles we audit are missing at least two of those four things.
- Google Local Services Ads. Pay per lead, not per click, and the Google Guaranteed badge does real work in an industry where homeowners are afraid of getting scammed. Expect $40 to $150 per lead depending on market. Dispute the junk ones.
- A website with one job. Load in under three seconds on a phone and put your license number, real job photos, and a tappable phone number above the fold. That’s it. You don’t need a blog yet.
Notice what’s not on the list. No Meta ads, no SEO retainer, no radio, no door hangers. Not because those don’t work, but because at this budget they’ll spread you too thin to learn anything from any of them.
Past $3,000, the order of operations matters
Once there’s real budget, the expansion path we recommend looks like this, in this order.
Google Search ads for replacement keywords. This is where the retail replacement leads live. Tight geographic targeting, a landing page built for the ad (not your homepage), phrase and exact match on terms like “roof replacement” and “roofing contractor near me,” and a negative keyword list that blocks DIY, materials, and job-seeker traffic from day one. A roofing client we onboarded last year was spending 31% of their search budget on clicks from people looking for roofing jobs and shingle prices. Fixing the negatives alone dropped their cost per lead from $310 to $190 in six weeks.
Retargeting on Meta. Roof replacement is a considered purchase. Someone who visited your site from a Google ad and didn’t call is worth a second look. A retargeting audience of site visitors, shown two or three ads with real job photos and a financing message, usually costs a few hundred dollars a month and pulls back leads you already paid for once.
Then, and only then, SEO. Roofing SEO is a long game. It’s usually 6 to 12 months before organic replaces a meaningful share of paid leads, and the sites that win are the ones with city-specific service pages, real project galleries, and a review profile that’s already strong. Start it when the paid channels are producing consistently, not as a substitute for them.
Cold Meta prospecting last. Interest-based Meta ads to people who haven’t shown intent are the most expensive lead source for retail roofers we’ve measured. They can work for financing offers and for storm roofers running damage-inspection campaigns in a specific zip code. For everyone else, they’re where budget goes to disappear.
How do you get leads for roofing sales without buying them?
This question comes up constantly, usually from an owner who’s tired of paying $75 a pop for leads that four other companies also received.
The short answer is that the sources above (GBP, LSAs, your own search ads) are all yours. Nobody else gets the homeowner’s number. But the highest-margin lead source for most established roofers isn’t digital at all. It’s the customer you finished last month.
A simple referral system beats most ad channels on cost per job. Text every completed customer at 30 days with a real offer for referrals (a $250 gift card, not a coupon), and ask for the review at the same time. One roofer we work with generates about a fifth of their annual jobs this way, at a cost per job under $300. That’s better than anything we can do for them in Google Ads, and we run their Google Ads.
The mistake that wastes more roofing budgets than bad ads
Here’s the uncomfortable part. Most roofers can’t tell us which channel a job came from.
They know the lead came in. They know it closed. But the “how did you hear about us” field in the CRM says “Google” for everything, which could mean organic, GBP, LSAs, or paid search. So when it’s time to decide where next month’s budget goes, it’s a guess.
Fix this before you scale anything. That means a call tracking number for each channel and form submissions tagged by source. It also means someone (a person, not a tool) marking which leads turned into signed contracts. It’s a few hundred dollars a month and it’s the difference between knowing your cost per job and hoping.
We’ve watched roofers cut a channel that was quietly producing their best jobs because the leads were being credited to “website.” And we’ve watched the opposite, where an owner kept feeding a channel because the lead count looked good and nobody checked whether those leads ever signed.
The decision in one line
Figure out which business you actually are (retail or storm) and do the cost-per-job math for your main ticket types. Build during the slow months so you’re ready for the fast ones. Match the channel list to the budget you really have, not the one you hope to have next year. Then track everything to the signed contract, because a roofing marketing plan you can’t measure is just a list of expenses with a nicer name.