Skip to main content

Roofing Revenue Per Lead vs Cost Per Lead: The Only Math That Tells You Where to Spend

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

Ask ten roofing owners what their cost per lead is and most can give you a number within five seconds. Ask the same ten what their revenue per lead is and you get a long pause, a guess, or a question back: "You mean revenue per job?" No. Revenue per lead. The number that tells you what an average raw lead from a given source is actually worth to your business once you run it all the way through your pipeline.

That blank stare is the most expensive thing in residential roofing right now. Owners cut the channels with the highest cost per lead and keep the cheap ones, and a stunning number of them are cutting their best source and feeding their worst. A $90 lead that closes 8% of the time and averages $9,000 a job is quietly outperforming a $35 lead that closes 4% and averages $6,500 — and the owner staring only at cost per lead has it exactly backwards.

The fix is not complicated, but it is precise. You have to define the two numbers the same way every time, track them per source, and then look at them together. One number without the other lies to you. Below is the full operating method: the definitions, the formulas, the worked examples with real-looking figures, the spreadsheet structure, the conversion-rate breakpoints that move everything, and the handful of mistakes that make a profitable channel look like a loser. By the end you will be able to sit down with your last 90 days of jobs and rank every lead source by what it actually returns — not what it costs.

The two numbers, defined so they stop lying to you

Most arguments about marketing in a roofing company are really arguments about definitions. Two managers say "cost per lead" and mean two different things, so they talk past each other for an hour. Lock these down first.

Cost per lead (CPL)

Cost per lead is total money spent to generate leads from a source, divided by the number of leads that source produced, over the same period.

Cost Per Lead = Total Source Spend / Number of Leads from That Source

The trap is "total spend." If you only count the ad invoice or the lead-marketplace charge, your CPL is fiction. Real spend includes:

  • Media or platform spend (Google Ads, Meta, the lead aggregator's per-lead fee, the mail house's printing and postage).
  • Agency or management fees attributable to that channel.
  • Tooling that exists to feed that channel (call tracking, landing-page software, a list or data subscription).
  • Direct labor that exists only to create the lead — a setter who books appointments, a canvasser's day rate, the hours a CSR spends qualifying inbound calls. This one is routinely ignored and it is large.

A door-knocking program with a "$0 media cost" is not a $0 CPL channel. If two canvassers at $160/day each knock for a week and book 14 inspections, that program cost $1,600 and produced 14 leads — $114 per lead in labor alone. Pretending it is free is how owners convince themselves canvassing beats paid search when it often does not, once the bodies are counted.

Revenue per lead (RPL)

Revenue per lead is total revenue closed from a source, divided by the total number of leads that source produced — including every lead that went nowhere.

Revenue Per Lead = Total Revenue Closed from Source / Total Leads from That Source

The word that matters is total leads, not closed leads. Revenue per job tells you how big your average sale is. Revenue per lead tells you how much an average raw, unscreened lead from that source is worth before you know whether it will close. That difference is the entire point. It already has your conversion rate baked into it. A source can have huge jobs and still a low RPL if most of its leads are tire-kickers.

Think of RPL as the honest ceiling on what you can afford to pay for a lead from that source. If a source returns $620 in revenue per lead, and your gross margin on installed work is, say, 35%, then each lead carries about $217 of gross profit. Spend more than that to acquire it and you are underwater before overhead.

Why you must look at them as a pair

Here is the same channel seen four ways. Watch how the ranking flips depending on which number you trust.

Source CPL Close rate Avg job RPL Gross margin $/lead (35%)
Lead marketplace $38 3.5% $6,400 $224 $78
Paid search (your brand) $96 9% $9,100 $819 $287
Direct mail to old roofs $61 6% $8,700 $522 $183
Past-customer / referral $14 22% $9,400 $2,068 $724

Rank by CPL (cheapest first) and you would protect the lead marketplace and question paid search. Rank by RPL and paid search returns more than three times the marketplace per lead, and your past-customer book is in a different universe entirely. The marketplace lead is cheap because it is cheap to you and to the four competitors who bought the same homeowner. Cost told you one story; revenue told you the truth.

The chain that turns a lead into a dollar

Revenue per lead is not one lever. It is the product of a chain, and every link is a place you can win or bleed. Write it out as a formula and the whole marketing debate becomes an engineering problem.

Revenue Per Lead =
   Set Rate
   x Inspection/Run Rate
   x Close Rate
   x Average Job Value

Walk a real source through it. Say a direct-mail drop to older roofs produces 100 leads (calls and form fills) in a month.

  1. Set rate — of 100 leads, 70 become a booked appointment. The other 30 never answer the callback, were wrong numbers, or wanted something you do not do. Set rate 70%.
  2. Inspection / run rate — of 70 set, 52 actually happen; the rest cancel or no-show. Run rate 74%.
  3. Close rate — of 52 inspected, 11 sign. Close rate 21% of runs.
  4. Average job value — those 11 jobs average $8,700.

Revenue closed = 11 x $8,700 = $95,700. Across 100 raw leads, RPL = $957.

Now notice where the leverage is. From 100 leads you closed 11 jobs — an 11% lead-to-sale conversion. If you only fix the run rate (get more set appointments to actually happen) from 74% to 85%, you run 60 instead of 52, and at the same 21% close that is roughly 12.6 jobs, about $109,500, and RPL jumps to ~$1,095. You spent zero extra on marketing. You just stopped leaking appointments. This is why owners who obsess over CPL and ignore the chain leave the biggest dollars on the table — the cheapest yard of pipeline to fix is almost never the ad.

The conversion math every owner should have memorized

Lead-to-sale conversion is the single most misquoted figure in roofing. People brag about a "40% close rate" and mean close-on-runs, then secretly compare it to a competitor's lead-to-sale number and feel great about nothing. Keep three rates separate and labeled:

  • Lead-to-set: appointments booked / total leads.
  • Close-on-run: signed / inspections actually performed.
  • Lead-to-sale: signed / total leads. This is the one that connects to RPL.

For most residential retail roofers, a healthy paid-lead-to-sale rate lands somewhere in the high single digits to low teens, and warm sources (referrals, repeat) run far higher. If your lead-to-sale on a paid source is under ~4%, the source is either junk or your speed-to-lead and follow-up are junk — and you cannot tell which until you separate the rates.

How to actually calculate this for your shop

Enough theory. Here is the build. You need a defined period, clean source tags, and the discipline to attribute revenue back to the lead that started it.

Step 1 — Pick a window long enough to be real

Roofing has a lag. A lead that comes in today might inspect next week and close three weeks after that; insurance and storm work can lag far longer. If you measure a 30-day window, you will count this month's lead spend against last month's closed revenue and get garbage.

Use a trailing 90-day window minimum for retail, and cohort it: track the leads that entered in a period and follow them to close, rather than mixing this month's spend with this month's signs. For storm and supplement-heavy work, stretch the cohort window to 120-180 days because the cash lands later.

Step 2 — Tag every lead with one source, at intake

The number one reason roofers cannot calculate RPL is dirty source data. Every lead must get exactly one canonical source the moment it enters the CRM, chosen from a short fixed list — not free-typed. A workable list:

  • Paid search
  • Paid social
  • Organic / website
  • Lead marketplace (name each one separately — they perform very differently)
  • Direct mail
  • Door-knock / canvass
  • Referral / past customer
  • Other / unknown

Force the field to be required. "Unknown" is allowed as an honest answer but should stay under ~10% of leads, or your whole model wobbles. When a referral comes in because they saw your truck and a neighbor recommended you, pick the dominant cause and move on; perfect attribution is a fantasy, consistent attribution is the goal.

Step 3 — Sum true spend per source for the window

Build the spend side honestly, including the labor line discussed earlier. For each source in the window:

Source Spend = Media/Fees + Tools + Agency + Lead-Gen Labor

For canvassing and inside-sales setters, allocate their loaded hourly cost (wage + payroll taxes + the rough cost of benefits) times hours spent generating that source's leads. If a CSR splits time across inbound from three channels, split her cost by call volume per channel. It does not need to be perfect to the dollar; it needs to stop being zero.

Step 4 — Attribute closed revenue back to the originating lead

In your CRM, every won job should carry the source of the lead that created it. Sum contracted revenue (use signed contract value, and be consistent — either always gross contract or always net of any subcontracted scope, never mix). Now you have, per source: total leads, total spend, total closed revenue.

Step 5 — Compute the panel

For each source:

CPL = Source Spend / Leads
RPL = Closed Revenue / Leads
Lead-to-sale = Jobs Won / Leads
Gross profit per lead = RPL x Gross Margin %
Net contribution per lead = Gross profit per lead - CPL
ROAS = Closed Revenue / Source Spend

Net contribution per lead is your decision number. It is what each lead from that source puts in your pocket after the cost to get it but before fixed overhead. Positive and large means feed it. Negative means you are paying to lose money, no matter how cheap the CPL looked.

A full worked example across five sources

Here is a complete 90-day panel for a mid-size residential roofer doing retail and some storm work. Margin assumed at 32% gross on installed work for the profit lines.

Source Leads Spend CPL Jobs Revenue RPL Lead-to-sale GP/lead Net contr./lead ROAS
Lead marketplace A 210 $7,980 $38 7 $44,800 $213 3.3% $68 +$30 5.6x
Lead marketplace B 140 $6,300 $45 3 $17,400 $124 2.1% $40 -$5 2.8x
Paid search 96 $9,120 $95 9 $81,900 $853 9.4% $273 +$178 9.0x
Direct mail (old roofs) 120 $7,200 $60 8 $69,600 $580 6.7% $186 +$126 9.7x
Referral / past customer 64 $900 $14 14 $131,600 $2,056 21.9% $658 +$644 146x

Read it the way a CFO would.

  • Marketplace B is a leak. Cheap CPL ($45), but net contribution per lead is negative. Every lead you buy there costs you five dollars after acquisition and margin. The cheap source is the one quietly bleeding you. Pause it, or renegotiate, or fix the speed-to-lead that is tanking its conversion.
  • Marketplace A barely works. Positive, but thin. At +$30/lead it is paying its own way and not much more, and it is fragile to any dip in close rate. Keep it on a short leash.
  • Paid search and direct mail are your engine. Higher CPL, far higher net contribution. If you have a dollar to move, it leaves marketplace B and goes here.
  • Referral is the whole game. $644 net contribution per lead, 146x ROAS, and you are spending almost nothing on it. The most important strategic question this panel raises is not "which ad?" It is "why am I generating only 64 referral/past-customer leads in 90 days when each one is worth twenty marketplace leads?"

That last point is where most roofers have a fortune sitting idle: the customer book and the streets they already own. More on that shortly.

The mistakes that make a good channel look bad (and vice versa)

The math is simple. Getting it wrong is easy, and the errors are systematic. Here are the ones that flip the ranking.

1. Counting media but not labor

Already covered, worth repeating because it is the most common. "Free" channels — canvassing, referral asks, repeat outreach — have labor costs that dwarf some paid channels' fees. Count the bodies or you will overspend on the channels that look free and starve the ones that look expensive but convert.

2. Measuring revenue, not gross profit

A $9,000 storm job with heavy subcontracted labor and a steep material spike can carry a thinner margin than a $7,000 retail job you self-perform. RPL ranks demand; net contribution per lead ranks profit. Always carry the margin line. Two sources with identical RPL can have very different gross profit per lead if their job mix differs.

3. Mixing the cohort

This month's spend against this month's closes double-counts your fast deals and ignores your slow ones. Cohort by entry date and follow each lead group to maturity. Storm and supplement work especially: the contract signs months before some of the revenue is final, and a 30-day look makes those sources look dead when they are merely slow.

4. Letting averages hide a bimodal source

One source's RPL can be an average of "great in one ZIP, terrible in another" or "great with rep Marcus, awful with the new hire." Before you kill a source, segment it: by ZIP, by rep, by ad group, by list. Often you do not have a bad channel, you have a bad slice of a good channel. Pause the slice, not the source.

5. Ignoring speed-to-lead

The fastest way to wreck a source's RPL has nothing to do with the source. Slow response murders conversion: the difference between calling a web lead back in five minutes versus an hour is enormous, and contacting a lead repeatedly in the first day instead of once is the difference between a set and a dead record. If a paid source's lead-to-sale is mysteriously half what it should be, look at your dial logs before you blame the channel.

6. Confusing a lead with an opportunity

Some shops count "leads" as raw form fills; others only count qualified, two-legged appointments. Both are fine — but pick one and apply it to every source identically. The moment your marketplace count is raw fills and your canvass count is only booked inspections, every comparison is meaningless.

Where this gets sharp: lead quality and the roofs underneath

Here is the uncomfortable truth the RPL panel keeps surfacing: most of the gap between a great source and a junk source is not the channel, it is who is on the other end. The reason referral and past-customer leads crush everything is that they are pre-qualified by relationship. The reason a marketplace lead is cheap is that the homeowner is shopping five contractors and may not even need a roof yet.

Which means the highest-leverage move in the whole equation is upstream of any ad: point your outbound at homes that are actually due for a roof, and you raise close rate and average job value at the same time — which raises RPL on every channel that touches those homes.

That is the part owners under-invest in because it feels invisible. You cannot tell a 9-year-old roof from a 22-year-old roof at 35 miles per hour off the truck, and the public data does not help: Zillow and the county show year built, not roof age, so every re-roof since construction is invisible. You end up mailing and knocking the whole street — new roofs included — and your CPL is fine but your conversion is dragged down by every door that was never going to buy.

Tightening the inputs to the RPL formula

Go back to the chain: RPL = set rate x run rate x close rate x average job value. Targeting older, storm-worn roofs lifts three of those four links at once:

  • Close rate rises because more of the homeowners you reach genuinely need work — you are not arguing a good roof onto a teardown.
  • Average job value rises because aged and storm-damaged roofs tend toward full replacement rather than small repairs.
  • Set rate rises a little too, because a rep with a specific, true reason to be at this door ("your roof is in the 18-to-22-year range and your street took hail twice in the last few years") gets a conversation the generic flyer never gets.

This is the lane RoofPredict sits in. It scans an area from aerial imagery and gives each address a roof-age estimate as a range (not an exact install date — nobody can pull that from a photo, and any tool claiming a precise date is bluffing), and it models storm exposure per roof rather than just showing where a storm passed. A hail map tells you the storm crossed a ZIP; modeling the storm on each roof estimates which specific roofs likely got worn out. You hand your crew and your mail house a list ranked by which homes are actually due, and you can push the same roof-age-and-storm signal back into your own CRM to score your existing book and old estimates.

It is honest to be clear about the limits: a roof-age range is a probability, not a guarantee, and a storm model is odds, not proof a given roof is damaged — the inspection still decides. RoofPredict is not a lead service and it does not buy or sell homeowners; it sharpens the outbound you already do so the leads you generate carry a higher RPL. Used right, it does not change your CPL much — it changes the conversion and job-size links downstream, which is where RPL actually lives. The point is to stop renting the same five-times-resold marketplace homeowner and start working the roofs on your own streets that the storm and the calendar made due.

Mining the book you already paid for

Look again at that worked example: the referral/past-customer line returned $2,056 per lead and you generated only 64 of them in 90 days. Your old customers and dead estimates are the highest-RPL source you have and almost nobody works them systematically. Score your CRM by roof age and storm exposure, pull the homes whose roofs have aged into the replacement window or whose neighborhood took a recent storm, and you are reactivating leads you already paid to acquire years ago — at effectively zero CPL and the highest close rate in your business. If you do one thing after reading this, it is this: run your own database against age-and-storm signals before you spend another dollar on a marketplace.

A note on storm and claims work, kept on the right side of the line

Storm leads can post strong RPL because the jobs are full replacements, but the topic drags a lot of contractors into language that gets them in trouble, so be careful how you generate and pitch these.

What you may do, and should do well: inspect the roof, document the damage thoroughly with dated photos and measurements, and prepare an accurate, Xactimate-aligned estimate to repair your own scope of work. You hand that documentation and estimate to the homeowner. The homeowner files with their carrier, and the carrier decides coverage. That is a clean, defensible workflow, and good documentation is itself a conversion tool — a rep who walks in with proof of age and dated storm exposure sets and closes at a higher rate, which is exactly the RPL lift discussed above.

What you may not do — the do-not-say list, because crossing it is unlicensed public adjusting in most states and a fast way to lose your license and your marketing budget to fines:

  • Do not, for a fee, negotiate, adjust, or "handle" the homeowner's claim with their insurer.
  • Do not interpret the policy or tell the homeowner what is or is not covered.
  • Do not promise a specific payout, approval, or that the claim "will go through."
  • Do not promise the deductible will be waived, absorbed, eaten, or made to disappear — and never advertise a "free roof."
  • Do not represent the homeowner against the insurer.

Keep your storm marketing on the document-and-estimate side. The honest pitch is: we will inspect, document everything, and give you and your insurer an accurate estimate of what it costs to do this roof right. That message converts, and it keeps your RPL from being erased by a regulatory problem. Check your state's Department of Insurance for the exact public-adjusting line where you operate.

Getting attribution right without a data team

Everything above falls apart if you cannot reliably say which lead became which job. This is where most roofing shops quietly give up, decide the numbers are "too hard," and go back to gut feel. You do not need a data team. You need four habits and a few dollars of tooling.

Use a unique tracked number per source

The cleanest, cheapest attribution lever in roofing is a dedicated tracking phone number for each marketing source, forwarding to your real line. Mail gets one number, each paid campaign gets one, the yard-sign QR gets one, the truck wrap gets one. When the phone rings, the source is already known before anyone says hello, and your CSR is not guessing or asking "how'd you hear about us?" three weeks later when the homeowner has forgotten. Call-tracking platforms do this for a few dollars per number per month — a rounding error against a single $8,000 job, and it removes the largest source of dirty attribution data you have.

For web leads, pass the source through the form with hidden fields (the campaign or referrer the visitor arrived from) so a form fill lands in the CRM already tagged. For door-knock and canvass, the rep tags it at the door on their phone app. The rule is the same everywhere: the source is captured by the system at the moment of contact, never reconstructed from memory later.

Decide your attribution rule and never change it mid-year

Real homeowners touch you more than once. They see the truck, get a mailer, then Google you and call. Which source gets credit? You have three honest options, and any of them works as long as you apply it consistently:

  • First touch — credit the source that first made them aware of you. Good for judging awareness channels.
  • Last touch — credit the source that produced the actual inbound contact. Simplest, and what most small shops should use.
  • Lead-source-of-record — whatever the CSR or rep tagged at intake, full stop.

Pick one. Write it down. The danger is not choosing the "wrong" model; it is switching models partway through a measurement window so your January numbers are not comparable to your June numbers. Last-touch is the pragmatic default for a roofing company because it maps to the phone number that actually rang.

Handle the multi-touch referral honestly

The highest-RPL leads — referrals and repeat customers — are also the ones most likely to have a paid touch somewhere in their history. Do not let a paid channel steal credit for a job your reputation actually earned, and do not let "referral" become a dumping ground that inflates your best-looking source. The working rule: if a human recommended you by name, it is a referral, even if that person also got a mailer. If they responded to a campaign and merely remembered seeing your truck, it is the campaign. Adjudicate the gray ones the same way every time.

Audit your tags monthly

Pull a sample of 20 won jobs and check that the lead source on each one is real and defensible. If five of them are "unknown" or obviously mis-tagged, your whole panel is suspect and you fix the intake process before you trust another month of numbers. Clean attribution is a discipline, not a tool you buy once.

Segmenting a source before you judge it: a worked example

The single most expensive snap decision an owner makes is killing a channel on its blended average. Here is why, with numbers. Suppose your direct-mail line looks mediocre at a blended $410 RPL and you are tempted to cut it. Break it apart by the list you mailed:

Mail segment Leads Jobs Revenue RPL Lead-to-sale
Blanket ZIP (no age data) 70 3 $25,200 $360 4.3%
Homes 15+ yr roof age 40 6 $52,800 $1,320 15.0%
Storm-exposed + aged 20 4 $36,400 $1,820 20.0%

The blended RPL of $410 hid two completely different businesses. The blanket-ZIP drop is barely worth the postage; the targeted segments return three to five times as much per lead. The smart play is not to cut direct mail — it is to stop mailing the blanket ZIP and put that budget into the aged and storm-exposed lists. Same channel, same mail house, radically different economics, and you only saw it because you refused to judge on the average.

Run the identical exercise on your reps. One source can carry a great blended close rate that is really one veteran closer dragging up three green reps who are torching expensive leads. Segment RPL by rep and you will sometimes find the channel is fine and the handling is the leak — which is a coaching fix, not a budget cut. The discipline is the same every time: before you touch the budget, slice the source by list, ZIP, ad group, and rep, and find out whether you have a bad channel or a bad slice.

Turning the panel into a reallocation, with the math

Knowing your net-contribution-per-lead ranking is useless until you move money. Here is how to do it without blowing up volume.

Start from the worked example panel. Marketplace B is at -$5 net contribution per lead and consumed $6,300 in the window. That $6,300 is not a saving to pocket — it is fuel to redeploy to the top of your ranking. Where does it go? Look at the headroom and the scalability of each winning source:

  • Paid search at +$178/lead is your best scalable paid channel, but it is demand-capped: there are only so many people Googling "roof replacement near me" in your market this month. You can bid up and widen keywords, but RPL usually softens as you reach less-qualified searches. Add budget here, but watch the marginal RPL, not the average.
  • Direct mail (aged/storm lists) at +$126/lead scales with list size, and the list is the constraint, not demand. If you can get more good addresses — homes actually in the replacement window — you can scale mail almost linearly until you exhaust the aged inventory in your service area. This is often the most expandable high-RPL channel a roofer has.
  • Referral / past customer at +$644/lead is the highest return and the hardest to scale on command — you cannot manufacture relationships overnight. But you can systematize the ask and mine the existing book, which is found money at near-zero CPL.

A sane reallocation of the freed $6,300: roughly half into expanding the aged/storm mail list (linear, high-RPL, list-constrained), a third into paid search up to the point marginal RPL starts to sag, and the remainder into a structured referral-and-reactivation push against the existing customer base. Then you re-measure next cohort and adjust again. Marketing budget is not a set-and-forget allocation; it is a position you rebalance every month based on where the net-contribution column actually landed.

The marginal-RPL trap when scaling

One caution that trips up owners who finally get religion on RPL: the average RPL of a source and the marginal RPL of the next dollar you put into it are not the same. When you double paid-search spend, the new spend buys broader, colder keywords that convert worse than your existing ones, so blended RPL drifts down even though the channel still "works." Always ask, when scaling, what the last batch of leads returned, not what the whole pile averaged. Stop adding budget at the point where the marginal lead's net contribution crosses your target — not when the average is still healthy.

Cost to acquire a customer, payback, and the longer view

RPL and CPL are per-lead numbers. Two more numbers turn them into a business picture.

Cost to acquire a customer (CAC) is spend divided by jobs won, not leads. From the worked panel, paid search cost $9,120 and produced 9 jobs, so CAC is about $1,013 per job. Direct mail cost $7,200 for 8 jobs, about $900 per job. Referral cost $900 for 14 jobs — about $64 per job. CAC is what you actually paid to land each signed customer, and it is the number to compare against the gross profit of an average job. A $1,013 CAC against a job carrying $2,800 gross profit is a strong machine; the same CAC against a job carrying $900 gross profit is a money-loser dressed up as growth.

Payback matters because of cash flow. A retail roofing job typically pays in full within weeks of completion, so CAC payback is fast and you can scale aggressively on anything with positive net contribution. Storm and supplement work can stretch payback for months as the revenue trickles in, which means a storm channel with identical RPL ties up more cash for longer and deserves a higher required return before you scale it. Two channels with the same RPL are not equally good if one pays in three weeks and the other in three months.

The longer view: a customer is worth more than one roof. A roof replacement is a long-cycle product — the same homeowner will not buy another for fifteen-plus years — so classic recurring lifetime-value math does not map cleanly. But a happy customer is worth far more than their single contract through two channels you can measure: the referrals they generate, and the eventual reactivation when their next roof (or a storm) comes due. This is exactly why the referral/past-customer line dominates every RPL panel, and why under-investing in customer experience and database reactivation is the most common way roofers leave compounding money on the table. The job you closed cheaply through a referral was seeded by a job you may have acquired expensively years ago. Measure per-lead, but manage knowing the book compounds.

Building the dashboard you will actually look at

A model you compute once and never reopen changes nothing. Build a panel you can update in an hour at month-end and that forces a decision. Minimum columns, one row per source:

  1. Source (canonical)
  2. Leads (window, cohorted by entry)
  3. True spend (media + tools + agency + lead-gen labor)
  4. CPL
  5. Jobs won (attributed to originating lead)
  6. Closed revenue (consistent contract basis)
  7. RPL
  8. Lead-to-sale %
  9. Gross profit per lead (RPL x margin)
  10. Net contribution per lead (GP/lead minus CPL)
  11. ROAS

Then three rules turn the panel into action:

  • Sort by net contribution per lead, not CPL. That column is your spending priority, top to bottom.
  • Any source with negative net contribution gets a 30-day diagnosis, then a cut. First check speed-to-lead and segment the source (bad ZIP? bad rep? bad list?). If it is still negative after the fixable links are fixed, stop feeding it.
  • Set a target net contribution per lead and only scale sources above it. Pouring budget into a source that is barely positive just buys you more thin leads and more chaos; scale the ones with real headroom.

A monthly cadence that keeps it honest

  • Week 1: Pull last full month's cohort; confirm source tags are clean (under 10% unknown).
  • Week 2: Reconcile spend, including labor allocations; reconcile won-job sources in the CRM.
  • Week 3: Update the panel; flag every negative-contribution source and every source whose lead-to-sale dropped more than a couple of points month over month.
  • Week 4: Make the calls — reallocate budget toward the top of the net-contribution column, kill or fix the bottom, and pick one conversion link (usually run rate or speed-to-lead) to improve next month.

Benchmarks, used correctly

Roofers love to ask "what's a good cost per lead?" It is the wrong question in isolation, because a good CPL is entirely relative to the RPL it produces. A $120 CPL is fantastic if RPL is $900 and a disaster if RPL is $150. Still, a few orientation points so you are not flying blind:

  • Marketplace / aggregator leads are usually the lowest CPL and the lowest RPL and conversion, because the homeowner is shopping several contractors. Treat their low CPL with suspicion, not affection.
  • Paid search tends to carry a higher CPL and a much higher RPL, because the homeowner is actively searching for a roofer right now. Often your best paid source by net contribution.
  • Direct mail to targeted (aged/storm) homes sits in the middle on CPL and high on RPL when the list is good, low when you blanket a ZIP with no age data.
  • Door-knock / canvass has a deceptively high true CPL once labor is counted, but can post strong net contribution with a good list and a trained crew — and it builds rep skill that lifts every other channel.
  • Referral / past customer is the lowest CPL and the highest RPL there is. The fact that this is true at almost every roofing company, and that almost no company maximizes its volume, is the biggest open opportunity in the trade.

Do not import another company's benchmarks as targets. Compute your own panel, watch your own net-contribution column move, and let your numbers set your targets. The goal is not to match an industry average; it is to know, every month, exactly which dollar to move and where.

The one-page summary you can act on tomorrow

If you take nothing else, take this sequence:

  1. Stop ranking lead sources by cost per lead. Rank them by net contribution per lead.
  2. Define both numbers once, include lead-gen labor in spend, and tag every lead with one canonical source at intake.
  3. Cohort by a 90-day (retail) to 180-day (storm) window so slow money is counted.
  4. Carry the margin line so you are ranking profit rather than raw revenue.
  5. Fix the conversion chain — set rate, run rate, close rate, job size — before you blame or cut a channel; speed-to-lead first.
  6. Lift RPL upstream by aiming outbound at roofs that are genuinely due — older and storm-worn — and by mining your own customer book, your highest-RPL source by far.
  7. On storm work, stay strictly on the document-and-estimate side; never negotiate the claim, interpret coverage, promise a payout, or erase a deductible.

Cost per lead tells you what you paid at the door. Revenue per lead tells you what walked back out. The roofers who grow are the ones who stopped staring at the first number and started managing the second — and who pointed their best dollars at the roofs that were actually due.

If you want the upstream lift without guessing, RoofPredict scans your area and your existing list, estimates each roof's age as a range, and models the storms each roof has taken — so the leads you generate skew toward homes that are actually due, and your revenue per lead rises on every channel that touches them. It is not a lead service and it will not promise you a close; it sharpens the outbound you already run. Book a demo and bring a street you already know, and you decide whether the roofs it flags match what you would have found on a ladder.

FAQ

What is the difference between revenue per lead and cost per lead in roofing?

Cost per lead (CPL) is total spend on a source divided by the leads it produced. Revenue per lead (RPL) is total closed revenue from a source divided by every lead it produced, including the ones that went nowhere. CPL tells you what you paid; RPL tells you what an average raw lead was worth. You need both, because a cheap CPL source can lose money once you see its low RPL, and an expensive source can be your most profitable.

How do I calculate revenue per lead?

Pick a cohort window (90 days for retail, up to 180 for storm work). Sum the closed contract revenue attributed to a source, then divide by the total number of leads that source produced in that window. RPL = closed revenue / total leads. Use total leads, not only the closed ones, so your conversion rate is baked in. Keep the contract basis consistent across all sources.

Why is the cheapest lead source often the least profitable?

Low cost per lead usually signals low intent or shared demand. Marketplace and aggregator leads are cheap because the same homeowner is sold to several contractors and may not even need a roof yet, so close rate and average job value are low. After you factor margin and the labor to chase those leads, net contribution per lead can be zero or negative even when the CPL looks great.

What is net contribution per lead and why does it matter more than CPL?

Net contribution per lead is gross profit per lead (RPL times your gross margin) minus your cost per lead. It is the money each lead from a source puts in your pocket after acquisition cost and margin, before fixed overhead. It is the single number to rank sources by, because it combines what you pay, how well the source converts, how big the jobs are, and your margin — all the things CPL alone hides.

What counts as 'spend' when calculating cost per lead?

Everything it takes to generate the lead, not only the ad invoice: media or platform spend, lead-marketplace fees, agency or management fees, tooling tied to the channel, and the direct labor that exists to create leads — setters, canvassers, and the CSR hours spent qualifying calls. Leaving out labor makes 'free' channels like canvassing and referral outreach look cheaper than they are and skews every comparison.

What's a good cost per lead for roofing?

There is no universal good CPL, because a good CPL is entirely relative to the revenue per lead it produces. A $120 CPL is excellent if RPL is $900 and terrible if RPL is $150. Compute your own panel of CPL and RPL by source, rank by net contribution per lead, and let your own numbers set your targets rather than importing another company's benchmark.

How long should the measurement window be?

Long enough to capture the lag between lead and close. For retail roofing, use a trailing 90-day cohort, tracking the leads that entered in a period through to their eventual close rather than mixing this month's spend with this month's signed revenue. For storm and supplement-heavy work, stretch the cohort to 120 to 180 days, since that revenue lands later and a short window makes those sources look dead when they are just slow.

How does targeting roof age and storm history improve revenue per lead?

RPL is set rate times run rate times close rate times average job value. Aiming outbound at older, storm-worn roofs lifts the close rate (more homeowners genuinely need work), the average job value (aged and damaged roofs lean toward full replacement), and even set rate (a rep with a true, specific reason to be at that door gets the conversation). Tools like RoofPredict estimate roof age as a range and model storm exposure per roof so your list skews toward homes that are actually due, raising RPL on every channel that touches them.

Can I improve revenue per lead without spending more on marketing?

Yes, and it is usually the cheapest fix. RPL is driven by your conversion chain — set rate, run rate, close rate, and job size. Improving speed-to-lead, reducing appointment no-shows, and following up multiple times in the first day all raise RPL with zero added ad spend. Fix the chain before blaming or cutting a source, because a low RPL is often a follow-up problem, not a channel problem.

Generate and pitch storm work strictly on the document-and-estimate side. Inspect, document damage with dated photos and measurements, and prepare an accurate Xactimate-aligned estimate for your own scope, then hand it to the homeowner, who files with their carrier. Do not, for a fee, negotiate or handle the claim, interpret what the policy covers, promise a payout or approval, promise the deductible is waived, or advertise a free roof — that is unlicensed public adjusting in most states. Good documentation also lifts close rate, which raises RPL on storm leads honestly.

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 Serviceweather.gov
  5. NOAA National Centers for Environmental Information - Storm Events Databasencdc.noaa.gov
  6. U.S. Census Bureau - American Housing Surveycensus.gov
  7. U.S. Bureau of Labor Statistics - Roofers Occupational Outlookbls.gov
  8. Federal Trade Commission - Advertising and Marketing Basicsftc.gov
  9. International Code Council - International Residential Codeiccsafe.org
  10. Texas Department of Insurance - Public Insurance Adjusterstdi.texas.gov
  11. National Association of Insurance Commissionersnaic.org
  12. U.S. Small Business Administration - Marketing and Salessba.gov
  13. OSHA - Roofing and Fall Protectionosha.gov
  14. RoofPredictroofpredict.com

Related Articles