Skip to main content

How to Enrich a Roofing Mailing List With Roof Data (Age, Storm History, and Risk)

Emily Crawford, Home Maintenance Editor··33 min readRoofing Lead Generation
On this page

Most roofing mailing lists are a property list wearing a roof costume. You bought 8,000 single-family addresses in three ZIP codes, filtered to owner-occupied homes worth more than $250,000, maybe knocked out the new construction, and called it targeted. Then you mailed all 8,000 the same postcard four times and watched a response rate that would embarrass a coupon clipper.

The problem is not the postcard. The problem is that a property list tells you who lives there and what the house is worth. It tells you almost nothing about the one component you actually sell. Two houses next door to each other can sit on the same lot size, the same year built, the same assessed value, and one has a 6-year-old architectural shingle roof while the other is on its third layer and shedding granules into the gutters. Your list treats them identically. Your mail spend treats them identically. The roof does not.

Enriching a roofing mailing list means appending data about the roof itself to each address, so that before you spend a stamp you already know roughly how old the covering is, what weather it has absorbed, and how likely it is to be due. Done well, it lets you take the same mail budget and point it at the third of your list where the roof is actually aging out or storm-worn, while you stop paying to remind a homeowner with a 4-year-old roof that you exist.

What follows is the operational version of that idea: which data fields actually move response, where each field comes from, how to score and segment a list, how to wire enrichment into a recurring direct-mail and CRM motion, the math on what it is worth, and the mistakes that quietly burn money. Numbers are illustrative of the structure, not promises about your market.

What "enrichment" actually means for a roofer

List enrichment is a generic data term: you start with a thin record (an address) and append additional attributes to it from outside sources. Marketers enrich lists with income, age, household size, and buying signals. For a roofer, most of those attributes are noise. You are not selling a subscription box. You are selling a roof, and the buying signal that matters is whether the roof is worn out.

So a roofer's enrichment has a narrow, specific job: attach to each address the attributes that predict the roof is due. There are three that carry almost all the weight, plus a handful of supporting fields.

  • Roof age (as a range). The single strongest predictor. A 3-tab asphalt shingle roof in a temperate climate has a typical service life in the high teens to low twenties; architectural shingles run longer. If you know an address is sitting at 18 to 22 years on its covering, that homeowner is in the replacement conversation whether they have admitted it yet or not.
  • Storm history per address. Hail and high wind do not wear roofs out evenly across a ZIP. A storm has a track, a swath, and an intensity gradient. The house under the core of a hail swath took a very different beating than the house six blocks away under the edge, even though both are in the same county "hail event" on a generic map.
  • Risk / condition signal. A combined score that fuses age and weather into a single rank, ideally with some read on the roof's current state from imagery, so you can sort the whole list from most-due to least-due.

Supporting fields that sharpen targeting without being the headline: roof material type and complexity (cut, hip, valleys), structure footprint, owner-occupied vs. rental, length of ownership, and whether a permit for re-roofing has already been pulled (a strong negative signal you want to suppress).

The mental model: your raw list is a spreadsheet of houses. Enrichment turns it into a ranked list of roofs. Everything below is about doing that conversion accurately and cheaply enough that it pays.

The fields that move response, ranked by weight

Not every data point you can buy is worth the cost or the column. Here is a candid ranking of the fields by how much they actually change who you mail, based on the simple logic of what makes a roof a job.

Tier 1 — these decide the mailing

Roof age range. If you append nothing else, append this. The reason it dominates: replacement demand is overwhelmingly a function of age. A roof that is 5 years old is not your customer this year almost regardless of anything else, and a roof that is 20-plus years old is in the market almost regardless of anything else. Age sorts your list into "not yet" and "now or soon" faster than any other field. Insist on a range, not a fake exact date. No data source can read the install receipt off an aerial photo; anyone selling you an exact roof-install date is selling you false precision. A tight range (for example, 16 to 20 years) is honest and is plenty to make a mailing decision.

Storm exposure per address. The multiplier on age. A 12-year-old roof is a maybe; a 12-year-old roof that took a core hit from a 1.75-inch hail swath is a strong maybe that just moved up your list. Storm exposure also surfaces a population age alone misses: relatively young roofs that got hammered and now have legitimate, documentable damage. The key qualifier is per address or per-roof, not per-county. "Your county had a hail event" is true for everyone and therefore useless for sorting.

Tier 2 — these refine and protect the spend

Recent re-roof / permit suppression. A homeowner who pulled a re-roof permit 18 months ago is the worst address on your list. Their roof is new, they already chose a contractor, and mailing them is pure waste. If you can append recent permit activity, use it as a hard suppression filter. This single negative field can recover a meaningful chunk of a mail budget.

Owner-occupied and tenure. Owner-occupied homes convert better for retail roofing than rentals, and owners who have lived in the home a long time are more likely to still be on the original or first-replacement roof. Tenure also correlates with the homeowner having the equity and intent to do the job rather than defer it.

Roof complexity / material. A complex cut-up roof with multiple valleys and a steep pitch is a bigger ticket and a different sales conversation than a simple gable. Not a targeting filter so much as a routing and pricing input, but useful for prioritizing your best crews and your most experienced reps.

Tier 3 — nice to have, easy to over-weight

Home value, income, demographics. Standard marketing enrichment. Mildly useful as a guardrail (you may want to suppress the bottom of the value distribution if you sell premium systems), but a powerful temptation to over-target. Plenty of modest homes need roofs and pay for them. Do not let income data crowd out roof data; the roof is the product.

Year built. Useful only as a weak proxy and only when nothing better exists. Year built is the trap field, and it earns its own section below.

The practical takeaway: build your scoring around Tier 1, use Tier 2 to protect and refine, and treat Tier 3 as light seasoning. A list scored on age plus per-address storm exposure, with permit and rental suppression, already beats a demographically "targeted" list that ignores the roof.

Where roof data actually comes from

You cannot enrich what you cannot source. Here is the honest landscape of where each field originates, including the limits of each, so you can assemble a stack instead of overpaying one vendor for everything.

Public records and assessor data

County assessor and parcel records give you the backbone: address, owner name, owner-occupied flag, assessed value, lot and structure size, and year built. This is cheap or free and broadly available, and it is where most "property lists" come from. It is also where the year-built trap lives, because the assessor records when the house was built, not when the roof was last replaced. A 1985 home may have had three roofs since. Use assessor data for the frame of the house and the owner, not for roof age.

Building permits

Many jurisdictions publish re-roof permit records. Where available, this is gold for one job: suppression. A pulled re-roof permit is the closest thing to a confirmed "this roof is new" signal you can get from public data. Coverage is uneven; some areas digitize permits well, others barely. Where you can get it, append it. Where you cannot, you live with some waste at the bottom of your funnel.

Aerial and satellite imagery

This is how the modern stack estimates roof age and condition without sending a truck. High-resolution aerial imagery, analyzed for the visual signatures of aging and wear, produces an estimated age range and a condition read. The honest framing: imagery infers age from how the roof looks, weathers, and compares to known patterns, so the output is a probabilistic range, not a certified date. It is also where measurement vendors live, but measurement and age are different categories. A measurement product tells you the roof is 28 squares with 140 feet of ridge; it does not tell you the roof is 19 years old and due. You need the age read, not only the geometry.

Weather and storm data

The raw material is public and excellent. The National Weather Service and the Storm Prediction Center publish storm reports, and NOAA's archives hold hail and wind event data. The catch is that raw storm data is event-level and coarse for targeting: a hail report is a point or a polygon for a county-scale event, not a per-roof intensity. Turning "a storm passed through" into "this specific roof took a damaging core hit while that one did not" requires modeling the storm against each roof, which is a layer most roofers do not build themselves. More on that distinction below.

Mailing and contact data

Separate from roof data, you still need deliverable addresses and, for multi-channel follow-up, contact records. National Change of Address processing and address standardization keep your mail out of the dead-letter bin. This is plumbing, not targeting, but skipping it wastes the postage on every move-out.

The assembly problem

Notice that no single public source hands you a ranked list of due roofs. Assessor gives you the house. Permits give you suppression. Imagery gives you age and condition. Weather archives give you raw events you then have to model per roof. Stitching these into one scored record per address is the actual work of enrichment, and it is why roofers either build a small data operation, hire it out, or use a service that has already assembled the stack. The point of knowing the sources is so you can tell what you are really paying for and not get charged imagery prices for assessor data.

Roof age: the field that does the heavy lifting (and why it is a range)

If enrichment had only one column, it would be roof age. So it is worth being precise about what that field is and is not.

What it is: an estimate of how long the current roof covering has been in service, expressed as a range, derived primarily from imagery analysis and any corroborating signals (permit dates where available, visible condition). A good age field looks like "15 to 19 years," not "installed 6/14/2008."

Why the range matters, both technically and legally for your own credibility: nobody can read an install date off a photo. The honest output of any age model is a confidence range. When a vendor hands you exact dates for every roof in a county, that is fabricated precision, and it will burn you the first time a homeowner says "my roof is four years old" and you mailed them a postcard implying it was twenty. A range protects your accuracy and your reputation. "Roofs in your area aging into the replacement window" is a claim you can stand behind; "your roof was installed in 2004" is not.

How to use age to segment, concretely. Asphalt shingle dominates residential, and typical service life depends on product and climate, but a workable segmentation looks like this:

Age range Segment Mail decision
0–8 years Too new Suppress. Do not mail unless storm-flagged.
9–14 years Watch Light touch / nurture; mail if storm-flagged.
15–20 years Prime Core target. Mail every cycle.
21+ years Overdue Highest priority. Mail and consider door-knock.

The single biggest budget win from age data is suppressing the 0–8 bucket. In a typical residential ZIP, a real slice of homes have roofs under eight years old, and every one of those postcards is wasted. Cutting them does more than save the postage; it tightens your whole response rate because the denominator now contains roofs that can actually convert.

A worked example. Say your raw list is 8,000 addresses and your blended cost per piece, all-in, is $0.70 across a four-touch campaign (roughly $2.80 per address per cycle). That is $22,400 to mail everyone. Now you enrich and find that 28 percent of those roofs are in the 0–8 "too new" bucket. Suppress them and you mail 5,760 addresses for about $16,128, saving roughly $6,272 per cycle. You did not lose a single real prospect, because nobody buys a roof for a 5-year-old roof. That saved budget either drops to your margin or gets redeployed as extra touches on the prime and overdue segments, where it actually compounds.

Storm history: per-roof, not per-county

The storm field is where most roofers either underuse public data or get oversold a hail map. Both miss the same point: a storm does not damage a ZIP code uniformly, so storm data is only useful for targeting when it is resolved to the individual roof.

Here is the distinction that matters. A hail map shows you where it hailed: a county or a polygon shaded because reports came in. Useful for knowing a storm happened. Nearly useless for sorting a mailing list, because it flags everyone inside the polygon equally. But within that polygon, hail fell in a swath with an intensity gradient. Homes under the core took 1.75-inch stones at a steep angle; homes near the edge took pea-sized hail that did nothing. Wind works the same way, funneling and accelerating around terrain and structures. The damage is not the event; the damage is the event as it hit each specific roof.

So the high-value storm field is not "this county had a hail event in May." It is closer to "this roof sits under the modeled core of a damaging hail swath, at an exposure consistent with impact damage." That is the difference between a list everyone in town is also mailing off the same public hail map, and a list ranked by which roofs the storm actually wore out.

Why this matters for both your response rate and your integrity in the field:

  • Targeting. Mailing the modeled-core homes concentrates your spend on roofs with a real, documentable reason to look now, instead of spraying the whole polygon.
  • Credibility at the door. When a rep can say "the hail that came through on May 12 hit your block hardest, and we are documenting roofs on this street," that is specific and true. "There was a storm in your county" is what every storm-chaser's flyer says.

A compliance note that protects your business, because storm work attracts trouble. Storm exposure data tells you which roofs likely have age-and-weather reasons to be inspected. It does not tell you, and you must not imply, anything about a homeowner's insurance outcome. Your honest job is to identify roofs worth inspecting, then document thoroughly and write an accurate repair estimate. The homeowner files; the insurer decides coverage. More on that division of labor below, because crossing it is how roofers lose licenses.

The year-built trap (and other ways data lies)

The most common way roofers mis-enrich a list is by treating year built as roof age. It is the easiest field to get and the most natural mistake, and it quietly corrupts targeting.

Why it fails: year built is when the house was constructed. The roof has likely been replaced one or more times since, and a re-roof is invisible to the assessor record. Lean on year built and you will:

  • Mail a 1978 home as if it is overdue when it was re-roofed three years ago (waste).
  • Skip a 2006 home that took hail and is on its original, now-worn roof (missed job).
  • Systematically over-target the oldest neighborhoods, which are often the most-mailed and most competitive, while missing worn roofs in newer subdivisions.

Zillow, the county site, and Google will all happily show you year built. None of them shows you re-roofs. That is the gap imagery-based age estimation exists to close: it reads the roof that is on the house now, not when the house went up.

Other quiet data lies to watch for:

  • Stale imagery. An age estimate is only as current as the photo it was computed from. Aerial imagery refresh cycles vary; a roof replaced after the last flyover will read old. Ask how fresh the imagery is and treat very recent permit data as the override.
  • County-level storm flags dressed up as per-roof. If a vendor's "storm score" is identical for every address in a ZIP, it is a county flag with a paint job, not a per-roof model.
  • Exact dates. Covered above, but worth repeating: any exact roof-install date for a whole list is fabricated. Demand ranges.
  • Match-rate hand-waving. Enrichment only helps the records it can match. If a vendor matches 60 percent of your addresses to roof data, the other 40 percent come back blank, and you need a plan for them (mail as unknown, or suppress, or re-run through a second source). Ask for the match rate before you pay.

How RoofPredict fits into this

Everything above is the work: source assessor data, estimate roof age from imagery as a range, model storms against each roof instead of flagging whole counties, suppress recent re-roofs, and fuse it all into one ranked score per address. You can assemble that stack yourself. Most roofers do not have the time, the imagery pipeline, or the weather-modeling layer to do it well, which is the gap RoofPredict was built for.

RoofPredict scans an area and returns, per address, a roof age range from aerial imagery and a storm read modeled on that specific roof, fused into a risk score that ranks the homes from most-due to least-due. In plain terms: it tells you which roofs are due, house by house, and which to skip, so you can append that signal to a mailing list you already own or have it enrich a fresh pull for an area. It models the storm on each roof rather than telling you a storm passed through your county, which is the per-roof-versus-per-polygon distinction that separates a useful storm field from a hail map everyone else is also working.

Where it fits in your motion: hand it your own CRM book of old estimates and past customers and it surfaces which of those roofs have now aged or storm-worn into the replacement window, or point it at a geography and it ranks the doors so your mail and your knockers hit the worn roofs and skip the new ones. The output is built to plug into the workflow in the next section, not to live in a dashboard you never open.

The honest limits, because a list enriched on hype is worse than no list. Roof age is a range, never an exact install date. The storm read is odds about which roofs were likely worn, not proof any specific roof is damaged. It estimates from imagery and weather modeling; it does not climb the ladder for you, and it makes no claim about measurements, exact materials, or what an insurer will decide. It sharpens the outbound you already do; it is not a lead-buying service that resells you the same homeowner five competitors also bought. Used for what it is, it is the enrichment layer this whole playbook depends on. Used as a magic button, it will disappoint you, and we would rather you know that going in.

A repeatable enrichment-to-mail workflow

Here is the operational loop, start to finish, the way a roofer who runs this monthly would actually do it. Adjust the numbers to your market.

Step 1 — Define the geography and pull the raw list

Pick your service area at the ZIP or sub-ZIP level. Pull single-family, owner-occupied addresses from assessor or a list provider. Keep the frame fields (year built, value, lot size, owner name) but do not target on them yet. Output: a flat raw list, say 8,000 addresses.

Step 2 — Append roof age

Run the list through imagery-based age estimation. Expect a match rate below 100 percent; flag unmatched records as "age unknown" rather than dropping them silently. Output: each address now carries an age range and an age segment (Too new / Watch / Prime / Overdue).

Step 3 — Append storm exposure

For each address, attach a per-roof storm read: was this roof under the modeled core of a recent damaging hail or wind swath, and at what exposure. Reject any "storm score" that is identical for the whole ZIP. Output: a storm flag and intensity per address.

Step 4 — Append suppression fields

Layer in recent re-roof permits where available, plus rental flags and address-deliverability (move-out) data. Output: a suppression column that marks do-not-mail records.

Step 5 — Score and rank

Combine into a single 0–100 due-score. A simple, transparent weighting that you can tune:

  • Age segment: up to 50 points (Overdue 50, Prime 38, Watch 18, Too new 0).
  • Storm exposure: up to 35 points (modeled core hit 35, moderate 18, none 0).
  • Suppression: hard zero-out if recent permit; subtract for rental.
  • Small adjustments for tenure and value if you sell premium systems.

Output: every address ranked. Now you can draw a line: mail the top N your budget supports, knock the very top, nurture the middle, ignore the bottom.

Step 6 — Segment the creative

Do not mail one postcard to the whole ranked list. Match the message to the segment:

  • Overdue, no storm: age-and-wear message ("roofs on your street are reaching the age where they start to fail").
  • Storm-flagged: documentation message ("we are inspecting and documenting roofs hit by the recent storm on your block") — stated as inspection and documentation, never as a payout promise.
  • Prime watch: education/relationship message and a soft offer (free inspection).

Step 7 — Mail, track, and tie response back to the score

Use a unique phone number, QR code, or landing URL per segment so you can measure response by score band, not only overall. This is the step almost everyone skips, and it is the one that makes the next cycle smarter.

Step 8 — Re-enrich and repeat

Run the loop monthly or quarterly. Roofs age, storms hit, permits get pulled. A record that was "Watch" last year is "Prime" this year. Re-scoring keeps the list alive instead of letting it rot. Each cycle, feed back what converted so you can re-weight the score toward what is actually closing in your market.

Don't sleep on your own CRM — enrich the book you already own

The cheapest enriched list a roofer has is the one sitting in the CRM. Every estimate you wrote and lost, every repair customer from six years ago, every inspection that went nowhere — those are addresses where you already have a relationship, a phone number, and often a roof you have personally seen. Enriching that book is higher-ROI than buying cold addresses, because the contact data is free and warm.

The move: export your old estimates and past customers, run them through the same age-plus-storm enrichment, and re-rank. The estimate you lost in 2019 on a roof that was "a few more years" then is now squarely in the replacement window. The repair customer whose roof you patched after a storm five years ago is aging out. These are not cold leads; they are people who already know your name, now flagged at the moment their roof is actually due.

A concrete sequence:

  1. Pull every lost estimate and closed-won customer from the last 8–10 years.
  2. Enrich each address for current roof age range and recent storm exposure.
  3. Suppress anyone who shows a recent re-roof permit (they already replaced — possibly with you, possibly not).
  4. Sort by due-score. The top of that list is a call list, not a mail list — you have phone numbers and history.
  5. Reach out with specifics: "When we looked at your roof in 2019 it had a few years left. Storms have come through since, and roofs in your area at that age are reaching the point where they fail. Worth a quick look?"

This is money already in your book. It costs a fraction of cold mail and converts better because the relationship exists. Most roofers let it sit because they have no way to know which old contacts are due now. That "which ones" question is exactly what enrichment answers.

Build it, buy it, or blend: how to source the enrichment

Once you understand the fields and the sources, the practical question is who assembles the stack. There are three honest paths, and the right one depends on your volume and whether you have anyone in-house who likes data.

Build it yourself. You pull assessor and permit data directly, license aerial imagery, run age and condition estimation, and pull NOAA storm archives to model exposure. This is the cheapest per-record at very high volume and gives you total control of the weighting. It is also a real project: imagery licensing is not trivial, and modeling a storm against individual roofs is a specialized skill, not a spreadsheet formula. Building makes sense for large operations mailing tens of thousands of pieces a month with a data-capable person on payroll. For most roofers it is a distraction from selling roofs.

Buy a finished signal. You hand a list (or a geography) to a service that has already assembled age, storm, and risk per address, and you get back a scored, ranked file. You pay a per-record or per-area fee and trade some control of the weighting for not having to run an imagery pipeline. This is where a service like RoofPredict sits: the stack is built, the storm is modeled per roof, the output is a ranked list you act on. The thing to verify before buying is the same set of questions throughout: is age a range, is the storm signal per-roof rather than per-county, and what is the match rate.

Blend. The most common real-world setup. You keep your raw list and CRM in-house, source the cheap public fields yourself (assessor, permits where digitized, address hygiene), and buy the hard parts — imagery-based age and per-roof storm modeling — from a service. You get the cost savings on commodity data and the expertise on the fields that actually require it. For a mid-sized roofer, blending is usually the sweet spot.

A short buyer's checklist regardless of path, the questions that separate real roof data from a property list with a paint job:

  • Is roof age delivered as a range, and on what imagery date was it computed?
  • Is the storm signal resolved per roof, or is it the same value for every address in the ZIP?
  • What is the match rate on a sample of my list, in writing?
  • Does the file include suppression fields (recent permit, rental), or do I layer those myself?
  • Can I get a sample scored against a street I already know, so I can sanity-check the calls?

That last one is the cheapest insurance you can buy. Before committing a list or a budget, have the data scored against a block where you have personally been on the roofs. If the homes you know to be worn out come back high and the ones you re-roofed last year come back suppressed, the signal is real. If the scores look random against ground truth, walk away no matter how slick the dashboard.

Keeping the data clean: hygiene that protects the spend

Enrichment is only as good as the addresses underneath it, and roofing lists rot fast. A few unglamorous hygiene habits keep your enriched list from quietly leaking money every cycle.

Standardize and validate addresses first. Run the raw list through address standardization and change-of-address processing before you enrich, not after. There is no point paying to estimate the roof age of a house whose owner moved out last spring, and a malformed address may fail to match the roof data at all, inflating your "unknown" pile for no reason.

De-duplicate across sources. When you blend your CRM book with a fresh geographic pull, the same address often appears twice with different formatting. De-dupe on a normalized address key before scoring, or you will mail the same roof two postcards and double-count it in your response math.

Track data lineage per field. Keep a column noting where each enriched value came from and when. Six months later when a homeowner says "my roof is new," you want to know whether your age estimate was computed from imagery that predates their re-roof, so you can fix the record instead of distrusting the whole list.

Refresh suppression aggressively. Permits and move-outs change constantly. A recent re-roof permit that was not on file last quarter is the single most valuable update you can make, because it pulls a guaranteed-waste address out of your spend. Re-pull permit and deliverability data every cycle even if you only re-score age and storm less often.

Hold out a control. Each cycle, mail a small random sample of your suppressed "too new" roofs anyway and measure their response against the enriched segments. If the suppressed roofs genuinely do not respond, your scoring is working and you can suppress with confidence. If they respond surprisingly well, your age data or your cutoff needs a look. A small, ongoing control is how you keep the whole system honest instead of trusting it on faith.

The math: what enrichment is actually worth

Let's put real structure on the ROI so you can decide whether this is worth your time, using illustrative numbers you should replace with your own.

Baseline, no enrichment. Mail 8,000 addresses, four touches, $0.70 per piece all-in = $22,400 per cycle. Assume a 0.4 percent response rate (a generous blended number for unsegmented roofing mail) = 32 responses. Assume 1 in 6 responses becomes a sold job = roughly 5 jobs. At a $14,000 average residential re-roof, that is about $70,000 in revenue from $22,400 of mail. It works, barely, and only if your close process is tight.

Enriched. Suppress the 28 percent "too new" roofs, leaving 5,760 addresses. Mail those four times at $0.70 = $16,128. Because you removed the roofs that could never convert and matched creative to segment, response on the remaining list lifts — even a modest improvement to 0.7 percent (you concentrated spend on due roofs) = about 40 responses. Same 1-in-6 conversion = roughly 7 jobs = about $98,000 in revenue from $16,128 of mail.

The comparison:

Metric Unenriched Enriched
Addresses mailed 8,000 5,760
Mail cost / cycle $22,400 $16,128
Responses 32 40
Jobs sold ~5 ~7
Revenue ~$70,000 ~$98,000
Revenue per mail dollar $3.13 $6.08

The revenue per mail dollar roughly doubles, and you spent less. None of that requires a magic response rate; it comes from two unglamorous moves — stop paying to mail roofs that cannot convert, and match the message to the segment. The cost of enrichment itself (a per-address fee for the roof data) has to come out of the savings, and it should easily fit inside the $6,272 you saved by not mailing new roofs. If enrichment costs you, say, $1 per matched record, that is well under the postage you stopped wasting.

The deeper win is not even in one cycle. It is that an enriched, re-scored list compounds: every cycle you learn which score bands convert in your market, tighten the weighting, and reallocate budget toward what closes. An unenriched list is a flat spend that never learns.

What pros get wrong

A field guide to the mistakes that quietly drain enrichment ROI, from people who run these lists.

Targeting on income instead of roof. The most seductive trap. It feels sophisticated to mail the $400k+ homes, but plenty of those have new roofs and plenty of modest homes need roofs and pay for them. The roof is the product; demographics are a guardrail, not a target.

Treating a hail map as a targeting list. A county hail polygon flags everyone equally. Mailing off it puts you on the same doors as every other roofer who pulled the same public map. Per-roof modeling is what gives you a list nobody else is working.

Believing exact roof ages. Covered above. Any vendor handing you exact install dates for a whole list is fabricating precision, and it will embarrass you in the field. Ranges only.

Skipping suppression. Mailing recent re-roofs and rentals is pure waste, and it is invisible waste because you never see the postcards land in the trash. Permit and rental suppression is the cheapest ROI in the whole process.

Mailing one creative to the whole list. Even a perfectly enriched list underperforms if the overdue-no-storm homeowner and the freshly-hailed homeowner get the same postcard. Segment the message to the score band.

Not tracking response by score band. If you only measure overall response, you never learn which part of your scoring works. Unique numbers or URLs per segment turn every cycle into a feedback loop.

Enriching once and never again. A list is perishable. Roofs age, storms hit, permits pull. Re-enrich on a cycle or the data decays into the same stale list you started with.

Letting the CRM rot. The warmest enriched list you own is your old estimates, and most roofers never re-score it. It is the highest-ROI enrichment available and the most ignored.

Crossing the claims line on storm mail. The fastest way to turn a good storm list into a legal problem is over-promising. Cover this carefully, next.

Staying on the right side of the line with storm-flagged mail

Storm enrichment is powerful and it attracts trouble, because the temptation is to promise homeowners a result you cannot legally promise. Get the data right and the messaging wrong and you can lose a license. So be precise about what you may and may not say, on a postcard, at a door, and on a landing page.

What a roofer may legitimately do: inspect a roof, document damage thoroughly with photos and notes, and prepare an accurate repair estimate aligned to standard estimating practice for the work you would perform. You may state facts about your own scope to a carrier. That is your lane, and storm enrichment serves it perfectly — it tells you which roofs are worth inspecting and documenting.

What a roofer may not do, and must not imply in marketing: negotiate, adjust, or "handle" the homeowner's insurance claim for a fee; interpret the homeowner's policy or coverage; promise a specific payout or that a claim will be approved; promise the deductible will be waived, absorbed, or made to disappear; advertise a "free roof"; or represent the homeowner against their insurer. Those activities are unlicensed public adjusting in most states, and the deductible promises run into separate insurance-fraud statutes. State departments of insurance, including Texas's TDI, publish guidance on exactly this.

The safe frame to put on your storm mail and your reps' scripts: you document thoroughly, you write an accurate estimate to repair the roof, and you hand it to the homeowner. The homeowner files. The insurer decides coverage. You never speak for the homeowner against the carrier and you never promise an outcome.

A quick do-not-say list to put in front of every rep who works a storm list:

  • Don't say: "We'll get your claim approved" / "We handle the whole claim for you."
  • Don't say: "We'll waive your deductible" / "You won't pay anything out of pocket."
  • Don't say: "Free roof."
  • Don't say: "Your policy covers this" (that is the adjuster's call, not yours).
  • Do say: "We'll inspect and document the roof and give you an accurate estimate you can file with your insurer."
  • Do say: "Roofs on this block took the brunt of the storm; worth getting yours documented."

The enrichment data and the compliance line work together: per-roof storm modeling tells you honestly which roofs likely have age-and-weather reasons to be inspected, and the messaging tells the homeowner honestly what you do — document and estimate — without pretending to control what the insurer decides. That is a storm motion you can run for years without a regulator knocking.

Putting it together: a 30-day rollout

If you have never enriched a list, here is a month to go from a flat property list to a scored, segmented, mailing machine.

Week 1 — Source and audit. Pull your raw list and your CRM export. Decide your sources for age, storm, and suppression. Get match rates in writing before you pay anyone.

Week 2 — Enrich and score. Append age range, per-roof storm exposure, and suppression fields. Build the 0–100 due-score with the transparent weighting above. Eyeball the output: do the homes you personally know come out where you'd expect? Sanity-check against a few addresses you have actually been on.

Week 3 — Segment and design. Draw your mail line by budget. Write three creatives (overdue, storm, watch), each with its own tracking number or URL. Run the storm creative past the do-not-say list. Build the CRM call list off the top of the re-scored book.

Week 4 — Launch and instrument. Drop the mail, start the CRM calls, and set up the tracking so every response ties back to a score band. Calendar the re-enrichment for next cycle.

Then do it again. The first cycle proves the savings; the third cycle, when your scoring is tuned to what actually closes in your market, is where enrichment stops being a project and becomes how you grow — working your own streets and your own book instead of renting the same homeowner from a lead site or waiting on a storm to feed you.

That is the whole idea behind enriching a roofing mailing list with roof data: take the mail and the knocking you already do, and point it at the roofs that are actually due. If you want the age-range and per-roof storm layer assembled for you, that is exactly what RoofPredict produces — honest ranges, odds not proof, and a list ranked house by house. Hand it a street or your old book and decide for yourself whether it calls the due roofs right. You own the next job either way; the data just tells you which door it is behind.

FAQ

What does it mean to enrich a roofing mailing list with roof data?

It means appending attributes about the roof itself to each address on your list, so you know before you mail roughly how old the covering is, what storms it has taken, and how likely it is to be due. The three fields that carry most of the weight are a roof age range, per-roof storm exposure, and a combined risk score that ranks every address from most-due to least-due. The point is to take the same mail budget and aim it at the roofs that can actually convert.

Can you really tell a roof's age from aerial imagery?

You can estimate it as a range, not as an exact date. Imagery analysis reads how a roof looks, weathers, and compares to known aging patterns, which produces a probabilistic age range such as 15 to 19 years. Nobody can read an install receipt off a photo, so any vendor selling you exact install dates for a whole list is fabricating precision. A tight range is honest and is plenty to make a mailing decision.

Why can't I just use year built or Zillow to target old roofs?

Because year built tells you when the house was constructed, not when the roof was last replaced, and re-roofs are invisible to assessor records, Zillow, and Google. Lean on year built and you will mail old homes that were recently re-roofed and skip newer homes on worn original roofs. Imagery-based age estimation exists to close exactly that gap by reading the roof on the house now.

What is the difference between a hail map and per-roof storm data?

A hail map shows where it hailed: a county or polygon flagged because reports came in, which marks everyone inside it equally. Storm exposure modeled per roof shows which specific roofs sat under the damaging core of the swath versus the harmless edge. The first is useful for knowing a storm happened; only the second is useful for sorting a mailing list, because everyone else is also working that same public hail map.

How much can list enrichment actually save on direct mail?

The clearest win is suppressing roofs too new to ever convert. If a real slice of a typical ZIP has roofs under eight years old, cutting them from an 8,000-piece, four-touch campaign at roughly $0.70 per piece can save several thousand dollars per cycle without losing a single real prospect. That saved budget either drops to margin or gets redeployed as extra touches on the due segments, where it compounds. Replace the numbers with your own market's.

Should I enrich a cold mailing list or my own CRM first?

Start with your CRM. Old lost estimates and past customers are the cheapest enriched list you own because the contact data is already free and warm. Run those addresses through the same age-and-storm enrichment, suppress anyone with a recent re-roof permit, and the estimate you lost years ago on a roof that had a few years left is now squarely in the replacement window. That is a call list, not a mail list, and it converts better because the relationship already exists.

What can I legally say on storm-flagged roofing mail?

You can say you will inspect and document the roof and provide an accurate repair estimate the homeowner can file with their insurer. You may not promise a specific payout or approval, claim the policy covers the damage, promise to waive or absorb the deductible, advertise a free roof, or offer to handle or negotiate the claim, because those cross into unlicensed public adjusting and, with deductible promises, insurance fraud. Document and estimate; the homeowner files and the insurer decides coverage.

How often should I re-enrich my list?

Treat the list as perishable and re-enrich on a monthly or quarterly cycle. Roofs age into new segments, storms hit, and re-roof permits get pulled, so a record that was a watch last year may be prime this year and a record that was prime may have been replaced. Re-scoring keeps the list alive and, when you feed back what converted, lets you tune the weighting toward what actually closes in your market.

What is a match rate and why does it matter?

A match rate is the share of your addresses that a data source can successfully attach roof data to. If a vendor matches 60 percent of your list, the other 40 percent come back blank and you need a plan for them, such as mailing them as unknown, suppressing them, or re-running through a second source. Always ask for the match rate before you pay, because enrichment only helps the records it can actually match.

How does RoofPredict fit into list enrichment?

RoofPredict scans an area or your own CRM book and returns, per address, a roof age range from aerial imagery plus a storm read modeled on that specific roof, fused into a risk score that ranks homes from most-due to least-due. It models the storm on each roof rather than flagging whole counties, which is the per-roof signal a useful storm field needs. The honest limits: age is a range not an exact date, the storm read is odds not proof of damage, and it sharpens your own outbound rather than selling you leads.

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.

By signing up, you agree to receive The Roofline by RoofPredict. Unsubscribe anytime.

Sources

  1. NRCA — National Roofing Contractors Associationnrca.net
  2. IBHS — Insurance Institute for Business & Home Safetyibhs.org
  3. NOAA Storm Prediction Centerspc.noaa.gov
  4. National Weather Service — Storm Reportsweather.gov
  5. NOAA National Centers for Environmental Information — Storm Events Databasencdc.noaa.gov
  6. OSHA — Fall Protection in Constructionosha.gov
  7. ICC — International Residential Codeiccsafe.org
  8. U.S. Census Bureau — American Housing Surveycensus.gov
  9. U.S. Bureau of Labor Statistics — Roofersbls.gov
  10. Federal Trade Commission — Business Guidance on Advertisingftc.gov
  11. Texas Department of Insurance — Public Insurance Adjusterstdi.texas.gov
  12. USPS — National Change of Address (NCOALink)usps.com
  13. Asphalt Roofing Manufacturers Association (ARMA)asphaltroofing.org
  14. RoofPredictroofpredict.com

Related Articles