Direct Mail ROI for Roofers: How to Make the Math Actually Work
On this page
Most roofers who tell you direct mail is dead ran one untracked blast of 5,000 generic postcards to a zip code, got three calls, and quit. Most roofers who tell you direct mail is the best channel they have are running tight lists to roofs that are actually due, with a real offer, a phone number they can track, and a spreadsheet that tells them their true cost per acquired job. The channel is the same. The difference is everything around it.
Direct mail still works for roofing for one boring reason: a roof is a high-ticket, low-frequency, address-bound purchase. The person who needs you lives at a fixed location, the buying trigger (age plus weather) is partly predictable, and a $9,000 to $30,000 job can absorb a lot of postage and still clear a strong margin. The math is friendlier than almost any other trade. But friendly math does not mean automatic profit. It means the channel rewards operators who actually run the numbers and punishes the ones who mail on vibes.
What follows is the working version: how to calculate direct mail ROI honestly, the cost and response benchmarks to plan against, how to target so you stop paying to reach roofs that will never buy, how to track results when half your responders call instead of scanning a QR code, and the specific places roofers leave money on the table. Numbers here are illustrative planning figures, not promises. Your market, your crew capacity, and your close rate move every line.
The only ROI formula that matters (and the four it hides)
Everyone quotes the same headline formula, so let's get it out of the way and then immediately make it useful.
ROI = (Revenue from the campaign − Total campaign cost) ÷ Total campaign cost
Mail 5,000 pieces at a fully loaded $0.70 each ($3,500), land four jobs averaging $11,000 in revenue at a 45% gross margin, and you collected $19,800 in gross profit against $3,500 spent. ROI on spend is huge. But that single number hides four sub-metrics that actually run your business, and if you only watch the headline you will make bad decisions for months before the truth shows up in your bank account.
The four numbers underneath:
- Cost per piece (CPP) — everything it costs to get one mailer into one mailbox, fully loaded.
- Response rate (RR) — the share of recipients who take the action you asked for (call, scan, form fill, text).
- Lead-to-appointment and appointment-to-sale rates — your sales funnel, which mail does not control but absolutely determines whether mail is profitable.
- Average job value and gross margin — what a closed job is actually worth to you after materials and labor, not the sticker price.
Chain them together and you get the number to obsess over: cost per acquired job (CPA), and from there return on ad spend (ROAS) expressed in gross profit. Headline ROI is the scoreboard. These four are the gears. When ROI drops, one of these gears slipped, and you need to know which one before you change anything.
Worked example, end to end
Let's run a realistic campaign so every later section has a reference point.
| Step | Metric | Value |
|---|---|---|
| Volume | Pieces mailed | 5,000 |
| Cost | Fully loaded cost per piece | $0.72 |
| Cost | Total campaign cost | $3,600 |
| Response | Response rate | 0.9% |
| Response | Total responses (calls + scans + forms) | 45 |
| Funnel | Responses that became real leads (qualified, in service area, roof-related) | 60% → 27 |
| Funnel | Leads that booked an inspection | 70% → 19 |
| Funnel | Inspections that closed | 30% → ~6 |
| Value | Average job revenue | $11,500 |
| Value | Gross margin | 45% |
| Result | Revenue | $69,000 |
| Result | Gross profit | $31,050 |
| Result | Cost per acquired job | $600 |
| Result | Gross-profit ROAS | 8.6x |
Six jobs from 5,000 pieces. To a skeptic that sounds terrible. To anyone who did the arithmetic, a $600 cost to acquire a job worth $5,175 in gross profit is a phenomenal channel. That gap, between how it feels and what it earns, is exactly why untracked roofers quit a channel that was working.
Notice something else: the campaign cost line ($3,600) is the smallest number that matters in the whole table. Your funnel rates swing the outcome ten times harder than your postage does. A roofer who closes 35% instead of 30% on the same mail just earned a seventh job for zero extra marketing spend. We will come back to this, because it is the single most overlooked lever in roofing direct mail.
Run the sensitivity table before you run the campaign
The worked example above is one scenario. Smart operators never plan against a single point estimate; they build a small sensitivity table that shows what happens when each gear moves, so they know which lever to pull when reality disappoints. Hold volume at 5,000 pieces and $3,600 spend, keep the job at $11,500 revenue and 45% margin ($5,175 gross profit each), and watch how jobs and profit move when response and close rates shift.
| Response rate | Responses | Close-through (resp→job) | Jobs | Gross profit | CPA | Gross-profit ROAS |
|---|---|---|---|---|---|---|
| 0.6% | 30 | 10% | 3 | $15,525 | $1,200 | 4.3x |
| 0.9% | 45 | 13% | 6 | $31,050 | $600 | 8.6x |
| 0.9% | 45 | 18% | 8 | $41,400 | $450 | 11.5x |
| 1.3% | 65 | 13% | 8 | $41,400 | $450 | 11.5x |
| 1.3% | 65 | 18% | 12 | $62,100 | $300 | 17.3x |
Two lessons jump out. First, improving the response rate (better list, better offer) and improving close-through (better phone process, better sales) are worth almost exactly the same — moving response from 0.9% to 1.3% and moving close-through from 13% to 18% both get you to eight jobs. You should work both, but if your phone and sales process are leaky, fixing them is free relative to buying more mail. Second, the difference between the worst row and the best row is a 4x swing in jobs from the same postage. The channel does not decide whether you profit; your list, your offer, and your follow-through do. Build this table for your own numbers before you approve a single print order, and you will stop treating direct mail as a coin flip.
What direct mail actually costs a roofer
You cannot calculate ROI on a guess. Here is how cost per piece breaks down, and where the hidden money goes.
Cost-per-piece components
| Component | Typical range per piece | Notes |
|---|---|---|
| Design (amortized) | $0.01–$0.10 | One good template spread over thousands of pieces; do it once, do it well |
| Printing | $0.03–$0.30 | Postcards cheapest; folded self-mailers and letters cost more |
| List / data | $0.00–$0.15 | EDDM saturation list is free; targeted homeowner lists cost per record |
| Postage | $0.20–$0.75 | EDDM Retail vs. First-Class Marketing vs. First-Class stamp — huge spread |
| Mail house / handling | $0.02–$0.08 | Sorting, addressing, drop-off; skipped if you self-mail EDDM |
| Tracking (call number, QR, landing page) | $0.005–$0.02 | Trivial per piece, non-negotiable for ROI |
The two big swing factors are postage class and list type, and they trade off against each other. EDDM (Every Door Direct Mail) gives you the cheapest postage in the country but forces you to mail every address on a carrier route — no cherry-picking. A targeted list lets you mail only the roofs you want but costs more in data and usually more in postage. The right answer depends entirely on how good your targeting needs to be, which depends on your market.
EDDM vs. targeted lists: the real tradeoff
EDDM Retail lets you mail standard-size pieces to every active address on chosen postal carrier routes at a deeply discounted per-piece postage rate, with no mailing list and no address printing required. The USPS Every Door Direct Mail tool lets you pick routes and see household counts and demographics per route. It is the cheapest way to blanket a neighborhood.
EDDM is the right tool when:
- You are working a specific neighborhood where most homes are the same age (a 1990s subdivision where every roof is hitting end-of-life within a few years of each other).
- You just completed a job and want to saturate the surrounding streets while your sign, dumpster, and crew are visible (the "ring around the job" tactic — one of the highest-ROI mail plays in roofing).
- A storm hit a defined geography and you want fast, cheap coverage of the impact zone.
Targeted homeowner lists win when:
- Your service area is a mixed-age sprawl where blasting whole routes wastes most of your postage on roofs that are five years old or on renters who will never authorize a re-roof.
- You want to filter by homeownership, length of residence, home age, estimated home value, or equity — variables that materially change who can and will buy.
- You are layering roof-specific signals (age range, storm exposure) and only want to pay to reach the roofs that are genuinely due.
The trap roofers fall into: they pick EDDM purely because the postage line is cheapest, then mail 10,000 homes where maybe 1,500 have a roof anywhere near due. The postage was cheap; the cost per relevant household reached was awful, and so was the response. Cheap postage on the wrong doors is the most common way roofers convince themselves mail does not work.
Cost per relevant household: the number nobody calculates
Here is a calculation almost no roofer runs, and it reframes the whole EDDM-versus-targeted debate. Stop comparing postage per piece and start comparing cost to reach one household that could plausibly buy.
Say EDDM postage plus printing runs you $0.45 a piece, and a targeted/enriched list runs $0.72 a piece. EDDM looks 38% cheaper. Now apply relevance. On the broad EDDM route, suppose 18% of homes have a roof near the replacement window and are owner-occupied. On the targeted list ranked by roof-age range and storm exposure, suppose 70% do.
| Approach | Cost per piece | Relevant share | Cost per relevant household |
|---|---|---|---|
| Broad EDDM route | $0.45 | 18% | $2.50 |
| Targeted / enriched list | $0.72 | 70% | $1.03 |
The "expensive" list is less than half the true cost of the "cheap" blast, because you stopped paying to reach roofs that cannot buy. The headline postage number lied. This is the math that should drive your channel choice in any mixed-age market — and the only reason EDDM still wins in same-age subdivisions is that there the relevant share on a whole route is already high, so the cheap postage is also efficiently targeted by geography alone. Match the tool to how concentrated your due roofs already are.
Response-rate reality: stop comparing yourself to email
Direct mail response rates look tiny to anyone raised on digital, but the comparison is meaningless because the denominators and the dollar values are different planets. Industry surveys of direct mail across sectors put response rates in roughly the 0.5% to 5% range depending heavily on whether you mail to a cold prospect list or to people who already know you (your past customers and warm leads). The Data and Marketing Association's long-running response-rate work consistently shows house lists (people you have a prior relationship with) dramatically outperforming cold prospect lists.
For roofing cold prospect mail, a healthy planning band is 0.5% to 1.5%. Past-customer and referral-adjacent mailings can run several times higher. Storm-response mail into a fresh, accurately defined impact zone can spike well above cold-prospect norms for a short window because the buying trigger just happened to everyone at once.
But here is the discipline that separates pros: response rate is a vanity metric until you attach it to dollars. A 2% response rate on a list where almost nobody can buy is worse than a 0.7% response rate on a list where every responder is a qualified, due-roof homeowner. You are not optimizing for responses. You are optimizing for cost per acquired job. Always carry the math all the way down.
A response-rate planning table
Use this to sanity-check what a campaign needs to deliver to clear your bar. Assumes $0.72 CPP, $11,500 average job, 45% margin, and a combined response-to-close rate of 13% (about the funnel in the worked example).
| Pieces | Response rate | Responses | Jobs (~13% of responses) | Spend | Gross profit | CPA |
|---|---|---|---|---|---|---|
| 5,000 | 0.5% | 25 | 3 | $3,600 | $15,525 | $1,200 |
| 5,000 | 1.0% | 50 | 6–7 | $3,600 | ~$33,500 | ~$554 |
| 5,000 | 1.5% | 75 | 10 | $3,600 | $51,750 | $360 |
| 10,000 | 0.8% | 80 | 10 | $7,200 | $51,750 | $720 |
Every row is profitable on gross margin. That is the point worth sitting with: in roofing, because the job value is so high relative to the postage, even a mediocre response rate clears profit if the funnel holds and the list is reasonable. The failures almost never come from the response rate being a little low. They come from no tracking, no targeting, a broken phone follow-up, or a margin that was thinner than the owner admitted.
Targeting: where most of the ROI is actually won
If cost per piece is the smallest lever and the funnel is the biggest, targeting is the lever that decides whether the funnel even gets a fair shot. Mail the right households and your response rate, qualification rate, and close rate all rise together. Mail the wrong ones and no creative or offer saves you.
The targeting variables that move roofing response
Rank these by how directly they predict a roof purchase:
- Roof age / home age. The single most predictive variable you have. Asphalt shingle roofs typically reach replacement consideration somewhere in the 15-to-25-year window depending on material, ventilation, and exposure, per general industry and manufacturer guidance. A roof that is 4 years old will not buy from you no matter how good your postcard is. A roof in its replacement window is your entire market. If you can target by when the roof was likely last done, you have changed the game.
- Storm / hail / wind exposure. A roof that took a real hail or high-wind event has an accelerated, near-term need even if it is younger than the typical replacement window. Mailing the impact footprint of a verified event, fast, is one of the highest-response plays in the trade.
- Homeownership. Renters cannot authorize a re-roof. Filtering to owner-occupied homes alone removes a large slice of dead postage in many markets.
- Home value / equity / length of residence. These proxy for ability and willingness to pay, and for whether the homeowner is settled enough to invest in the property.
- Neighborhood roof-age clustering. Subdivisions built in the same year tend to need roofs in the same window. One due roof on a street usually means several.
Notice that the top two variables — roof age and storm exposure — are roof-specific, not person-specific. Standard consumer mailing lists are built around the person and the property's public records (home age, value, owner name). They generally do not tell you the condition or replacement timing of the actual roof, and they do not tell you which roofs a specific storm wore out. That gap is exactly where roofers overpay: they buy a homeowner list filtered on home age and treat "home built in 2002" as if it meant "roof installed in 2002," when the roof may have been replaced in 2016 after a storm — or may be original and overdue. Home age is a weak proxy for roof age, and a weak proxy is where wasted postage hides.
Closing the roof-age gap with per-roof data
This is where modeling the roof itself, rather than the house record, changes your cost per relevant household. RoofPredict exists to fill exactly that gap: it estimates a roof-age range per address from aerial imagery and layers storm physics modeled per roof — wind and hail exposure scored for that specific roof, rather than a blunt "a storm passed through this county." The output is a ranked view of which roofs in your service area are most likely due: the ones aging out plus the ones a recent storm wore out. You can use it to build or enrich a mailing list so you pay postage to reach roofs that are genuinely in the replacement window, and to prioritize routes and door-knock sequences around the highest-probability roofs.
Honest limits, because hype helps no one: a roof age delivered as a range (for example, "roughly 14 to 19 years") is a probability estimate from imagery, not a dated invoice — aerial data cannot see a permit or a manufacturer's warranty card. Storm exposure is modeled odds that a given roof took meaningful impact, not courtroom proof that it did. It does not replace an on-roof inspection, and it does not tell you anything about coverage or what an insurer will decide. What it does is stop you from mailing the 5-year-old roofs and concentrate your spend, and your crew's windshield time, on the addresses where the buying trigger is most likely already present. In a mixed-age market, tightening the list from "every owner-occupied home built before 2010" to "roofs whose modeled age range puts them in the replacement window, ranked by storm exposure" is often the difference between a 0.6% and a 1.3% response rate — and that difference, run through the funnel, can roughly double your jobs per thousand pieces.
Think of it as enrichment, not replacement: keep your CRM and your own list, and add a roof-age-and-storm signal so every name carries a due/not-due flag and a priority score.
Offer and creative: the part roofers overthink and underdo
Targeting decides who opens the mailbox caring. The piece itself decides whether they act. Roofers tend to obsess over design polish and ignore the two things that actually move response: the offer and the call to action.
Build an offer that is specific, valuable, and compliant
Weak offers sound like "Quality roofing since 1998. Call for a free estimate." That is a business card, not an offer. A strong offer gives the homeowner a concrete, low-friction reason to act now.
Strong, compliant roofing offers:
- "Free no-obligation roof inspection with a written photo report of your roof's current condition." Specific, valuable, and it sets up your sales process. The deliverable is documentation the homeowner keeps.
- "Neighborhood roof check — we're working on [Street Name] this month and inspecting roofs nearby." Pairs perfectly with the ring-around-the-job EDDM play; social proof plus convenience.
- "Storm just came through? Get a documented assessment of your roof with date-stamped photos." For storm-response mail. Note what it promises: documentation. It does not promise an outcome.
This is the line every roofer must hold on storm and insurance-adjacent mail. You may offer to inspect, photograph, and document roof condition, and to prepare an accurate written repair estimate for your own scope of work that the homeowner can keep. You may state facts about what you observed and what your repair would cost. What you may not put on a mailer, for a fee or as an inducement:
- Do not promise to handle, file, negotiate, adjust, or "fight" the insurance claim. The homeowner files; the insurer decides. Doing that work for a fee is unlicensed public adjusting in most states.
- Do not promise a specific payout, approval, or that the claim "will be covered."
- Do not advertise a "free roof."
- Do not promise to waive, absorb, eat, or make the deductible disappear. In many states, inducing a claim by promising to cover the deductible is illegal.
- Do not interpret the homeowner's policy or tell them what their coverage means.
The safe and genuinely persuasive frame is: we document your roof thoroughly, give you date-stamped photos and an accurate repair estimate, and you decide what to do with it. That captures the homeowner's real intent ("did the storm hurt my roof and what now?") without crossing into claims handling. State guidance from departments of insurance and the FTC's rules on deceptive advertising both sit behind why the do-not-say list matters; a mailer that promises a payout or a free roof is more than risky, it is the kind of thing that gets contractors fined and sued.
The creative checklist
A roofing mailer that converts almost always has these. Treat it as a pre-flight list before you approve any print run.
- A single, clear headline that names the recipient's situation, not your company's history.
- One dominant offer, stated in plain dollars or plain deliverables.
- A trackable phone number printed large — most roofing responders call, they do not scan.
- A QR code and short URL to a matching landing page for the ones who do scan.
- Proof: a real local job photo, a license number, a genuine review quote, years in business. No stock houses, no fake "as seen on" badges.
- Local specificity: the neighborhood or city name, a recent local storm date, a nearby job address. Generic mail reads as junk; local mail reads as a neighbor.
- A deadline or scarcity that is real ("inspecting [Neighborhood] through [Month]").
- Clean, high-contrast design that a 60-year-old can read at arm's length in poor light.
Format-wise: oversized postcards (the EDDM-max size or a 6x9 / 6x11) consistently earn attention because they cannot be ignored in the stack and do not require opening. Letters in plain envelopes can outperform for warm or storm lists because they feel personal and get opened, but they cost more and add a step. Test format only after your list and offer are dialed in — format is a smaller lever than either.
Test one variable at a time, and only at real scale
Roofers love to "test" mail and then learn nothing from it because they changed five things at once or split 500 pieces in half. Two rules keep testing honest.
First, change one variable per test. New headline, or new offer, or new format, or new list — not all four. If you swap everything and response moves, you have no idea what caused it and cannot repeat the win. Hold everything constant except the single thing you are measuring.
Second, respect sample size. At a 1% response rate, a 500-piece split produces about five responses per arm. Five versus seven responses is noise, not a result, and acting on it will send you chasing ghosts. You generally want enough volume that each test arm produces a few dozen responses before you trust the difference. In practice that means testing at the scale of thousands of pieces per arm, or testing the highest-leverage variables (list and offer) first because their effects are large enough to show through smaller samples. The corollary: if your volume is small, do not waste it on creative micro-tests. Spend it proving your list and offer, where the swings are big, and leave headline-color experiments to operators mailing tens of thousands a month.
Keep a simple test log: date, what changed, the control's result, the variant's result, the response count behind each, and your conclusion. Over a year that log becomes the most valuable marketing asset you own, because it is a record of what actually works in your market rather than what a vendor claims works in general.
Tracking: if you cannot measure it, you are gambling
Here is the uncomfortable truth about why so many roofers "know" direct mail does not work: they never tracked it, so every job that came in got mentally credited to whatever the owner already believed. The phone rings, the office books it, nobody asks how the caller found you, and three months later the mail campaign gets blamed for "only a couple calls" while several of its actual jobs got logged as "referral" or "Google."
Track it or do not run it. The setup is cheap and takes an afternoon.
The tracking stack
- Unique tracking phone number per campaign. A call-tracking number that forwards to your real line, used only on mail, records every inbound call and ideally the recording. This is the most important single tracking decision in roofing mail because phone is the dominant response channel. One number per distinct campaign or list segment so you can compare.
- Dedicated landing page + short URL + QR code. A page that matches the mailer's offer, with its own form, so digital responders are captured and attributed. Keep the URL short and human-typeable.
- A coupon / mention code. "Mention this card" or a printed code, so even responders who reach you another way can be tied back. Train every person who answers the phone to ask and log it: "How did you hear about us?" — every call, no exceptions.
- CRM tagging. Every lead gets a source tag the moment it enters your CRM, and that tag survives to the closed-job record. If your source data dies somewhere between "lead" and "won job," your ROI math is fiction.
- A campaign ledger. One row per campaign: pieces, list, drop date, cost, responses by channel, leads, appointments, jobs, revenue, gross profit, CPA, ROI. Update it as jobs close, because roofing has a lag — mail dropped in March can close in June.
The attribution lag problem
Roofing has a long, lumpy sales cycle. A homeowner may hold your postcard on the fridge for two months until the next rain reminds them about that stain. If you judge a campaign at 30 days you will understate it badly. Track each campaign for at least 90 days, ideally 120, before you call it. The campaign ledger should stay open and keep accruing closed jobs to the original drop. Pros review a campaign at 30, 60, and 90 days and only make the final ROI call at the end.
What good attribution discipline buys you
Once you have clean per-campaign data, you can do the thing that compounds: kill your losers and scale your winners. The whole point of measuring is to find that List A (storm-zone, roof-age-ranked) returned a $480 CPA while List B (whole-zip EDDM blast) returned $1,900, then move next month's budget accordingly. Without tracking, both campaigns are just "the mail," you average a mediocre result, and you never learn the lesson that would have doubled your return.
The campaign ledger, column by column
Do not overcomplicate the ledger. A single spreadsheet with one row per campaign (or per list segment within a campaign) does the entire job. The columns that matter:
| Column | Why it earns its place |
|---|---|
| Campaign / segment name | So you can tell List A from List B at a glance |
| Drop date | The clock for the 90-day attribution window starts here |
| List source & filters | Records exactly what targeting produced this result, so you can repeat or kill it |
| Pieces mailed | The denominator for response rate |
| Total cost (fully loaded) | Design amortized + print + list + postage + handling + tracking |
| Cost per piece | Total cost ÷ pieces; your efficiency check on the spend itself |
| Responses by channel | Calls vs. scans vs. form fills vs. mentions — shows where action comes from |
| Response rate | Responses ÷ pieces |
| Qualified leads | Responses that were real, in-area, roof-related |
| Appointments booked | The handoff from marketing to sales |
| Jobs closed | Updated as they close, even months later |
| Revenue | Sum of closed-job contract values |
| Gross profit | Revenue × honest gross margin |
| Cost per acquired job | Total cost ÷ jobs closed |
| Gross-profit ROAS | Gross profit ÷ total cost |
The discipline that makes the ledger trustworthy is filling in the funnel columns honestly and late. Jobs closed and revenue keep updating for months after the drop; resist the urge to score the campaign the day the responses stop coming in. A row you closed too early will undercount the channel and talk you out of your best list.
A quick word on lifetime value and referrals
Everything above counts only the first job. In roofing, a satisfied roof customer is also a referral engine and a future repair/maintenance customer, and the neighbors who watched a quality crew work their street are warmer prospects for years. None of that shows up in a 90-day CPA, which means your tracked ROI is a floor, not a ceiling. This is why many roofers can justify spending more to acquire a customer than the first-job math alone would suggest: the second and third jobs that customer sends you arrive at essentially zero marketing cost. Track the first-job economics rigorously, then remember the real return runs higher than the ledger admits.
The mistakes that quietly destroy direct mail ROI
Most direct mail failures in roofing are self-inflicted and repeat across thousands of contractors. Here are the ones that cost the most, roughly in order of damage.
1. Mailing once and quitting
Direct mail is a frequency game. A single drop to a cold list, judged at 30 days, then abandoned, is the number-one way roofers waste money — they pay the full cost of building a list and creative, then bail before the repeat exposure that makes it work. Plan a sequence: the same list hit 3 to 6 times over a season usually outperforms three times the volume mailed once, because familiarity builds and you catch homeowners at different moments in their own timing. The cost of the list and design is largely fixed; the marginal cost of mailing the same good list again is mostly just postage and printing.
2. No phone process behind the mail
You spent $3,600 to make the phone ring and then the call goes to voicemail at 4:45 on a Friday and nobody calls back until Tuesday. The lead is gone. Speed-to-lead in roofing is brutal — homeowners call several contractors and book the first credible one who answers. If your mail generates calls you cannot answer and convert, you are buying leads for your competitors. Fix the phone before you scale the mail.
3. Untracked everything
Covered above, but it earns repeating because it is so common: no tracking number, no source field, no ledger. You cannot improve what you do not measure, and you will misattribute your way into killing a profitable channel.
4. Targeting on home age as if it were roof age
The "built in 2003" list feels targeted, but a large share of those roofs were redone after the last big storm and a large share of newer-looking neighborhoods have overdue original roofs. Treating public home-age records as roof-age truth pours postage onto roofs that are not due and skips roofs that are. Using a modeled roof-age range and storm exposure per address — the gap discussed earlier — is how you stop paying for that error.
5. Weak or non-compliant offer
"Free estimate, call us" converts poorly because it asks the homeowner to start a sales process with nothing in it for them yet. And on the other extreme, the "free roof / we waive your deductible / we handle your claim" offers convert in the short term and then create legal exposure that can end a business. Specific, valuable, documentation-based offers thread the needle: compelling to the homeowner, defensible to regulators.
6. Thin or fictional margins
The ROI math only works if the margin is real. A roofer who books "$11,500 jobs" but actually nets 22% after material spikes, callbacks, and an underpriced crew has half the gross profit the spreadsheet assumed, and a channel that looked like an 8x return is really a 4x — still fine, but every additional inefficiency can flip it. Run your ROI on honest gross margin, and revisit it as material costs move.
7. Scaling before the unit economics are proven
The instinct after one good campaign is to 10x the volume. Resist it until you have run the same play two or three times and confirmed the CPA holds. Bigger volume on an unproven offer just multiplies a mistake. Prove the unit, then scale the unit.
A 90-day direct mail program you can actually run
Enough theory. Here is a sequence a small-to-mid roofing company can execute without a marketing department.
Weeks 1–2: Set the foundation
- Define your true average job value and honest gross margin. Write them down.
- Set your target CPA. A simple rule: you should be comfortable spending up to roughly 10–15% of a job's gross profit to acquire it; many roofers can profitably go higher given the lifetime referral value of a happy roof customer.
- Stand up tracking: one call-tracking number, one landing page with a short URL and QR code, a source field in your CRM, and a campaign ledger spreadsheet.
- Brief your phone-answerer (or yourself): answer fast, always ask and log the source, book the inspection on the first call.
Weeks 2–3: Build the list and the piece
- Choose your targeting approach for the market: EDDM for tight same-age neighborhoods and ring-around-the-job; a targeted/enriched list for mixed-age sprawl. Where roof timing is the deciding factor, rank addresses by modeled roof-age range and storm exposure so postage lands on due roofs first.
- Design one strong oversized postcard: situation headline, one documentation-based offer, big tracking number, QR + short URL, real local proof, neighborhood specificity, clean high-contrast layout. Run it past the do-not-say compliance list.
Weeks 3–12: Drop, follow up, and sequence
- Drop 1 (week 3): mail the full list. Log the drop date in the ledger.
- Speed-to-lead: every inbound call answered live or returned within minutes; every inspection booked aggressively; every source logged.
- Drop 2 (week 6): re-mail the same list, ideally with a sllight variation (new headline or a fresh local job photo). Repeat exposure is where response compounds.
- Drop 3 (week 9): third touch to the same list; consider a letter format for the warm segment that engaged but did not close.
- Ring-around-the-job, continuously: every time you complete a roof, EDDM the surrounding carrier route within days while signage and crew are visible. This is the highest-ROI ongoing play and should run forever, independent of the main sequence.
Weeks 12+: Read the results honestly
- Keep the ledger open; attribute late-closing jobs back to their drop.
- Compute CPA and gross-profit ROAS per list segment and per drop.
- Kill the worst segment, double the best, and re-run. The second cycle is where you actually start compounding, because now you are scaling a proven unit instead of guessing.
Direct mail vs. and alongside other channels
Direct mail is not a religion; it is one channel with a specific strength: it reaches a known address with a physical object at a moment you partly choose. Its weakness is timing precision — you cannot perfectly catch the homeowner the day their roof starts leaking. Digital (search, local service ads) wins on intent timing because it catches people actively looking, but it cannot reach the homeowner who does not yet know their roof is due. The two are complements, not competitors.
The strongest roofing acquisition machine usually layers them: mail to plant awareness and credibility in your target neighborhoods (especially the due-roof and storm-zone addresses), so that when the homeowner does start searching, your name is already familiar and your truck has been seen on their street. Mail also feeds your retargeting — the landing page from your postcard can drop a pixel so digital ads follow up the responders who did not call. And both channels feed the same CRM, the same source tracking, and the same honest ROI ledger. Run them on one scoreboard, not two.
For the buyer trying to decide where the next marketing dollar goes, the discipline is identical regardless of channel: cost in, qualified leads out, jobs closed, gross profit earned, cost per acquired job compared head to head. Direct mail earns its place in the roofing mix not because it is trendy but because, for a high-ticket address-bound purchase, the unit economics are forgiving and the targeting can be made genuinely precise. Make the math honest, target the roofs that are actually due, track every response, hold the compliance line on storm work, and direct mail will out-earn most of what else competes for that budget.
FAQ
What is a good ROI for roofing direct mail?
Judge it by cost per acquired job and gross-profit return on spend, not the headline percentage. In roofing, because a single job carries thousands of dollars in gross profit and postage is cheap by comparison, a well-targeted, tracked campaign commonly returns several times its spend in gross profit and a cost per acquired job in the low hundreds of dollars. Anything where your cost to acquire a job stays well under your gross profit per job is working. Always run the number on honest margin, not the sticker price of the job.
What response rate should roofers expect from direct mail?
For cold prospect lists, plan around 0.5% to 1.5%. Mailings to past customers and warm leads run several times higher, and storm-response mail into a fresh, accurately defined impact zone can spike well above cold norms for a short window. But response rate alone is a vanity metric. A lower response rate on a tightly targeted due-roof list usually out-earns a higher response rate on a broad list, because more of the responders can actually buy. Carry the math down to cost per acquired job before judging any campaign.
Is EDDM or a targeted mailing list better for roofers?
It depends on your market. EDDM (Every Door Direct Mail) gives the cheapest postage but forces you to mail every address on a carrier route, so it shines in same-age neighborhoods and for saturating the streets around a job you just completed. Targeted or enriched lists cost more per piece but let you mail only owner-occupied homes with roofs that are actually due, which wins in mixed-age areas where blasting whole routes wastes most of your postage. The deciding question is how much your targeting precision matters in your specific service area.
How do I track which roofing jobs came from direct mail?
Put a unique call-tracking phone number on each campaign, since most roofing responders call rather than scan. Add a dedicated landing page with a short URL and a QR code for digital responders, print a mention code, and train whoever answers the phone to ask and log how every caller found you. Tag the source in your CRM the moment a lead enters and make sure that tag survives to the closed-job record. Maintain a campaign ledger and keep it open for at least 90 days, because roofing jobs close on a lag.
How is roof age different from home age for targeting?
Home age comes from public property records and tells you when the house was built, not when the roof was last replaced. Many roofs get redone after storms or at end of life, so a home built in 2003 may have a roof installed in 2017, while a newer-looking home may have an overdue original roof. Targeting on home age as if it were roof age pays postage to reach roofs that are not due and skips roofs that are. A modeled roof-age range per address is a far better predictor of who is actually in the replacement window.
How does RoofPredict help with direct mail targeting?
RoofPredict estimates a roof-age range per address from aerial imagery and layers storm exposure modeled per roof, then ranks which roofs in your service area are most likely due — the ones aging out plus the ones a storm wore out. You use it to build or enrich your mailing list so postage reaches genuinely due roofs, and to prioritize routes and door sequences. The honest limits: roof age is a probability range, not a dated invoice; storm exposure is modeled odds, not proof; and it does not replace an on-roof inspection or say anything about insurance coverage.
How many times should I mail the same list?
Direct mail is a frequency game, so plan a sequence rather than a single drop. The same well-targeted list hit three to six times over a season typically outperforms a much larger one-time blast, because repeat exposure builds familiarity and catches homeowners at different points in their own timing. The list and design costs are largely fixed, so the marginal cost of mailing again is mostly postage and printing. Quitting after one untracked drop is the single most common way roofers waste their direct mail budget.
Can I advertise insurance claim help on a roofing mailer?
You can offer to inspect, photograph, and document roof condition and to prepare an accurate written repair estimate the homeowner keeps, and you can state facts about what you observed. You may not promise to handle, file, or negotiate the claim, promise a specific payout or approval, advertise a free roof, or promise to waive or absorb the deductible — those cross into unlicensed public adjusting or illegal claim inducement in many states. The safe, persuasive frame is thorough documentation: the homeowner files and the insurer decides coverage.
How long before I can judge a direct mail campaign?
Give it at least 90 days, ideally 120. Roofing has a long, lumpy sales cycle — homeowners often hold a postcard until the next rain reminds them of a problem — so judging at 30 days badly understates results. Keep the campaign row in your ledger open and keep attributing late-closing jobs back to the original drop date. Pros review at 30, 60, and 90 days and only make the final ROI and budget decision at the end of the window.
How much should I spend to acquire a roofing customer through mail?
Anchor it to gross profit per job, not revenue. A common starting rule is to be comfortable spending up to roughly 10 to 15 percent of a job's gross profit to acquire it, and many roofers can profitably go higher once they account for referrals and repeat work from a satisfied customer. Whatever target you set, measure your actual cost per acquired job per campaign and per list segment, then shift budget toward the segments that beat your target and cut the ones that do not.
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
- Every Door Direct Mail (EDDM) — usps.com
- USPS Business Mail Prices and Postage — usps.com
- DMA Response Rate Report (Data & Marketing Association) — thedma.org
- FTC Advertising and Marketing Basics — ftc.gov
- FTC Truth In Advertising — ftc.gov
- NRCA - National Roofing Contractors Association — nrca.net
- IBHS - Insurance Institute for Business & Home Safety (Roofing & Hail) — ibhs.org
- NOAA National Weather Service - Storm Prediction Center — spc.noaa.gov
- NOAA Storm Events Database — ncdc.noaa.gov
- U.S. Census Bureau - American Housing Survey — census.gov
- Texas Department of Insurance - Roofing and Storm Fraud Guidance — tdi.texas.gov
- National Association of Insurance Commissioners (NAIC) - Public Adjusters — naic.org
- International Code Council - International Residential Code (IRC) — iccsafe.org
- RoofPredict — roofpredict.com
Related Articles
Which Past Roofing Customers Need a New Roof Now: A Practical System for Mining Your Own Database
Your old jobs are a buy-list hiding in plain sight. Here is how to score past customers by install age, storm exposure, and warranty timing so your crew knocks the roofs that are actually due.
How to Revive Aged Roofing Leads That Never Closed
Your old estimate file is a season of jobs hiding in plain sight. Here is the practitioner's system for reopening leads that went cold, in the right order, with the right reason to call.
EDDM vs Targeted Mail for Roofing: A Contractor's Real-World Cost and Response Breakdown
A practical, numbers-first breakdown of EDDM versus targeted (saturation-free, list-based) direct mail for roofing crews — where each one wins, where it bleeds cash, and how to stop mailing roofs that don't need you.