How to Lower Cost Per Lead From Roofing Direct Mail
On this page
Cost per lead is the number that quietly decides whether your direct mail makes money or slowly drains your marketing budget. You drop 10,000 postcards, you spend roughly five to seven grand all-in, you get a handful of calls, and somewhere in there is a number — what each of those calls actually cost you. Most roofers never calculate it cleanly. They look at the invoice from the mail house, glance at the phone log, and decide mail "works" or "doesn't work" on a gut feel. That gut feel is expensive.
The contractors who run profitable mail treat cost per lead (CPL) as an output of a system they control, not a number that happens to them. They know that CPL is mostly decided before a single postcard hits a mailbox — by who is on the list. Two roofers in the same metro, mailing the same postcard, the same week, can post wildly different CPL because one mailed 10,000 random homeowners and the other mailed 4,000 homeowners whose roofs are old enough to actually need work. Same printer, same postage rate, same creative. Triple the cost per lead for the first guy.
So when you ask "how do I lower my cost per lead from direct mail," the honest answer has three layers. The first and biggest lever is targeting — getting fewer, better names. The second is the mechanics — postage class, format, drop cadence, and offer — that change your cost and your response rate without changing your list. The third is measurement — because you cannot lower a number you are not tracking correctly, and most roofers track CPL wrong in ways that hide where the money is leaking. We'll work through all three with real math, worked examples, and the edge cases that trip people up.
A note before we start: every dollar figure here is an illustrative range based on common roofing-industry costs and publicly reported postage rates. Your printer, your market, your list, and your offer will move these numbers. Use the math, not the exact figures.
First, define cost per lead correctly — or you'll optimize the wrong thing
The phrase "cost per lead" gets used three different ways on the same sales floor, and the confusion costs people real money.
Cost per piece is what you pay to put one mailer in a mailbox — print plus postage plus list plus design, divided by quantity. This is a production number, not a marketing-performance number.
Cost per lead (CPL) is total campaign spend divided by the number of qualified leads it generated. The fight is over the word "qualified." A wrong number called you. A telemarketer called you. A homeowner with a brand-new roof who misread the postcard called you. None of those are leads. A lead is a homeowner with a real roof problem or interest who is willing to let you on the property. If you count every inbound ring, your CPL looks great and your sales team quietly hates the campaign.
Cost per acquired job (CPA), sometimes called cost per sale, is total spend divided by signed contracts. This is the number that actually pays your bills, and it's the one you should optimize for in the end. CPL is the leading indicator; CPA is the result.
Here's why the distinction matters for lowering CPL. Imagine two campaigns:
| Campaign A | Campaign B | |
|---|---|---|
| Pieces mailed | 10,000 | 4,000 |
| All-in cost | $6,500 | $3,400 |
| Calls generated | 70 | 44 |
| Qualified leads | 22 | 33 |
| Cost per call | $93 | $77 |
| Cost per qualified lead | $295 | $103 |
| Signed jobs | 4 | 8 |
| Cost per acquired job | $1,625 | $425 |
Campaign A mailed more, spent more, and got more raw calls. If you stop at "cost per call," A and B look roughly comparable. But B's list was tighter — homes whose roofs were genuinely due — so a far larger share of its calls were real, and it closed twice as many jobs on half the spend. The true cost per lead on B is a third of A's, and the cost per job is a quarter. The entire difference is the list. We'll come back to this table because it's the whole argument.
If you take one thing from this section: track qualified leads, not rings. Have whoever answers the phone tag each inbound call — new roof / not interested, wrong number, real prospect, booked inspection — in a simple log or your CRM. Without that tag, your CPL is fiction.
The CPL formula, with every cost most roofers forget
Let's build the real all-in cost of a mail drop, because a lot of "cheap" CPL math is cheap only because it ignores half the costs.
True campaign cost = list + design + print + postage + handling/mail-house fees + your follow-up labor.
Per 1,000 pieces, rough ranges as of 2026:
- List: $0 if you mail your own database; $30–$150 per thousand for a rented or compiled consumer list; more for specialized data appended (roof age, storm history). EDDM "lists" are free because you mail entire postal routes — which is the problem we'll get to.
- Design: amortized; a postcard design you reuse across 20,000 pieces costs almost nothing per piece. A one-off custom design might add $0.02–$0.05 per piece.
- Print: roughly $0.04–$0.10 per standard 6x9 or 6x11 postcard at volume; jumbo and folded self-mailers cost more.
- Postage: this is the big one and it's where format and routing decisions live. USPS Marketing Mail (formerly Standard) is materially cheaper than First-Class; EDDM Retail has its own per-piece rate. We'll dig into postage as a lever below.
- Mail-house handling: addressing, sorting, presort discounts, tabbing, delivery to the post office — often bundled into a per-piece quote.
- Follow-up labor: the hours your office spends answering, qualifying, and booking. Real, and usually invisible in CPL math. A campaign that generates 50 junk calls costs you labor even though none convert.
A typical all-in cost for a well-targeted Marketing Mail postcard campaign lands somewhere around $0.55–$0.75 per piece once everything is counted; First-Class jumbo or a fancy self-mailer can push past $1.00. EDDM can drop the per-piece cost toward $0.30–$0.45 because the postage rate is low and there's no list cost — but EDDM forces you to mail everyone on a route, which usually wrecks your CPL even though it flatters your cost per piece. That tension — cheap per piece versus cheap per lead — is the trap, and it's the core of this whole problem.
The CPL identity you actually want to manage:
Cost per lead = (cost per piece) ÷ (response rate × qualification rate)
Read that carefully, because it tells you exactly which levers exist. You can lower CPL by (1) lowering cost per piece, (2) raising response rate, or (3) raising the share of responses that are qualified. Targeting hits two of the three at once — a better list raises both response rate and qualification rate — which is why it's the dominant lever. Cost-per-piece tactics only touch one term and often trade against another (cheaper postage can mean worse routing).
Worked example. Say your cost per piece is $0.60.
- At a 0.5% response rate with 50% of responders qualified: CPL = $0.60 ÷ (0.005 × 0.50) = $0.60 ÷ 0.0025 = $240 per qualified lead.
- Improve targeting so response is 1.2% and qualification is 75%: CPL = $0.60 ÷ (0.012 × 0.75) = $0.60 ÷ 0.009 = $67 per qualified lead.
Same postcard, same cost per piece. CPL fell by 72% purely from mailing better names. Now you understand why everything downstream — postage tricks, offer tweaks, fancy formats — is secondary to the list.
Lever 1: Targeting — the 70% of your CPL that's decided before you print
If CPL is high, the list is the first suspect, almost every time. Here's how to think about it like a media buyer instead of like someone buying stamps.
Why "mail everyone in the zip code" is the most expensive cheap strategy
EDDM (Every Door Direct Mail) is seductive. No list to buy, low postage, blanket a route. The trouble is roofing demand is wildly uneven across any street. On a typical residential block you might have:
- Homes with roofs under 8 years old — won't need you for a decade, dead weight.
- Homes recently re-roofed but listed as "built 1995" in public records — invisible to year-built data, also dead weight.
- Homes with roofs 15–25 years old — your actual market.
- Rentals, homes for sale, and homes where the owner just spent their money elsewhere — low odds.
When you EDDM a route, you pay to mail all of them. If only 20% of the route is a real prospect, you've spent 80% of your postage and print reaching people who can't or won't buy. Your cost per piece looks fantastic; your cost per lead is bloated because the denominator (response from real prospects) is small relative to the spend.
EDDM has legitimate uses — tight, recently storm-hit neighborhoods where nearly every roof took a beating, or pure brand-awareness saturation when you're new in a market. But as a CPL-lowering strategy for steady-state lead gen, blanket EDDM usually moves CPL the wrong way. The math punishes you for mailing roofs that aren't due.
The targeting hierarchy, cheapest CPL first
Rank your mailing audiences by expected CPL. The order is remarkably consistent across markets:
- Past customers and warm CRM contacts. Cheapest leads you'll ever get. People who already paid you, plus old quotes that never closed. Response rates here run several times cold rates because there's trust and history. List cost is zero — it's your own data. If you've been in business five years and you're not mailing your own book quarterly, you're leaving the lowest-CPL channel you own completely untapped.
- Roofs that are actually due, by address. Cold homeowners, but filtered down to the ones whose roofs are old enough or storm-worn enough to plausibly need work. This is the difference between Campaign A and Campaign B above. More on how to build this list below.
- Geo + demographic filtered cold lists. A compiled consumer list narrowed by homeownership, home value band, length of residence, and neighborhood age. Better than EDDM, worse than roof-age targeting, because it still can't see the actual roofs.
- Raw EDDM / blanket zip. Cheapest per piece, usually highest CPL. Save it for saturation or fresh, tight storm zones.
The whole game of lowering CPL is climbing this ladder: shifting spend from the bottom toward the top.
Mining your own database first (the free lever everyone skips)
Before you spend a dollar on a cold list, pull these segments out of your CRM or even your old paper files and accounting software:
- Past customers 8+ years out. If you put a roof on in 2014, it may be hail-beaten or aging toward components (gutters, vents, repairs) now, and they trust you. Repairs, gutter work, and referrals live here.
- Unsold estimates from the last 3–5 years. People who got a quote and didn't pull the trigger. Their roof is now several years older and so is the problem. A "we were in your neighborhood again" reactivation mailer to old estimates is one of the highest-ROI drops in roofing.
- Service/repair-only customers who never got the full replacement. They know you, they have a roof you've already seen, and time is working in your favor.
These mailings cost you only print and postage — no list fee — and convert at multiples of cold rates. They are the single fastest way to drop your blended CPL, and most roofers ignore them because there's no vendor selling them the idea.
Building a "roofs that are actually due" cold list
This is where most of the real CPL gains live on the cold side, and where roofers get the data wrong. The critical mistake: using year built as a proxy for roof age. Public property records and the big real-estate sites give you the year the house was built, not the year the roof was last replaced. A 1990 house could have a 2-year-old roof; a 2005 house could be on its original failing 21-year-old roof. Re-roofs are invisible to year-built data — they rarely pull permits that update a usable record, and most data sources never capture them. Mailing "old houses" is a crude filter that buries real prospects under noise.
What you actually want is a list scored by:
- Roof age, estimated per address (as a range, not a false exact date) from aerial and satellite imagery, not from when the house was built.
- Storm history per roof — has this specific roof taken hail or damaging wind, and how hard? Not "did it hail in this county" but "what likely hit this roof."
- Standard filters — owner-occupied, home-value band, length of residence (people 7+ years in a home are likelier to invest), property type.
Layer those and your list collapses from "every homeowner in the metro" to "the homes whose roofs are genuinely aging out or storm-worn." That's the list that makes the CPL formula sing — higher response, higher qualification rate, both at once.
Suppress, suppress, suppress
Cheap and underused: remove the names that can't convert before you pay to print them.
- Suppress your own recent customers from cold drops (you already re-roofed them).
- Suppress known new construction and recently permitted re-roofs.
- Suppress renters and absentee owners if you're selling replacements.
- Suppress addresses you've mailed in the last 30–60 days unless you're intentionally running a sequence.
Every suppressed bad address is money you didn't waste, which mechanically lowers CPL because spend falls faster than leads.
How many names is the right number?
Roofers obsess over volume — "I need to mail 10,000 to get enough calls." Reverse the math instead. Start from the jobs you can actually handle and price backward through your real rates.
Say your crews can absorb 6 new replacement jobs a month from mail without dropping balls. Work backward:
- 6 jobs ÷ 20% close on qualified leads = 30 qualified leads needed.
- 30 qualified leads ÷ 70% qualification rate (a good roof-age-targeted list) = ~43 calls needed.
- 43 calls ÷ 1.1% response rate = ~3,900 pieces, not 10,000.
If you instead mailed a blanket EDDM list at 0.4% response and 45% qualification, you'd need roughly 17,000 pieces to hit the same 6 jobs — and you'd answer four times as many junk calls to get there. The tight list does the same work with a quarter of the postage and a fraction of the front-desk labor. The right quantity is the smallest number of due roofs that fills your capacity, not the biggest number your budget allows. Mailing more than you can service is its own CPL leak: leads age out while you're buried, and an aged lead is a wasted dollar.
A practical sizing rule: pick your monthly job target, divide by your honest close rate and qualification rate and your list's response rate, and mail that. Then, if your list is good and tight, you'll often run out of "due" names before you run out of budget — which is a signal to widen the targeting criteria slightly (a few years younger on roof age) rather than to dump the remaining budget into a blanket route.
A quick CPL diagnostic by symptom
When CPL is too high, the symptom tells you the cause. Use this to triage instead of guessing:
| Symptom | Most likely cause | First fix |
|---|---|---|
| Lots of calls, few qualify | List too broad (new roofs, renters) | Roof-age + storm targeting, suppressions |
| Few calls at all | Weak offer, wrong format, or list with no demand | Sharper CTA; mail warmer segment; check list freshness |
| Good calls, few jobs | Slow/weak follow-up or sales process | Speed-to-lead, call-back SLA, sales coaching |
| Great cost per piece, bad cost per job | EDDM / blanket trap | Move up the targeting ladder |
| CPL swings wildly drop to drop | No tracking; you're flying blind | Call-tracking numbers + ledger |
| CPL fine but jobs are tiny | Optimizing price over quality | Judge by cost per profitable job |
Most CPL problems are one or two of these, not all six. Find your symptom, fix that lever, re-measure.
Lever 2: The mechanics — postage, format, offer, and cadence
Once the list is right, the production and offer choices are the second tier of CPL control. Smaller effect than targeting, but real, and some are nearly free to fix.
Postage class: the biggest cost-per-piece lever
Postage is often your single largest line item. The choice between USPS Marketing Mail and First-Class Mail is a direct CPL trade-off:
- USPS Marketing Mail (presorted, bulk): meaningfully cheaper per piece, but you need a mailing permit (or use a mail house that has one), a minimum quantity (200 pieces / 50 lbs), and you accept slower, non-guaranteed delivery and no automatic forwarding/return of undeliverables. For steady, non-time-sensitive lead gen, this is usually the right call and the cheapest path to a low cost per piece.
- First-Class Mail: more per piece, but faster, forwarded/returned if undeliverable (which cleans your list for free), and it feels more personal — useful for letters and time-sensitive storm response where speed matters.
- EDDM Retail: low per-piece postage, no permit needed for the retail version, but you mail whole carrier routes (the targeting problem above).
Check current rates directly at the USPS Postal Explorer / Business pricing pages before you budget — rates change, and your mail house can tell you which presort discounts you qualify for. The cheap move many roofers miss: working with a mail house that has the volume to hit deeper presort and automation discounts you could never get mailing solo.
Returned mail is free list hygiene
If you mail First-Class, undeliverable pieces come back. Every return is a bad address you can purge so you stop paying to mail it. Even on Marketing Mail you can pay a small ancillary service fee for address correction. Cleaning dead addresses out of a recurring list directly lowers CPL over time because your spend stops leaking into mailboxes that don't exist.
Format: match spend to the audience's temperature
- Standard postcards (6x9, 6x11): cheapest, fine for cold roof-age-targeted drops. Don't overspend on a cold list.
- Jumbo postcards: more presence in the mailbox, higher cost. Worth testing against standard, but test — don't assume.
- Letters / "checks" / hand-addressed look: higher cost per piece, higher response among warm audiences (past customers, old estimates). The personal feel can be worth it where trust already exists.
- Self-mailers / folded pieces: more room, more cost.
Rule of thumb: spend up on format only where the audience is warm enough to justify it. A jumbo glossy to a cold zip is burning money; a personal-looking letter to a past customer often prints.
The offer and the call-to-action move response rate
Response rate is a denominator in the CPL formula, so anything that lifts it lowers CPL. What lifts roofing response without breaking trust or the law:
- A concrete, honest reason to call now. "Free roof inspection and a documented condition report" is a real, deliverable offer. A specific, believable hook beats a vague "call us for roofing."
- A clean primary action. One phone number, big. A QR code to a simple landing page or a way to text. Make responding effortless.
- A trust signal. Local address, license number, years in business, real photos. Roofing is a high-trust purchase; anonymity tanks response.
- A reason it's relevant to them. This is where roof-age and storm targeting compounds: a postcard that can honestly speak to the age or storm exposure of that block reads as relevant, not as junk.
A word of caution on storm and insurance language, because it's where roofers get themselves in trouble and where some offers cross legal lines. You may absolutely advertise that you inspect and document roof damage and prepare an accurate repair estimate. What you may not do in your mail is promise the homeowner a payout or approval, promise to "handle" or negotiate their insurance claim for them, promise to waive, absorb, or erase their deductible, or advertise a "free roof." Those claims can constitute unlicensed public adjusting and can violate state insurance and deductible-rebate laws and FTC rules on deceptive advertising. The safe and still-powerful frame: you document the roof thoroughly, write an accurate, Xactimate-aligned repair estimate, and hand it to the homeowner — the homeowner files and the insurer decides coverage. Keep that line and your storm mailers stay both effective and clean. (We have a whole separate piece on documentation workflow; the point here is that a non-compliant offer is not a CPL strategy, it's a liability.)
Cadence: one drop is a coin flip, a sequence is a system
Single drops underperform because mail is a frequency game — the prospect needs to need you at the moment your card is on the counter. Two practical cadence patterns:
- Sequencing a cold list: hit the same targeted list 2–3 times over 6–10 weeks. Response on the second and third touch often costs less per lead than the first because the list is already warmed and you've already paid the targeting cost. Watch fatigue — beyond 3–4 touches in a season, returns usually fade.
- Seasonal recurrence to your own book: mail past customers and old estimates on a regular calendar (e.g., quarterly), tied to seasonality — spring/early summer ahead of storm season, fall ahead of winter.
Spreading the same total budget across a sequenced, targeted list almost always beats one giant blanket drop on CPL.
Timing the drop to demand
Cost per lead also moves with when you mail, because response depends on whether the roof is on the homeowner's mind. A few timing patterns that lower CPL by lifting response:
- Ahead of, not deep into, peak season. Mail in late winter and early spring so you're in the mailbox before the rush, when prospects are starting to think about the roof and competitors haven't saturated yet. Mailing at the height of summer means competing for the same mailbox and the same crews.
- After a real storm, into the actual impact area — fast and clean. Storm response is the one place blanket-ish mailing can earn its keep, because a fresh, tight hail or wind footprint is a neighborhood where most roofs genuinely took a hit. The keys are (1) define the footprint accurately — a per-roof storm read beats "the whole county got a watch," and (2) keep the offer compliant (document-and-estimate, never payout or deductible promises). Speed matters here because attention fades and out-of-town crews flood in; First-Class postage is often worth the premium for the few days it saves.
- Avoid the dead windows. Around major holidays mail gets buried and ignored. A piece that lands the week of a holiday is money spent for a glance into the recycling bin.
You can't always control timing, but when you can, mailing into rising demand instead of saturated demand is a free lift to response — and therefore a free cut to CPL.
Don't let the postcard sink an otherwise good campaign
Targeting decides most of CPL, but a genuinely bad creative can waste a great list. A few rules that keep the piece from dragging response down:
- One message, one action. A postcard is read in two seconds. Lead with the relevant reason ("Your roof may be reaching the age where damage hides in plain sight"), one offer, one big phone number. Cramming three services and four phone numbers kills response.
- Look local and real. A local address, a license number, real photos of your crews and finished roofs, and a recognizable name beat stock photos and a national-looking template. Roofing is a trust purchase; anonymity costs you calls.
- Make the back work. The address side still has room for a trust line, a short bulleted "why now," and the offer restated. Don't waste it.
- Proofread the phone number and QR. It sounds dumb. People mail thousands of pieces with a transposed digit or a dead QR link and torch the whole budget. Test-scan the QR and test-call the number before the drop goes out.
These won't, by themselves, give you a low CPL — only the list does that — but a sloppy piece can quietly cut a good list's response in half, which doubles your CPL for no reason.
Lever 3: Measurement — you can't lower a number you track wrong
Here's the uncomfortable part. Most roofers who think they have a CPL problem actually have a measurement problem — they don't know their real CPL, so they can't see which campaign, list, or zip is dragging the average up. Fix the tracking and the optimization becomes obvious.
Use trackable response paths
- Call tracking numbers. Put a unique tracking phone number on each campaign or each list segment. Cheap, and it tells you exactly which drop produced which call. Without it, you're guessing.
- Unique QR codes / landing pages / promo codes per campaign. A QR that lands on a campaign-specific page lets you count and attribute web responses.
- Ask and log. Train whoever answers to ask "how did you hear about us?" and to log the answer plus the qualification tag in your CRM, every single time.
Track all the way to the job, not only the call
Build a simple campaign ledger. One row per campaign, columns for:
| Campaign | Pieces | All-in cost | Cost/piece | Calls | Qualified leads | Booked inspections | Signed jobs | CPL | Cost/job | Gross profit | ROAS |
|---|
Fill it in for every drop. Now you can see that the EDDM route had a great cost per piece and a terrible cost per job, while the roof-age list cost more per piece and produced your cheapest jobs. That table is how you decide where next quarter's budget goes. The roofers with low CPL aren't smarter — they keep this ledger and the ones with high CPL don't.
Measure CPL by segment, not blended
A blended CPL across "all mail" hides the truth. Break it out:
- CPL on past-customer drops (should be lowest)
- CPL on roof-age-targeted cold lists
- CPL on geo/demo cold lists
- CPL on EDDM
The blended number might look "fine" while one segment quietly bleeds. Segment-level CPL tells you exactly what to cut and what to scale.
Judge against gross profit, not the headline number
Don't get hypnotized by a low CPL on its own. A $40 CPL that produces leads who only ever want $300 repairs is worse than a $120 CPL that produces replacement jobs. Always close the loop to cost per acquired job and gross-profit return on ad spend. The right target isn't "lowest possible CPL" — it's "lowest cost per profitable job." Sometimes paying a bit more per lead for a much better-qualified prospect is the correct move.
A worked example: cutting a real campaign's CPL in half
Let's run a believable before/after so the levers stack visibly. A residential roofer, steady-state lead gen (not a storm chase).
Before — the blanket drop.
- 12,000 EDDM pieces across a metro's routes
- Cost per piece (print + EDDM postage, no list): ~$0.40 → $4,800 all-in
- Response: 0.4% → 48 calls
- Qualification rate: 45% (lots of new roofs, renters, not-interested) → ~22 qualified leads
- CPL = $4,800 ÷ 22 = $218 per qualified lead
- Close rate on qualified: 20% → ~4 jobs → cost per job ≈ $1,200
After — same budget, smarter system. Keep spend near $4,800 and redeploy:
- Mine the book first. Pull 1,500 past customers (8+ yrs) and old unsold estimates. Mail them a personal-feeling First-Class postcard.
- 1,500 × ~$0.75 = $1,125
- Response ~4% (warm) = 60 calls, ~85% qualified = ~51 qualified leads
- Roof-age-targeted cold list. Take the rest of the budget for a tight cold drop.
- Build a list of ~5,500 homes scored by estimated roof age + storm exposure, Marketing Mail.
- List/data + print + postage ~$0.65/piece = $3,575
- Response ~1.1% = ~61 calls, ~75% qualified = ~46 qualified leads
Now total it:
| Before (EDDM) | After (mined book + roof-age cold) | |
|---|---|---|
| Spend | $4,800 | $4,700 |
| Qualified leads | 22 | ~97 |
| Blended CPL | $218 | ~$48 |
| Jobs (warm closes ~30%, cold ~20%) | 4 | ~24 |
| Cost per job | ~$1,200 | ~$196 |
Roughly the same money. CPL fell about 78%, cost per job about 84%, and lead volume more than quadrupled. Not because the postcard got cleverer — because the spend moved up the targeting ladder and the warm book got mailed. These figures are illustrative, but the shape of the result is exactly what happens when you stop paying to mail roofs that aren't due.
What pros get wrong (the CPL leaks nobody talks about)
After enough campaigns, the same mistakes show up. Each one quietly inflates CPL.
- Counting rings as leads. Inflates response, hides the real (worse) CPL, and makes you keep funding bad lists. Tag qualification or your numbers lie.
- Optimizing cost per piece instead of cost per job. The EDDM trap. Cheap pieces, expensive jobs.
- Year-built as roof-age. Re-roofs are invisible in that data; you mail homes you already lost and skip homes that are due. This is probably the single most common targeting error in roofing mail.
- One-and-done drops. Mail is frequency. A single blast underperforms a sequence to the same list.
- Never mailing the CRM. The cheapest leads in the building, ignored because no vendor pitches you your own data.
- No tracking numbers. If you can't attribute calls to campaigns, you can't lower CPL by segment because you can't see the segments.
- Untracked follow-up gaps. Leads that don't get called back fast aren't leads — they're sunk cost. A slow office turns a good CPL into a wasted one because the leads you paid for never convert. Speed-to-lead is part of CPL economics even though it happens after the mailbox.
- Chasing the lowest CPL instead of the most profitable job. A floor on lead quality matters more than a floor on lead price.
- Mailing storm offers that cross legal lines. Promising payouts, "free roofs," or to handle the claim isn't a hot offer — it's regulatory exposure. Document-and-estimate framing keeps you safe and still converts.
Where address-level roof data fits — and where it doesn't
The recurring theme above is that lowering CPL is mostly about not paying to mail roofs that aren't due. The hard part has always been knowing which roofs those are. Year-built data can't tell you. Driving every street with a clipboard doesn't scale. The big aerial-measurement tools tell you the size of a roof once you already know to look at it — they don't tell you which roofs across a metro are aging out or storm-worn.
That gap is the specific thing RoofPredict was built to fill. It scores roofs across an area by an estimated roof-age range per address (read from aerial imagery, not from when the house was built — so re-roofs that fool year-built data are far less likely to fool it) and by storm physics modeled on each individual roof — not "did it hail in this county," but a per-roof read on the hail and wind that specific roof likely absorbed. Then it ranks addresses so you can build a mailing list that's already climbed to the top of the targeting ladder: the homes most likely to actually need you. It can also enrich a list you already have — appending roof-age and storm signals to your own CRM or compiled list so you can suppress the new roofs and prioritize the due ones before you print.
Tie that straight back to the CPL formula. A roof-age-and-storm-scored list raises both your response rate and your qualification rate at the same time — the two denominators that drive CPL — which is mathematically the most efficient way to cut cost per lead. It's the difference between Campaign A and Campaign B at the top, and between the before/after worked example just above.
Two honest limits, because the math only works if you respect them. Roof age is a range, not a birth certificate — an estimate from imagery, useful for ranking and suppression, not a guarantee about any single roof. And storm exposure is modeled odds, not proof of damage — it tells you which roofs were most likely worn by a storm and worth documenting, not that a given roof has a payable claim. Treat the data as a way to mail fewer, better homes and to walk in with a relevant reason to be there, and it does exactly what lowering CPL requires: it shrinks the denominator of wasted mail. Treat it as a promise about any one roof and you'll be disappointed — and if it's a storm, remember the line: you document and estimate, the homeowner files, the insurer decides. If you want to see whether the ranking holds up on streets you already know, the most honest test is to hand it roofs you've already worked and check whether it flagged them. That's the right way to evaluate any targeting data — including ours.
A 30-day plan to lower your CPL
You don't need to overhaul everything at once. Run this sequence over a month.
Week 1 — measure the truth.
- Put a unique call-tracking number on every active and upcoming campaign.
- Build the campaign ledger (the table above). Backfill your last 3–6 months as best you can.
- Start tagging every inbound call: qualified, new-roof/not-interested, wrong number, booked. Train the front desk.
Week 2 — mine the book. 4. Pull past customers 8+ years out, unsold estimates from the last 3–5 years, and repair-only customers. 5. Drop a personal-feeling reactivation mailer to that segment. This is your fastest CPL win and it costs you only print and postage.
Week 3 — fix the cold list. 6. Stop blanket EDDM as your default. Build or buy a cold list scored by roof-age range and storm exposure, not year built. Apply suppressions (recent customers, new construction, renters). 7. Right-size the format to the audience — don't put jumbo glossies on a cold list. 8. Confirm you're on the cheapest appropriate postage class (Marketing Mail for non-urgent), and ask your mail house which presort discounts you qualify for.
Week 4 — sequence and read the numbers. 9. Plan a 2–3 touch sequence to the targeted cold list rather than one big drop. 10. After leads come in, compute CPL by segment and cost per job. Cut the worst segment, move that budget up the targeting ladder, and repeat.
Do this and your blended CPL falls for a boring, durable reason: you stop paying to mail roofs that don't need you, you mail your own warm book that you were ignoring, and you finally measure clearly enough to keep cutting what doesn't work.
Lowering cost per lead from direct mail isn't a trick. It's a discipline: better names, smarter mechanics, honest measurement — in that order of impact. The contractors who win at mail aren't the ones with the cleverest postcard. They're the ones who made sure almost every piece landed in front of a roof that was actually due, tracked every call back to the campaign that earned it, and quietly moved their money toward the lists that produced profitable jobs. Do that, and direct mail stops feeling like a gamble and starts behaving like the measurable, repeatable acquisition channel it can be.
FAQ
What is a typical cost per lead from roofing direct mail?
It varies enormously with targeting, which is the point. A blanket EDDM drop often produces a cost per qualified lead in the low-to-mid hundreds of dollars because so many pieces reach roofs that aren't due. A tightly targeted list scored by roof age and storm exposure can pull that into the low double digits to low hundreds, and mailing your own past customers and old estimates is cheaper still. Judge yourself by cost per qualified lead and ultimately cost per acquired job, not cost per ring.
Is EDDM or a targeted mailing list better for lowering cost per lead?
Targeted almost always wins on cost per lead, even though EDDM looks cheaper per piece. EDDM forces you to mail every home on a postal route, including new roofs, renters, and recently re-roofed homes that can't buy, so your postage gets diluted across non-prospects. A list scored by roof age and storm history concentrates spend on homes that are actually due, which raises both response rate and qualification rate. EDDM earns its keep mainly for saturation in a market you're new to, or for fast response into a tight, real storm footprint.
Why shouldn't I use year built to target old roofs?
Because year built tells you the age of the house, not the age of the roof. Re-roofs almost never update a usable public record, so a 1990 house can have a two-year-old roof and a 2005 house can be on its original failing roof. Targeting on year built buries the homes you want under homes you already lost. You want roof age estimated per address from aerial imagery, expressed as a range, plus storm exposure on that specific roof.
How many pieces should I mail?
Work backward from capacity, not budget. Decide how many jobs your crews can absorb in a month, divide by your close rate, qualification rate, and the list's response rate, and mail that quantity. A tight roof-age-targeted list often hits your job target with a quarter of the pieces a blanket route would need. Mailing more than you can service is its own cost-per-lead leak, because leads age out unworked and an unworked lead is a wasted dollar.
Does a sequence really beat one big drop?
Usually, yes. Direct mail is a frequency channel — the prospect has to need you at the moment your piece is on the counter. Hitting the same targeted list two or three times over six to ten weeks tends to lower cost per lead because later touches convert on a list you've already paid to target and warm. Watch for fatigue beyond three or four touches in a season, where returns fade and you're paying to annoy people.
What's the difference between cost per lead and cost per acquired job, and which matters?
Cost per lead is total spend divided by qualified leads; cost per acquired job is total spend divided by signed contracts. Cost per lead is your leading indicator, but cost per acquired job is what actually pays your bills, so optimize for the job in the end. A cheap lead that only ever wants a small repair is worth less than a pricier lead that turns into a replacement. Aim for the lowest cost per profitable job, not the lowest lead price.
How do I actually track cost per lead by campaign?
Put a unique call-tracking number and a campaign-specific QR code or promo code on each drop or list segment, train whoever answers the phone to ask how the caller heard about you and to tag each call as qualified or junk, and log everything in a simple campaign ledger. Then compute cost per lead by segment, not blended, and follow each lead through to a signed job. You can't lower a number you're not measuring cleanly, and most roofers who think they have a cost problem actually have a tracking problem.
Can roof-age and storm data really lower my cost per lead?
It targets the two things that drive cost per lead at once — response rate and qualification rate — by concentrating your mail on roofs that are genuinely aging out or storm-worn instead of every home in a zip. RoofPredict scores roofs across an area by an estimated roof-age range per address (read from aerial imagery, not year built) and by storm physics modeled on each roof, and can enrich your own list so you suppress new roofs before printing. Honest limits: roof age is a range, not an exact date, and storm exposure is modeled odds, not proof of damage on any single roof.
What can I legally say in a storm-response roofing mailer?
You can advertise that you inspect roofs, document damage thoroughly, and prepare an accurate repair estimate, and you can state facts about your own scope. You cannot promise the homeowner a specific payout or approval, promise to handle or negotiate their insurance claim, promise to waive, absorb, or erase their deductible, or advertise a free roof — those can amount to unlicensed public adjusting and can violate state insurance, deductible-rebate, and deceptive-advertising laws. The safe and effective frame: you document and estimate, the homeowner files, and the insurer decides coverage.
How fast do I need to follow up on mail leads?
Fast enough that the lead is still a lead. Mail leads decay quickly — a homeowner who called about their roof and didn't hear back promptly will call the next roofer's postcard. A slow office turns a good cost per lead into a wasted one, because the leads you paid postage for never convert. Set a call-back standard measured in minutes, not days, for fresh inbound, and treat speed-to-lead as part of your cost-per-lead economics even though it happens after the mailbox.
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
- USPS Business Customer Gateway and Postage Pricing — usps.com
- USPS Postal Explorer (DMM and rate references) — pe.usps.com
- Every Door Direct Mail (EDDM) — USPS — usps.com
- USPS Postage Options overview — usps.com
- FTC — Truth in Advertising — ftc.gov
- FTC — Advertising and Marketing Basics — ftc.gov
- Texas Department of Insurance — Roof repairs after a storm — tdi.texas.gov
- Texas Department of Insurance — Public insurance adjusters — tdi.texas.gov
- NOAA National Weather Service — Storm Prediction Center — spc.noaa.gov
- NOAA NCEI — Storm Events Database — ncdc.noaa.gov
- Insurance Institute for Business & Home Safety (IBHS) — Hail — ibhs.org
- National Roofing Contractors Association (NRCA) — nrca.net
- U.S. Census Bureau — American Housing Survey — census.gov
- RoofPredict — roofpredict.com
Related Articles
How to Get Roofing Customers Without Buying Internet Leads
Shared internet leads are expensive, slow, and sold to four of your competitors at once. Here is how working roofing companies build a steady flow of their own jobs instead.
Is Buying Roofing Leads Profitable? A Contractor's Real Numbers Analysis
The honest math on purchased roofing leads, where contractors lose money without realizing it, and how to decide if buying leads belongs in your acquisition mix.
How to Reduce Roofing Ad Spend Without Losing Leads
Most roofers don't have an ad-spend problem. They have a measurement problem. Here's how to cut waste channel by channel and keep the same job volume.