Why Roofing Marketing Spend Gets Wasted on the Wrong Neighborhoods (and How to Fix the Targeting)
On this page
Walk into almost any roofing company that spends real money on marketing and you'll find the same quiet problem. The owner can tell you exactly what they spent last quarter. They can tell you how many leads came in. What they usually can't tell you is which streets those leads came from, how old the roofs were, or why one mailing pulled a 1.2% response while the identical piece three ZIPs over pulled nothing. The money went out the door. The results came back uneven. And the gap between the two got chalked up to luck, the market, or the season.
It isn't luck. The single biggest driver of wasted roofing marketing spend is geographic targeting that has almost nothing to do with which roofs are actually due. You can have a great offer, a clean truck wrap, a sharp landing page, and a closer who never misses, and still light money on fire because the houses you reached out to have eight good years left on them. A roof is replaced once every 15 to 30 years depending on material and climate. That means in any given neighborhood, the share of homes that will buy a roof from anybody this year is small. If your targeting doesn't bias hard toward that small share, you are paying full freight to talk to people who physically do not need you yet.
This is a long read because the fix isn't a single trick. It's a chain: understanding why the waste happens, learning to read a neighborhood the way an estimator reads a roof, building a list that's weighted by roof age and storm exposure, and then measuring at the street level so you can cut the dead zones and double down on the live ones. Let's go through the whole chain.
Why the waste is invisible until you measure it
Most roofing marketing waste hides because of how the numbers get reported. A typical owner looks at blended results: total spend, total leads, total jobs, blended cost per acquisition. At that altitude everything averages out, and average looks survivable. A $9,000 mail drop that produced six jobs at a 40% close looks fine on a spreadsheet.
The problem is what that blended number conceals. Inside that $9,000 drop, it's common for 70% of the response to come from 30% of the streets. The other 70% of the streets produced almost nothing and ate most of the postage. You didn't see it because you never broke the report down by carrier route or by subdivision. So the next quarter you mail the whole area again, including the dead 70%, because the blended ROI was acceptable. You just re-bought the waste.
Here's a simple way to picture the cost. Say you mail 10,000 pieces at $0.90 all-in (print, postage, design, list).
| Scenario | Pieces | All-in cost | Jobs | Cost per job |
|---|---|---|---|---|
| Whole-area blast | 10,000 | $9,000 | 6 | $1,500 |
| Same offer, top 40% of streets only | 4,000 | $3,600 | 5 | $720 |
The second row isn't a fantasy. It's the same campaign with the dead streets removed. You gave up one job and cut cost per job in half because you stopped paying to reach roofs that weren't due. Across a year of mailing, that difference is the gap between a marketing program that funds growth and one that quietly bleeds.
The reason this matters more in roofing than in, say, restaurants or dentistry is the replacement cycle. A restaurant's customer can come back next week. A roof customer can't come back for two decades. So in roofing, timing is most of the targeting problem. You're not only looking for the right type of homeowner. You're looking for the right type of homeowner whose roof has reached the end of its service life or got beaten up by weather. Reach them three years early and you've spent money to be forgotten. Reach them three years late and a competitor already has the job.
What "the wrong neighborhood" actually means
When contractors say a neighborhood was a bust, they usually mean one of several different things, and the fixes are different for each. It helps to separate them.
1. The roofs are too young
Newer subdivisions are the classic trap. A development built out between 2015 and 2019 has roofs that are five to ten years old. On a typical architectural asphalt shingle rated for the low-to-mid 20s in years, those homes are nowhere near replacement under normal wear. They look like great prospects because the houses are nice, the homeowners have money, and the streets are easy to canvass. But absent storm damage, the conversion rate will be brutal. You're early.
2. The roofs already turned over
The opposite trap is an older neighborhood where a wave of replacements already happened, often after a hail event five or six years back. The homes are 40 years old but the roofs are six. Drive-by tells you nothing here because the houses look aged while the roofs are young. If you target by house age you'll walk straight into a neighborhood that already bought.
3. The roofs are due but the demographics don't support the sale
Sometimes the roofs genuinely are aging out, but the homeowners can't or won't move forward. Heavy rental concentration, very low owner-occupancy, fixed-income retirees with no insurance claim in play, or homes so far underwater that a $14,000 roof isn't happening. The roof is due; the transaction isn't. This is a real form of waste that pure roof-age data won't catch on its own, which is why you layer ownership and tenure data on top.
4. The neighborhood is fine but you reached it at the wrong moment
Storm restoration lives and dies here. A neighborhood that took 1.75-inch hail last Tuesday is the best target in your market for about 90 to 180 days, then it cools as the easy claims get filed and crews from everywhere descend. The same neighborhood with no recent weather is a slow grind. Same houses, completely different timing.
Notice that only one of those four is about the offer or the creative. The other three are about which doors you knocked. That's the whole point. Most contractors try to fix a targeting problem with a copywriting solution, which is why they keep rewriting postcards that were never going to work because they landed on the wrong roofs.
The two signals that actually predict a roof sale
Strip everything down and there are two signals that do most of the predictive work for who needs a roof: age and storm exposure. Everything else is a supporting filter.
Roof age, expressed as a range
The honest version of roof-age targeting is a range, not a date. Nobody can tell you a specific roof was installed on a specific day from the street or from the air, and you should be suspicious of anyone who claims they can. What you can responsibly estimate, from aerial and satellite imagery over time plus property records, is a window: this roof was most likely last replaced somewhere in a band of years. A roof estimated at "18 to 24 years old" on a 3-tab shingle in a sun-heavy climate is a strong candidate. A roof estimated at "4 to 8 years" is not, no matter how nice the house.
Why a range matters operationally: it keeps you honest and it keeps your conversion math sane. If you treat "likely 20 years old" as a certainty, you'll over-promise to homeowners and over-weight your list. If you treat it as a probability band, you target the high-probability bands first and accept that some will be wrong. That's the correct mental model. You're not buying certainty; you're shifting the odds in your favor at scale.
Service life varies a lot by material, and your age thresholds should move with it:
| Roof type | Typical service life | When to start targeting |
|---|---|---|
| 3-tab asphalt | 15-18 years | 12+ years |
| Architectural asphalt | 22-30 years | 16+ years |
| Wood shake | 20-30 years | 18+ years |
| Concrete/clay tile (underlayment) | tile 50+, underlayment 20-30 | 18+ years (underlayment-driven) |
| Metal (standing seam) | 40-60 years | rarely age-driven; storm-driven |
| Low-slope (TPO/EPDM/mod-bit) | 15-25 years | 14+ years |
Those are general industry service-life ranges, and your local climate pulls them around. A shingle in Phoenix or south Texas ages faster than the same shingle in Seattle because UV and thermal cycling are the enemies. Adjust your thresholds down a few years in high-UV, high-heat markets and up a few in mild coastal ones.
Storm exposure, expressed as odds
The second signal is weather. Hail and high wind don't damage a market evenly. They lay down in swaths, sometimes a few blocks wide, and the difference between the inside and outside of a swath is enormous. A storm targeting program that treats a whole county as "the storm area" is barely better than untargeted mail, because most of that county didn't get hit hard enough to matter.
The useful version models exposure per roof, or at least per small grid cell: estimated hail size, wind speed, and the angle and pitch of the roof relative to the storm track, then expresses it as a probability that this roof sustained functional damage. Again, odds, not proof. You cannot know a roof is damaged until someone documents it. But you can rank a list so the roofs most likely to have functional damage rise to the top, and your crews start there.
The payoff of combining the two signals is multiplicative. An aging roof in a fresh hail swath is the highest-value door in your market. A young roof with no weather is the lowest. Most contractors target on neither and wonder why response is flat.
A field method for reading a neighborhood before you spend
You don't need a data platform to start doing this better tomorrow. Here's a manual workflow a sales manager can run with public records, a mapping tool, and a couple of hours. It won't be as precise as enriched data, but it will keep you out of the worst dead zones.
Step 1 — Pull the build-out year. County assessor sites publish year-built for parcels. Map the candidate neighborhood and note the dominant construction era. A subdivision built mostly 2016-2019 is almost certainly too young unless there's been a storm. Park it.
Step 2 — Check for a prior storm turnover. Cross-reference the area against known hail and wind events from the last decade (SPC storm reports and your local NWS office archives are public). If a significant hail event hit that neighborhood five to seven years ago, assume a chunk of the roofs already turned over and discount accordingly.
Step 3 — Spot-check roofs from aerial imagery. Open the area in a satellite map and look at 15 to 20 roofs. You're looking for granule loss (a roof that reads streaky or lighter in patches), mismatched planes (a re-roof that didn't cover everything), and obvious old 3-tab versus newer architectural texture. This is rough, but a trained eye separates "mostly old" blocks from "mostly new" blocks quickly.
Step 4 — Layer ownership and tenure. Assessor and deed data tell you owner-occupied versus absentee, and last sale date. High absentee ownership means more landlords, who are slower and more price-driven on roofs. You don't have to skip them, but weight them lower.
Step 5 — Score the streets, not the ZIP. Break the area into carrier routes or individual streets and give each a simple A/B/C grade on roof age and a separate grade on storm exposure. Mail and knock the A's first. This single habit, scoring at the street level instead of the ZIP level, eliminates most blast-mail waste.
Here's a scoring rubric you can copy:
| Factor | A (target now) | B (maybe) | C (skip) |
|---|---|---|---|
| Dominant roof age | 16+ yrs est. | 11-15 yrs | <11 yrs, no storm |
| Recent storm (24 mo) | direct swath | edge of swath | none |
| Prior turnover | none known | partial | full recent re-roof |
| Owner-occupancy | high | mixed | mostly rental |
| Median home value vs your job size | comfortably above | tight | below |
A street that's A on roof age and A on storm goes to the top of every channel you run. A street that's C on age and C on storm comes off the list entirely, even if it's in your "home" ZIP and feels like it should work.
Where roof-age and storm data change the economics
The manual method above is good triage, but it has a ceiling. You can eyeball a few hundred roofs; you can't eyeball 40,000. And aerial spot-checks miss a lot, because a roof that turned over six years ago can look similar from above to one that's pushing 20 unless you're comparing imagery across years. When you're committing five or six figures to a mailing or staffing a canvassing crew for a season, the difference between an A-graded list and a blended list is the difference between a profitable program and a break-even one.
This is the gap RoofPredict is built to close. It estimates a roof-age range for individual addresses from aerial imagery and property history, and it models storm physics per roof, hail size and wind exposure mapped to the specific roof's geometry, then expresses both as a ranked likelihood rather than a guarantee. The output isn't a list of leads to buy. It's your own market, or your own existing CRM and mailing list, scored and sorted so the roofs that are aging out and the roofs a storm just wore down sit at the top. You decide who to mail, knock, or call; the data just stops you from spending equally on roofs that are 19 years old and roofs that are 6.
A few honest limits, because the model only helps if you understand what it is. The age estimate is a range, not an install date; some roofs will be older or younger than the band suggests. The storm model gives odds of functional damage, not a finding of damage; only an inspection confirms a roof. And no data tool knows a homeowner's finances or intent, so you still layer ownership and value filters on top. What it removes is the largest and least visible source of waste, paying full price to reach roofs that physically don't need you yet, and it does it across tens of thousands of addresses that you could never grade by hand.
Used well, it changes the unit economics rather than the volume. You don't necessarily mail more; you mail better, cutting the C streets and reinvesting that postage into more touches on the A streets where the roofs are actually due.
Channel by channel: where the leaks are
Targeting waste shows up differently in each channel. Here's where it hides and how to plug it.
Direct mail
Direct mail is the channel most often wasted on wrong neighborhoods because it's so easy to buy at the ZIP or radius level. A list broker sells you "all homeowners within 5 miles" or "all homes in these three ZIPs," and that list is dominated by roofs that aren't due. The fix is to buy or build the list on roof-age and storm criteria, not geography alone. Then suppress aggressively: remove recent re-roofs, remove the newest construction, remove non-owner-occupied where it doesn't fit your model.
A practical mail discipline:
- Start from your scored list (A streets first), not a radius.
- Suppress recent buyers and obvious young roofs.
- Hit A streets with a sequence of 3-4 touches over 6-8 weeks rather than one touch over a huge area. Frequency on the right list beats reach on the wrong one.
- Put a unique phone number or URL on each route batch so you can attribute response by street.
- After the campaign, cut the bottom-responding routes and reallocate that budget to repeat the top routes.
The attribution step in #4 is what most contractors skip, and it's the one that lets you find and kill the dead zones permanently.
Door knocking and canvassing
Canvassing is expensive in the currency that matters most: rep hours and morale. A rep who knocks a young, no-storm neighborhood all day gets demoralized and quits, and you eat the recruiting cost again. Routing crews onto A-graded streets, aging roofs, fresh storm exposure, is as much a retention strategy as a sales strategy. Reps who find damage and book inspections stay.
For storm canvassing specifically, the route should follow the swath, not the city grid. Map the estimated hail/wind exposure and have reps work the high-exposure cells first while the event is fresh and before out-of-town crews saturate the area. A canvassing day on the inside of a real swath can outproduce a week of grid-knocking.
And a compliance note that matters when you knock storm doors: your reps document and inspect; they do not promise the homeowner that insurance will pay, that a claim will be approved, that the deductible will be waived or absorbed, or that the roof will be "free." Train that line hard. We'll come back to it.
Paid digital (search and social)
Paid search is naturally better-targeted because the homeowner is already searching, but you still waste money on broad geo and broad keywords. Tighten the geo to the markets where your roofs-due density is highest, and use storm events to spin up hyper-local campaigns fast when a swath lands. Paid social lets you build lookalike and geo-fenced audiences; feeding those audiences a roof-age-and-storm-weighted address list (where the platform allows custom audiences) beats a plain radius. The principle is identical to mail: the creative is secondary to who sees it.
Retargeting and your own database
The cheapest roofs to win are often the ones already in your CRM, old quotes that didn't close, past gutter or repair customers, inspection no-sales from two years ago. A roof that was "17 years old, not quite ready" two years ago is now 19 and ready. Re-scoring your existing database by current roof age and recent storm exposure surfaces these without buying a single new name. Most contractors never mine their own list this way, which is leaving the highest-margin work on the table.
The numbers: how to actually calculate the waste
Let's make the waste concrete so you can run it on your own program. The core metric is cost per acquisition (CPA) by segment, not blended.
Work through a real example. Suppose last year you ran:
- Direct mail: $48,000 spend, 32 jobs
- Canvassing: $90,000 fully loaded (rep pay + management), 60 jobs
- Paid digital: $36,000 spend, 24 jobs
Blended, that's $174,000 for 116 jobs, about $1,500 CPA. Fine on the surface. Now break the mail down by route grade, which you can do if you tracked response by route:
| Route grade | Spend | Jobs | CPA |
|---|---|---|---|
| A streets | $14,400 | 19 | $758 |
| B streets | $19,200 | 11 | $1,745 |
| C streets | $14,400 | 2 | $7,200 |
The C streets cost you $7,200 a job. Those two jobs barely covered the postage to reach them. If you'd moved that $14,400 from C streets to more touches on A streets at the A-street CPA, you'd have produced roughly 19 more jobs instead of 2. That's the waste, made visible. The only reason to keep mailing C streets is if you literally can't tell which streets are which, which is exactly the problem roof-age and storm scoring solves.
Do the same exercise for canvassing by measuring booked-inspection rate per neighborhood, and for paid by measuring CPA per campaign geo. In every channel, the pattern repeats: a minority of your targeting produces a majority of your result, and the rest is recoverable budget.
One more number worth tracking: roofs-due density. For a given area, estimate the share of homes with roofs in your target age band. A neighborhood at 18% roofs-due density will outproduce one at 4% by a wide margin at the same spend. When you start thinking in density terms, you stop asking "is this a good ZIP" and start asking "how many actually-due roofs per thousand homes does this area have," which is the right question.
Storm restoration: target hard, but stay on the right side of the line
Storm work is where targeting pays the most and where the legal exposure is highest, so it deserves its own section. The targeting upside is obvious: a fresh, well-defined swath is the densest concentration of due roofs you'll ever get, and modeling exposure per roof lets you work the inside of the swath while it's hot.
The legal line is just as important, because storm marketing is where contractors get themselves into trouble by drifting into unlicensed public adjusting. Here is the safe frame, and you should train every rep, every script, and every postcard against it.
What a roofing contractor may do: inspect the roof, document damage thoroughly with photos and measurements, prepare an accurate repair estimate aligned to standard estimating practice (Xactimate-style line items for the work you'll perform), and hand that documentation and estimate to the homeowner. You can state facts about your own scope of work to the carrier when the homeowner authorizes it. You're documenting and estimating your own repair work. That's your lane.
What a roofing contractor may not do, for a fee, unless licensed as a public adjuster: negotiate, adjust, or "handle" the homeowner's insurance claim; interpret the policy or what's covered; promise a specific payout or that the claim will be approved; promise that the deductible will be waived, absorbed, or made to disappear; advertise a "free roof"; or represent the homeowner against their insurer. Those acts are public adjusting, and doing them without a license is illegal in most states. They're also a fast way to lose your contractor's license and invite an insurance-fraud complaint.
So your storm targeting and messaging should sound like this: we'll inspect your roof, document any storm damage, and give you a written estimate for the repair; if you choose to file a claim, you file it and your insurer decides what's covered. That captures every legitimate homeowner who's worried about storm damage without you stepping into the adjuster's role.
The do-not-say list, post it in your sales office:
- Don't say "the insurance will pay for it" or "this is a covered claim."
- Don't say "we'll get your claim approved" or quote an approval likelihood.
- Don't say "we'll handle the insurance company for you" or "we'll fight the adjuster."
- Don't say "your deductible is waived/absorbed/covered" or rebate it.
- Don't say "free roof" or "no cost to you."
- Don't interpret coverage, exclusions, or policy language.
What you can say: "We found these documented impacts and prepared this estimate. The decision on coverage is between you and your insurer." That's accurate, it's helpful, and it keeps you in the contractor lane.
This matters to targeting because the entire value of getting to a fresh swath first is documentation. The contractor who inspects and documents thoroughly and hands the homeowner a clean, accurate estimate is the one who earns the job, no claims-handling promises required. Good targeting gets you to the right roofs fast; disciplined documentation closes them legally.
A documentation and estimating workflow that wins on the right roofs
Since targeting only pays off if you convert, here's the documentation and estimate workflow that turns a well-targeted inspection into a signed job, entirely on the document-and-estimate side of the line.
- Full photo set, every time. Overview shots of each slope, close-ups of damage with a chalk circle and a reference object for scale, flashings, penetrations, soft metals (gutters, vents, fascia), and the test square. Photograph collateral damage too, screens, AC fins, because it corroborates a weather event without you having to interpret anything.
- Measure accurately. Use aerial measurement or hand measurements for squares, pitch, and accessories. Your estimate is only as credible as your measurements.
- Write the estimate to standard line items. Build it as if an adjuster will read it, because one might: tear-off, decking, underlayment, starter, field shingles, ridge, flashing, accessories, labor, disposal, and the code-required items for your jurisdiction. Align quantities to your measurements.
- Note code requirements factually. If local code requires, say, ice-and-water shield to a certain point or full re-decking under certain conditions, cite the code item. You're stating a fact about the building code, not interpreting the policy.
- Hand it over and let the homeowner decide. Give the homeowner the photo documentation and the written estimate. If they choose to file a claim, that's their action and their insurer's call. You've documented your scope and priced your work, which is exactly what you're allowed to do.
This workflow is channel-agnostic: it's the same whether the inspection came from mail, a knock, or a paid lead. And it's the part of the business that separates contractors who get paid for quality work from the ones who chase "free roof" promises and get burned.
Common mistakes that keep the waste going
A running list of the errors that quietly drain budget, drawn from how these programs usually go wrong:
- Targeting by ZIP or radius. ZIPs are huge and mix old and new roofs indiscriminately. The street, the carrier route, and the individual roof are the right units.
- Targeting by house age instead of roof age. A 50-year-old house can have a 5-year-old roof. House age tells you almost nothing once a neighborhood has seen a storm turnover.
- One-and-done mailings over a giant area. Reach without frequency. Three touches on the right 4,000 homes beats one touch on 12,000.
- No street-level attribution. If you can't see which routes produced, you can't cut the dead ones, so you re-buy them forever.
- Treating a whole county as "the storm area." The swath is what's hot, not the county. Model exposure per roof or per small cell.
- Ignoring your own CRM. Old non-sales age into ready buyers. Re-score them before buying new names.
- Chasing pretty neighborhoods. Nice houses with young roofs feel like good prospects and convert terribly. Pretty is not the same as due.
- Letting reps freelance routes. Crews drift to convenient streets, not high-density streets. Assign routes off the scored list.
- Confusing certainty with probability. Roof age is a range; storm damage is odds until inspected. Treating estimates as facts leads to over-promising and bad list weighting.
- Drifting into claims promises. "We'll get it approved / deductible's covered / free roof" feels like it helps closing and exposes you to public-adjusting and fraud risk. Document and estimate; don't handle the claim.
A 30-day plan to stop the bleeding
If you want to act on all of the above without boiling the ocean, here's a sequenced month.
Week 1 — Audit. Pull last year's spend and break it down by channel and, where possible, by route or geo. Find your blended CPA, then find your segment CPAs. Identify the C streets and dead geos that ate budget. You're quantifying the waste so you can defend the cuts.
Week 2 — Build the scored list. Take your next planned campaign area and score it at the street level on roof age and storm exposure using the rubric above, manually or with enriched roof-age and storm data. Grade A/B/C. Suppress recent re-roofs, newest construction, and poor-fit ownership.
Week 3 — Re-mine your own database. Re-score every old quote, no-sale, and past customer by current roof age and recent storm exposure. Pull the ones that have aged into your target band or sit in a recent swath. Queue them for outreach first, they're your cheapest jobs.
Week 4 — Launch tight and instrument it. Run the next campaign on A streets only, with frequency and per-route attribution (unique numbers or URLs). For canvassing, route crews onto A-graded and high-exposure streets. Set the rule now: after the campaign, cut the bottom-responding segments and reinvest in the top.
Run that loop every quarter and the program compounds. Each cycle you learn which streets are live, kill the dead ones, and concentrate spend on roofs that are genuinely due. The waste doesn't vanish in one month, but the trend bends fast once you stop paying equal money to reach roofs that are 6 and roofs that are 19.
Building the scored list: data sources and how to combine them
The rubric earlier tells you what to grade. This section tells you where the raw inputs come from and how to stitch them together, because a scored list is only as good as the data feeding it.
Parcel and assessor data is your foundation. Nearly every county publishes year-built, last sale date, owner name and mailing address, owner-occupancy flag (often inferred from whether the mailing address matches the situs address), assessed value, and lot characteristics. Pull this for your whole service area once and refresh it a couple of times a year. It gives you house age, ownership, tenure, and value, four of the five factors in the rubric, for free.
Aerial and satellite imagery over time is what separates roof age from house age. A single current image tells you the roof's material and rough condition. A series of images across years tells you whether and when the roof changed, because a re-roof shows up as a sudden change in color, texture, or reflectivity between two dates. This time-series read is the only reliable way to catch the neighborhood that already turned over after a storm, the trap that burns contractors who target on house age. Doing this by hand across a market is impractical, which is the practical case for a data tool that does it programmatically.
Storm event data comes from public weather archives: hail size and wind reports from the Storm Prediction Center and local NWS offices, plus the longer-term severe weather inventories from NOAA's environmental information centers. Raw event reports are coarse, though, they give you points and rough swaths, not per-roof exposure. To get to per-roof odds you have to combine the event footprint with each roof's geometry: a steep slope facing into a wind-driven hail track takes more punishment than a shallow slope on the leeward side. That geometry layer is where a physics-based model earns its keep.
Your own CRM is the fifth input and the most underused. Past quotes, no-sales, repairs, and completed jobs carry dates and addresses you can re-score against current roof age and recent storm exposure. Treat it as a first-party data source rather than a mere contact list.
Here's how the inputs map to scoring:
| Data source | Cost | Feeds which factor | Refresh cadence |
|---|---|---|---|
| County assessor / parcel | free | house age, ownership, tenure, value | 2x/year |
| Aerial imagery time-series | varies | roof-age range, prior turnover | annual |
| SPC / NWS / NOAA storm data | free | storm exposure (coarse) | after each event |
| Per-roof storm model | platform | storm exposure (per roof) | after each event |
| Your CRM | free | re-score past contacts | continuous |
The combination matters more than any single source. House age alone misleads you. Storm data alone over-targets a whole county. Roof-age imagery alone misses the homeowner who can't transact. Layer all five and you get a list where the top streets are aging-out roofs, in a fresh swath, owned by people who live there and can afford the work, with anyone you already talked to flagged for a warm follow-up.
A word on data hygiene: deduplicate by parcel, not by name, because the same owner can hold multiple parcels and the same address can carry stale owner names. Standardize addresses to a consistent format before you suppress or merge, or your suppression of recent buyers will silently leak. And keep a do-not-contact suppression list updated, opt-outs, prior complaints, and anyone who asked off your mail, because a targeting program that's sharp but sloppy on compliance creates a different kind of cost.
What good looks like after a year of disciplined targeting
It helps to know what you're driving toward, so here's the shape of a program that's been run on roof-age and storm scoring for four quarters, versus one that hasn't.
The blast-mail program treats every quarter as a fresh guess. Spend is roughly flat, response wobbles with the weather, and nobody can say why a given drop worked. The team re-mails the same broad area each season because the blended numbers never got bad enough to force a change. Cost per job drifts up slowly as postage rises and the easy roofs in the area get picked off by competitors.
The scored program looks different by the second quarter. The C streets are already off the map, so the same budget buys more frequency on A streets and cost per job drops. By the third quarter the team is re-mining the CRM every cycle and pulling cheap jobs out of roofs that aged into the target band. By the fourth quarter the canvassing crews are routed off the same scored list, which lifts their booked-inspection rate and keeps reps from quitting. The owner can now answer the question that started this whole piece, which streets produced and why, because every channel is instrumented at the street level.
The difference isn't a bigger budget or better creative. It's that one program is paying to reach roofs at random and the other is paying to reach roofs that are due. Over a year, with the replacement cycle being what it is, that compounds into a materially lower cost per acquisition and a pipeline that stops swinging wildly with the seasons.
A realistic expectation-setter: this doesn't make every mailing a winner or remove the need for good salespeople and clean operations. Roof-age estimates are ranges, so some targeted roofs won't be ready. Storm odds are odds, so some flagged roofs won't show damage on inspection. And a perfectly targeted door still needs a rep who shows up and a crew that does the work right. What disciplined targeting does is stop the largest, most invisible leak, paying full price to reach roofs with years of life left, so that your good salespeople and clean operations are pointed at roofs that can actually become jobs.
The bottom line
Wasted roofing marketing spend is rarely a creative problem and almost always a targeting problem. The replacement cycle is so long that, in any neighborhood, only a small slice of homes will buy a roof this year, and your job is to find that slice before you spend, not to discover it by accident after. Two signals do most of the work: roof age, read as a probability range, and storm exposure, read as odds. Score at the street and roof level instead of the ZIP, suppress the roofs that aren't due, mine your own database for roofs that have aged in, instrument every channel so you can see which targeting paid, and on storm work, document and estimate hard while staying firmly out of claims-handling.
Do that, and the same budget that produced uneven, blended results starts landing on roofs that actually need you. That's the whole game: not spending more, but spending where the roofs are due. RoofPredict exists to make that grading possible across your entire market and your existing list, ranking which roofs are most likely aging out and which a storm most likely wore down, so the dead neighborhoods come off your map and your crews spend their hours where the work really is. Score the roofs, cut the C streets, and put the postage where the roofs are due.
FAQ
How do I know which neighborhoods have roofs that are actually due?
Look at two things: roof age and storm exposure. Pull build-out years from the county assessor to spot subdivisions that are too young, check whether a hail event already turned the area over in the last several years, spot-check roofs from aerial imagery for granule loss and old shingle types, and score streets A/B/C. Roof age is best treated as a probable range, not an exact date, so you target the highest-probability bands first.
Why does my direct mail get such uneven response across the same campaign?
Because the campaign almost certainly mixed live streets with dead ones, and the blended report hid it. It's common for the majority of response to come from a minority of streets where the roofs are genuinely aging out, while the rest ate postage for almost nothing. Add per-route attribution with unique phone numbers or URLs, then cut the dead routes and reinvest in the live ones.
Should I target by house age or roof age?
Roof age. A 50-year-old house can have a 5-year-old roof if it was replaced after a storm, and a 20-year-old house can be due if it's near the end of its shingle's service life. House age stops being useful the moment a neighborhood has seen a re-roof wave, which is why you estimate the roof's age range directly rather than inferring it from the structure.
How precisely can a roof's age be known from imagery?
Not to an exact install date, and you should be wary of anyone who claims otherwise. From aerial and satellite imagery over time plus property records you can responsibly estimate a range, for example 'most likely 18 to 24 years.' That range is enough to rank a list and target the high-probability roofs first, which is what shifts the odds in your favor at scale.
What's the right way to target storm-damaged neighborhoods?
Work the swath, not the county. Model hail size and wind exposure per roof or per small grid cell and route mail and crews to the high-exposure cells first, while the event is fresh and before out-of-town crews saturate the area. Treat the model as odds of functional damage, not proof; only an inspection confirms a roof. The fresh inside of a real swath is the densest concentration of due roofs you'll find.
Can I tell homeowners their insurance will cover the roof?
No. Promising coverage, approval, or a specific payout, saying you'll handle or negotiate the claim, promising the deductible is waived, or advertising a 'free roof' crosses into unlicensed public adjusting in most states. Stay in the contractor lane: inspect, document the damage with photos and measurements, write an accurate repair estimate, and hand it to the homeowner. The homeowner files and the insurer decides coverage.
How do I calculate how much marketing spend I'm wasting?
Stop looking at blended cost per acquisition and break it down by segment. Compute CPA by mail route grade, by canvassing neighborhood, and by paid campaign geo. You'll typically find a few segments at a reasonable CPA and others costing many times more per job. The high-CPA segments are your recoverable waste; move that budget to more touches on the segments that convert.
Is door knocking worth it, or is it wasted effort?
It's worth it when crews are routed onto streets with aging roofs or fresh storm exposure, and it's wasted when they grid-knock young, no-storm neighborhoods. Canvassing the right streets also retains reps, because they find damage and book inspections instead of getting demoralized. Assign routes from a scored list rather than letting reps freelance to convenient streets.
What's the cheapest source of roofing jobs I'm probably ignoring?
Your own database. Old quotes that didn't close, past repair and gutter customers, and inspection no-sales from a couple of years ago. A roof that was 17 and 'not quite ready' two years ago is 19 now and may be ready, and a past customer in a recent swath is a warm call. Re-score your CRM by current roof age and recent storm exposure before buying any new names.
Does better targeting mean I should spend more on marketing?
Usually not. The goal is to spend the same budget better, cutting the streets and geos where roofs aren't due and reinvesting that money into more frequency on the streets where they are. You often end up mailing fewer total pieces and producing more jobs, because every dollar lands on a roof that's actually a candidate instead of one with years of service life left.
The Roofline by RoofPredict
Stay Ahead of Roofing Market Changes
Join The Roofline by RoofPredict for weekly roofing intelligence: material price signals, storm demand, insurance and regulatory updates, sales tactics, and local contractor opportunities.
Sources
- Asphalt Roofing Manufacturers Association — Shingle Performance and Service Life — asphaltroofing.org
- National Roofing Contractors Association — Roofing Materials and Systems — nrca.net
- Insurance Institute for Business & Home Safety — Hail and Roofing Research — ibhs.org
- NOAA Storm Prediction Center — Storm Reports — spc.noaa.gov
- National Weather Service — Local Storm Reports and Hail Data — weather.gov
- U.S. Census Bureau — American Community Survey (housing age, tenure, owner-occupancy) — census.gov
- International Code Council — International Residential Code (roofing provisions) — iccsafe.org
- Federal Trade Commission — Truth in Advertising Guidance — ftc.gov
- Texas Department of Insurance — Public Adjusters and Roofing Contractor Rules — tdi.texas.gov
- National Association of Insurance Commissioners — Public Adjuster Licensing — naic.org
- Occupational Safety and Health Administration — Roofing Work Safety — osha.gov
- U.S. Bureau of Labor Statistics — Roofers Occupational Outlook — bls.gov
- NOAA National Centers for Environmental Information — Severe Weather Data Inventory — ncei.noaa.gov
- RoofPredict — roofpredict.com
Related Articles
Is Angi Worth It for Roofers? A Contractor's Honest Math
A line-by-line look at what Angi actually costs a roofing company, what you get, and the cost-per-acquisition math that tells you whether to stay, leave, or never sign.
Why Your Roofing Cost Per Lead Keeps Going Up (And How to Pull It Back Down)
Your cost per lead isn't rising because you're doing something wrong. It's rising because of forces baked into how roofing leads get bought and sold. Here's the breakdown, channel by channel, plus the levers that actually move the number.
Google Ads Cost Per Lead for Roofing: Real Benchmarks and How to Cut It
A working breakdown of roofing cost per lead on Google Ads — what's normal, what's broken, and the levers that actually move the number.