Most roofing contractors decide whether direct mail “worked” after the campaign is over, the money is spent, and the results are already locked in. That’s backwards.
The time to calculate ROI on a direct mail campaign is before you send a single piece. If the numbers don’t work going in, they won’t work coming out. And if they do work, you’ll know exactly what you need the campaign to produce, which makes it much easier to evaluate the result honestly.
Here’s how to run that calculation before you commit the spend.
Step 1: Know Your Average Job Value
Start with your average revenue per roofing job. This isn’t the highest or the lowest job you’ve done. It’s the actual average across a meaningful sample of your recent work.
If you do a mix of residential full replacements and repairs, calculate them separately. A campaign targeting residential replacement leads has a different ROI profile than one targeting repair work.
For this example, use $12,000 as the average residential replacement job.
Step 2: Know Your Gross Margin
Revenue isn’t profit. What matters for ROI is how much you actually keep after materials and labor.
Gross margins in residential roofing typically run 25–40% depending on your market and operational efficiency. A 33% margin on a $12,000 job means $4,000 in gross profit.
Use your actual margin, not an industry benchmark. If you don’t know your margin by job type, that’s the calculation to do first before evaluating any marketing channel.
For this example: $12,000 job x 33% margin = $4,000 gross profit per job.
Step 3: Know Your Close Rate on Direct Mail Leads
Not all leads become jobs. Your close rate on inbound direct mail leads is the bridge between responses and revenue.
If you don’t have direct mail-specific data, use your overall inbound close rate as a starting estimate and adjust it once you have campaign-specific data. Roofers with a strong sales process typically close 25–40% of qualified inbound leads.
For this example: 30% close rate.
Step 4: Set Your Break-Even Number
Now you can calculate the minimum number of booked jobs needed to break even.
Formula: Campaign cost divided by gross profit per job = jobs needed to break even.
On a $2,750 ShingleDrop Starter campaign at $4,000 gross profit per job:
$2,750 / $4,000 = 0.69 jobs to break even.
In practical terms, one booked job more than covers the cost of the campaign. Everything after that is net positive.
This is the number you want before you send anything. If your cost structure makes it so you’d need 10 jobs to break even on a 250-mailer campaign, something in the math is wrong and you should fix it before spending.
Step 5: Work Backwards from Response Rate
Once you know how many booked jobs you need, work backwards through your close rate to find how many responses you need.
Formula: Jobs needed to break even divided by close rate = responses needed.
1 job / 30% close rate = 3.3 responses needed to break even.
Now check that against realistic response rate expectations. A 250-piece targeted neighborhood mailer at 3–5% response produces 7–12 responses. At a 30% close rate, that’s 2–3 booked jobs.
The campaign pays for itself more than twice on the conservative end. That’s before you account for referrals generated from those jobs or future work from satisfied customers.
Step 6: Account for Lifetime Customer Value
A roofing job is rarely a one-time transaction with a homeowner. Satisfied customers refer neighbors, call back for repairs and maintenance, and replace gutters and skylights over time.
If your average customer generates $15,000 in lifetime revenue across multiple touchpoints, the first job is just the entry point. Including even a partial LTV estimate in your ROI model changes how aggressive you can afford to be with campaign spend.
For a conservative model, stick with single-job gross profit. For a realistic model, include a reasonable LTV multiplier based on actual data from your customer base.
What the Full ROI Calculation Looks Like
Here’s the full model for a ShingleDrop Growth campaign at 500 mailers for $4,850:
- Mailers sent: 500
- Expected response rate: 3–5%
- Expected responses: 15–25
- Close rate: 30%
- Expected booked jobs: 4–7
- Average job value: $12,000
- Gross margin: 33%
- Gross profit per job: $4,000
- Expected gross profit: $16,000–$28,000
- Campaign cost: $4,850
- Net return: $11,150–$23,150
On the conservative end, the campaign returns 3.3x. On the optimistic end, 6.8x. Both scenarios are profitable well above the cost of the campaign.
This is why the pre-campaign ROI calculation matters. When you see those numbers before you spend, you’re not gambling. You’re making a business decision with known inputs.
What Changes the Math
Several variables can shift this calculation significantly.
Lower average job value: If your average job is $7,000 instead of $12,000, the break-even threshold rises. You need more booked jobs to cover the same campaign cost.
Lower close rate: If you’re closing 15% of inbound leads instead of 30%, you need twice as many responses to hit the same number of booked jobs. That’s a process problem to fix, not a campaign problem.
List quality: A poorly targeted campaign might hit 1% response instead of 3–5%. That changes the expected response count significantly and may make the campaign unprofitable. Targeting precision is the most controllable variable in the model.
Market conditions: Hail events and storm activity dramatically increase baseline homeowner interest in roofing. A campaign mailed into a market 30 days after significant storm activity will outperform the same campaign mailed in a quiet period.
FAQ
What response rate should I use for my direct mail ROI calculation? Use 0.5% for generic postcard campaigns to cold lists. Use 3–5% for targeted neighborhood mailers to homeowners near a completed job. Those ranges reflect actual campaign performance data, not best-case scenarios.
Do I include fulfillment time in the ROI calculation? Yes. If you or your team spend significant time managing a campaign, that has a real cost. Factor it in. If you’re using a service like ShingleDrop where fulfillment happens in 5 business days without you managing the process, that cost is minimal.
How should I account for jobs that come in 60 or 90 days after the mailer? Track your campaign source for every inbound lead and extend your attribution window to at least 90 days. Direct mail responses don’t all come in the first week. Some homeowners hold onto the mailer for weeks before calling.
Is there a point where direct mail ROI doesn’t work for roofing? Yes: campaigns with poor targeting, low average job values, and low close rates can produce negative ROI. The calculation above will tell you that before you spend anything. If the break-even number requires unrealistic response rates, adjust the campaign design or the spend level before sending.
If you want to run a campaign with numbers that work before the first piece mails, start with ShingleDrop pricing and place your order here.