Skip to main content

Buying Roofing Leads vs Generating Your Own: The Real Math

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

Every roofing owner eventually hits the same wall. The phone slows down, the crews need feeding, and you start asking where the next twenty jobs come from. Two camps form. One says buy leads from Angi, Modernize, a storm aggregator, or whoever is cold-calling you that week. The other says generate your own through door knocking, mail, referrals, and a website. Both camps usually argue from a story instead of a spreadsheet.

I want to fix that. The decision between buying leads and generating your own is not a personality test, and it is not a moral question about whether real roofers knock doors. It is a math problem with a few inputs you can actually measure: what you pay per opportunity, how many of those opportunities turn into signed jobs, what each job is worth, and what it costs you in time and overhead to chase each one. Once the numbers are on the table, the answer is usually obvious for your specific shop, your specific market, and your specific stage of growth.

What follows is the full breakdown: how to calculate true cost per acquired job for each channel, where the hidden costs hide, why most contractors miscount, and how the smartest operators blend both instead of picking a side. There are worked examples with real arithmetic, a couple of tables you can copy into your own sheet, and a decision framework at the end.

The only number that actually matters: cost per acquired job

Most roofers compare lead sources by cost per lead. That is the wrong unit. A lead is not revenue. A signed contract that your crew builds and gets paid for is revenue. So the number you live and die by is cost per acquired job, sometimes called cost per acquisition or CPA.

Here is the formula, and it works for every channel:

Cost per acquired job = Total spend on the channel / Number of signed jobs from that channel

That denominator is the trap. To get from a raw lead to a signed job you pass through several leaks: not every lead answers the phone, not every answered call books an inspection, not every inspection produces a quote, and not every quote closes. Each step has a survival rate, and you multiply them together.

Let me show the chain with round numbers so the structure is clear:

  • You buy 100 leads.
  • 70 of them you actually reach (a 70% contact rate).
  • 50 of those let you onto the roof or book an appointment (a 71% set rate).
  • 40 of those appointments turn into a delivered quote (an 80% quote rate).
  • 12 of those quotes close (a 30% close rate on quoted jobs).

So 100 leads became 12 jobs. If you paid $45 per lead, you spent $4,500 to get 12 jobs, which is $375 per acquired job. That $375 is the number that belongs next to your average gross profit per job, not the $45 sticker price.

The lesson lands harder when you realize that a small change in any of those survival rates moves the final cost dramatically. Drop the close rate from 30% to 20% and the same $4,500 now buys 8 jobs instead of 12, pushing cost per job from $375 to $563. The lead price never changed. Your sales process did.

Why "cost per lead" lies to you

A $25 shared lead can be more expensive per job than a $120 exclusive lead, and a $0 referral can quietly cost you more than either once you account for the discount your reputation pressures you into giving a friend of a friend. Cost per lead hides all of that. Cost per acquired job exposes it.

Write this on the whiteboard in your sales room: we do not buy leads, we buy jobs, and a lead is only worth what it converts.

Bought leads: how the market actually works

Before the math, you need to understand what you are actually buying, because the word "lead" covers wildly different products.

Shared leads

The big consumer marketplaces, the ones a homeowner finds by searching for a roofer, typically sell the same lead to multiple contractors. The Federal Trade Commission has documented how some of these networks operate and the disputes over how leads get distributed, so this is not a secret. When a homeowner fills out a form, that contact can be sold to three, four, or more roofers at once. You are now in a footrace.

Shared lead economics:

  • Lower sticker price, often $15 to $60 depending on market and roof type.
  • Lower contact and set rates, because the homeowner is fielding several calls and may have already booked someone before you dial.
  • Speed-to-lead becomes everything. If you call in five minutes you have a shot. If you call in two hours the job is often gone.
  • Higher volume needed to hit your job target, which means more phone labor.

Exclusive leads

Some vendors sell a lead to only one contractor. Sticker price runs higher, often $80 to $300 in residential roofing depending on the source and whether storm activity is spiking. Contact and set rates are usually better because you are not racing anyone, but you are paying for that privilege up front, sold or not.

Appointment-set leads

A step beyond exclusive: a vendor or call center qualifies the homeowner and books an inspection on your calendar. Price per appointment can run several hundred dollars. The set rate is high by definition, but no-show rates and the quality of the qualification become your new risk.

Aggregated storm leads

After a hail or wind event, lead sellers light up. They sell lists and form-fills tied to a damaged ZIP. The quality varies enormously, and timing is brutal because every roofer in three states is buying the same storm.

The structural problems baked into bought leads

No amount of sales skill removes these. They are properties of the product:

  1. You are renting access to a homeowner, not owning a relationship. The platform owns the homeowner. Next storm, that same homeowner gets sold again, possibly to you, possibly to a competitor.
  2. Shared leads put you in a price fight before you knock. When a homeowner collects four quotes, the conversation drifts toward who is cheapest, which compresses your margin exactly when your acquisition cost is highest.
  3. You cannot control quality or volume reliably. Some weeks the leads are junk, renters, tire-kickers, wrong numbers. You still pay. Some weeks the faucet runs dry.
  4. Costs spike when you most need leads. After a storm, when demand for roofers explodes, lead prices climb with it. You pay the most when competition is fiercest.

None of this means bought leads are bad. It means they are a known quantity with known failure modes, and you price them accordingly.

Speed-to-lead: the hidden multiplier on bought leads

There is one operational variable that quietly decides whether your bought-lead math works at all, and it is response time. With shared leads especially, the homeowner is being called by everyone who bought that form-fill, and the contractor who calls first usually wins the appointment before anyone else dials. The difference between calling a fresh lead in two minutes versus thirty minutes is not small. Contact rates fall off a cliff as minutes pass, because the homeowner picks up the first ring, books with whoever sounded competent, and stops answering.

This means a bought-lead operation lives or dies on how fast a human, or an automated text followed by a human, hits a new lead. If your leads land in an inbox someone checks twice a day, you are paying premium prices for leads you have already lost. Build the operation before you scale the spend:

  • Route new leads to a phone, not an email, the instant they arrive.
  • Aim to dial within the first few minutes during business hours.
  • Have a same-second automated text fire so the homeowner has your name before a competitor calls.
  • Track your speed-to-lead as a metric and coach it like you coach close rate.

A shop that fixes speed-to-lead can raise its contact rate by a wide margin, and because contact rate sits at the top of the conversion chain, every point of improvement there flows all the way down to cost per acquired job. Two roofers buying identical leads at identical prices can have wildly different cost per job purely because one answers in two minutes and the other answers in two hours.

Generating your own: the channels and what they really demand

Self-generated work is not one thing either. It is a portfolio of channels, each with its own cost structure, lead time, and skill requirement.

Door knocking and canvassing

The oldest channel in roofing and still one of the most effective in storm and aging-roof markets. The cost is labor, gas, and management, not a per-lead fee. Done well it is the cheapest cost per acquired job in the business. Done badly it burns reps, wastes payroll on empty streets, and produces nothing.

The make-or-break variable is which streets your reps work. A canvasser knocking a subdivision built last year is lighting payroll on fire. The same canvasser on a street full of twenty-year-old roofs that took a hail core is printing appointments. More on solving that targeting problem later.

Direct mail

Postcards and letters to selected homes. Highly measurable, scalable, and patient. Response rates in home services typically sit in the low single digits and often well under one percent, so the whole game is targeting and offer. Mailing every house in a ZIP is how roofers convince themselves mail does not work. Mailing the right houses is how mail quietly funds a company for years.

Referrals and past customers

The highest-converting, lowest-cost source you have, and the one most roofers neglect because it requires follow-up discipline rather than a credit card. Your old customer book is full of roofs that are aging on a clock you already know. A roof you installed twelve years ago is now a roof approaching the back half of its life, and that homeowner already trusts you.

A homeowner who searches your town for a roofer and lands on your site is a high-intent, exclusive, free-to-you lead, after the cost of building and ranking the site. This is slow to build and compounds over years. It is the opposite of a bought lead: high lead time, low marginal cost, fully owned.

Yard signs, wraps, and local presence

Low-tech, low-cost, slow-burn brand presence in the neighborhoods you already work. Cheap per impression, hard to attribute precisely, real over time.

What self-generation actually costs

The trap on this side is the opposite of the bought-lead trap. Roofers tell themselves self-generated leads are "free" because there is no invoice. They are not free. They cost:

  • Labor. A canvasser at $15 to $20 an hour plus commission, or your own time, which is the most expensive labor in the company.
  • Management. Someone has to assign streets, track knocks, hold reps accountable, and coach. That is overhead.
  • Lead time. Door knocking pays this week. SEO pays in eighteen months. You cannot feed crews on Monday with a channel that matures next year.
  • Variance and burnout. Canvassing has brutal turnover. Replacing a rep who quit after three bad weeks of knocking dead streets is a real, recurring cost.

Self-generated work is cheaper per job at scale, but you pay for it in operational complexity, patience, and people management.

A closer look at the direct-mail math

Mail deserves its own walk-through because roofers misjudge it more than any other channel. The arithmetic is unforgiving but simple. Suppose a postcard campaign costs you 60 cents per piece all in, printing and postage. You mail 5,000 pieces, so you spent $3,000. At a 0.5% response rate you get 25 calls. If 60% of those callers let you inspect, that is 15 inspections. At an 80% quote rate and a 35% close rate, you sign about 4 jobs. Your cost per acquired job is $3,000 divided by 4, or $750.

Now change one thing: targeting. Mail the same 5,000 pieces but aimed only at homes with aging or storm-worn roofs, and your response rate might double to 1%, because you are reaching homeowners for whom the message is actually relevant. Now you get 50 calls, 30 inspections, and roughly 8 jobs from the same $3,000, dropping cost per acquired job to about $375. The postage was identical. The list was different.

This is why "mail does not work" is almost always code for "I mailed the wrong houses." The homeowner with a four-year-old roof throws your card away no matter how good the design is. The homeowner with a twenty-year-old roof that took hail last spring is the one who calls. Mail is a precision instrument or it is a money furnace, and the list decides which.

Mining your old customer book, step by step

The referral and past-customer channel is so cheap and so neglected that it deserves a concrete playbook. If you have been roofing for a decade, your records hold two buried assets: roofs you installed that are now aging, and quotes you delivered that never closed.

  1. Export every job you completed eight or more years ago. These roofs are entering the second half of their service life. The homeowner already trusts you because you did the original work. A simple maintenance-check outreach turns a slice of these into repairs, and over the next several years, replacements.
  2. Export every quote from the last several years that never signed. Some did not buy because the timing was wrong, not because they hated you. A re-touch, especially after a storm passed through their area, recovers a meaningful share.
  3. Segment by neighborhood and roof age. When you already have a crew working a street, the homes nearby in your own book are nearly free to reach in person.
  4. Reach out with help, not a pitch. A note that their roof is reaching the age where an inspection makes sense reads as service. It costs a stamp or an email and converts far better than any bought lead.

The reason this channel posts the lowest cost per acquired job in the building is that you skip the entire top of the funnel. There is no contact-rate leak, because they already know your number, and no trust-building cost, because you earned it years ago.

The head-to-head math: a worked comparison

Let me put both sides through the same machine. I will use one mid-sized residential roofer with an average job gross profit of $3,500 (revenue minus materials and crew labor, before overhead). Your real number will differ, but the structure holds. I am picking conversion rates that are reasonable for a competent shop, not best-case fantasy.

Scenario A: Buying shared leads

  • Lead price: $40
  • Contact rate: 65%
  • Appointment set rate: 55%
  • Quote delivered rate: 80%
  • Close rate on quotes: 25%

Start with 100 leads at $40 = $4,000.

  • 100 leads -> 65 contacts -> 36 appointments (rounding 35.75) -> 29 quotes (rounding 28.6) -> 7 jobs (rounding 7.2).

Cost per acquired job: $4,000 / 7 = roughly $571.

Gross profit on 7 jobs: 7 x $3,500 = $24,500. Subtract lead cost of $4,000 and you net $20,500 in gross profit before overhead, plus you owe the phone labor to chase 100 leads.

Scenario B: Buying exclusive leads

  • Lead price: $150
  • Contact rate: 80%
  • Appointment set rate: 65%
  • Quote delivered rate: 85%
  • Close rate on quotes: 32%

Start with 100 leads at $150 = $15,000.

  • 100 leads -> 80 contacts -> 52 appointments -> 44 quotes (rounding 44.2) -> 14 jobs (rounding 14.1).

Cost per acquired job: $15,000 / 14 = roughly $1,071.

That is nearly double the shared-lead cost per job, but look closer. You got 14 jobs from 100 leads instead of 7, so you needed far less phone labor per job, the homeowner was not shopping you against three competitors, and your margins held. Whether the higher CPA is worth it depends entirely on your gross profit per job. At $3,500 gross, a $1,071 acquisition cost is healthy. At an $1,800 gross repair job, it is dangerous.

Scenario C: Generating your own through targeted door knocking

Now the self-generated side. Say you run one canvasser.

  • Canvasser cost: $18/hour, 30 productive hours/week = $540/week in base pay.
  • Plus management overhead allocated: $160/week (a slice of a sales manager's time).
  • Plus gas and materials: $50/week.
  • Total weekly cost: $750.

Now the output, and this is where targeting decides everything. A canvasser knocking randomly might set 3 inspections a week. A canvasser working pre-selected aging and storm-worn streets might set 8.

Random streets: 3 inspections/week, 80% quote rate = 2.4 quotes, 35% close = roughly 0.84 jobs/week. Weekly cost $750 / 0.84 = about $893 per acquired job, and morale is awful because the rep is knocking dead doors.

Targeted streets: 8 inspections/week, 80% quote rate = 6.4 quotes, 35% close = about 2.24 jobs/week. Weekly cost $750 / 2.24 = about $335 per acquired job, and the rep is making commission and staying.

Same channel, same person, same pay. The only variable that changed was which doors got knocked, and cost per acquired job swung from $893 to $335. That is the whole ballgame for self-generation.

Putting the scenarios side by side

Channel Cost per job Volume control Margin pressure Lead time Who owns the customer
Shared bought leads ~$571 High High (shopped) Immediate The platform
Exclusive bought leads ~$1,071 High Medium Immediate The platform
Random door knocking ~$893 Medium Low This week You
Targeted door knocking ~$335 Medium Low This week You
Targeted direct mail varies, often $200-$500 Medium Low 2-6 weeks You
Referrals / past customers often under $150 Low Very low Variable You
Local search / website low marginal Low Low 6-18 months You

The numbers above are illustrative for one specific shop. The point is not the exact figures, it is the shape: self-generated channels win on cost and ownership once you solve targeting and lead time, while bought leads win on immediacy and predictable volume.

The hidden costs almost everyone forgets to count

The simple math above is honest as far as it goes, but a real comparison has to include the costs that never show up on an invoice. Skipping these is how roofers make confident, wrong decisions.

On the bought-leads side

Phone labor to chase low-contact leads. If your contact rate is 60%, four out of ten leads you paid for never even pick up, but a human still spent time dialing them. Shared leads especially demand a tight, fast call operation. That salary is part of your true cost per job and rarely gets allocated.

Margin erosion from being shopped. When a homeowner has four quotes, your average sale price drops. If being shopped costs you even $500 of margin per closed job, that is a real cost of the shared-lead channel that never appears next to the lead fee.

Credit-and-dispute friction. Junk leads, wrong numbers, and out-of-area contacts require you to file for credits. Some vendors make this easy, some make it a part-time job. That administrative drag is a cost.

No compounding. Money spent on a bought lead is gone. It builds no asset. Next month you start from zero again. There is no equity in a channel you rent.

On the self-generated side

Wasted payroll on bad targeting. This is the single biggest hidden cost in roofing self-generation, and the example above quantified it. Payroll spent on a rep walking past brand-new roofs is pure waste, and it is invisible because the rep was "working."

Recruiting and turnover. Canvasser churn is real. If a rep quits every few months, you carry recruiting, onboarding, and ramp costs continuously. Reps quit fastest when they are sent to dead streets and make no commission, which ties turnover directly back to targeting.

Management bandwidth. Self-generation needs a manager assigning work, tracking activity, and coaching. If that is you, it is the most expensive hour in the company spent on logistics.

Lead-time risk. If you bet the quarter on a slow channel and crews go hungry while it matures, the cost is idle payroll and possibly losing crews.

Here is the honest summary: bought leads have a high and somewhat fixed cost per job that you cannot drive down much, while self-generated leads have a low floor but a high ceiling if your operations are sloppy. The whole edge in self-generation comes from operational discipline, and the biggest lever inside that discipline is targeting.

Why targeting is the hinge the whole decision turns on

Go back through every scenario. The bought-lead cost per job was set by conversion rates you only partly control. The self-generated cost per job swung from $893 to $335 on targeting alone. Targeting is the variable with the most leverage and the one most roofers leave to chance.

Think about what a roofer is actually trying to find: homes where the roof is worn out enough to need replacing, and ideally homes that also took a recent storm hit. The problem is that this information is hard to see from the street and harder to see at scale.

Consider the standard ways roofers try to target, and where each one fails:

  • Year built from public records or a real-estate site. This tells you the age of the house, not the age of the roof. A 1985 house may have been re-roofed in 2019. You will waste a knock or a stamp on a roof that has eighteen good years left. Re-roofs are invisible to year-built data.
  • Driving the neighborhood and eyeballing roofs. Decent reps can spot a tired roof, but it does not scale, it is slow, and a lot of worn roofs look fine from the curb. Granule loss and storm bruising are not obvious from a truck window.
  • A hail map or storm report. This tells you where it hailed. It does not tell you which specific roofs the hail actually wore out, and it says nothing about roof age. A hail swath over a neighborhood of three-year-old roofs is a poor target.

Each of these gets you part of the picture. None of them answers the actual question a route planner needs, which is: of all the homes in this area, rank them by which roofs are most likely due, accounting for both how old the roof probably is and what weather it has actually taken.

Where per-roof data changes the self-generation math

This is the gap RoofPredict was built to fill, and it fits exactly where the math says the leverage is. The product looks at aerial imagery and weather history per address and returns, for the homes in an area, a roof-age range per roof plus storm exposure modeled on that specific roof, then ranks the doors so your reps and your mail hit the homes most likely to be due and skip the ones that are not.

The distinction worth understanding is physics versus a lookup. A hail map shows you where a storm passed. Modeling the storm on each individual roof, hail and wind, paired with an estimated roof-age range, is an attempt to answer which roofs that storm probably wore out, house by house. That is a different and more useful question for a route planner than where the storm passed.

Honest limits, because you should not trust a vendor who will not state them. The roof age is a range, not a birth certificate, something like eighteen to twenty-two years, not "installed March 2004." The storm modeling gives you odds, not proof. It tells you a roof is likely to have taken damage worth inspecting, not that it definitely has. You and the homeowner still need an actual inspection to know what is on the roof, and the homeowner and their insurer still decide everything about any claim. What the data does is fix the targeting problem, which is the exact variable that moved cost per acquired job from $893 to $335 in the door-knocking example. It points the reps and the postcards at the right doors. It does not close the job, get on the roof, or file anything. It makes the cheapest channels cheaper by removing the wasted knocks and wasted stamps.

That is the whole reason targeting belongs at the center of the buy-versus-generate decision. Bought leads come pre-targeted, badly or well, by the seller, and you pay a premium for that targeting whether or not it is good. Self-generated channels are only cheap when your targeting is good, and good targeting at scale is exactly what most roofers lack. Fix that, and self-generation wins the math in most markets.

When buying leads is genuinely the right call

I am not anti-bought-lead. There are clear situations where buying is the correct, math-backed decision.

You need jobs this week and have no pipeline. Self-generation has lead time. If crews are idle Monday, a bought lead that converts Thursday beats a mail campaign that converts in five weeks. Buying leads is a cash-flow tool.

You are brand new with no reputation, no list, and no rank. A startup roofer has no past customers to mine, no website traffic, and no brand. Bought leads buy you initial volume to build a track record and a customer book you will later mine.

Your close rate is genuinely excellent. If you close 40%-plus on quoted jobs and run a tight, fast phone room, your cost per acquired job on bought leads drops to a level where the channel prints money. Strong closers can make even shared leads pay.

You want to test a new market or service line fast. Buying leads in a new ZIP tells you in two weeks whether demand exists, far faster than building presence.

Your gross profit per job is high enough to absorb the CPA. A full replacement at $3,500-plus gross can carry a $700 acquisition cost. A small repair at $600 gross cannot. Match the channel cost to the job value.

The common thread: buying leads is a tool for speed, testing, and bridging gaps, not a permanent foundation. Roofers who get stuck buying leads forever usually never built the owned channels that would free them.

When generating your own clearly wins

And the other side. Self-generation is the right primary strategy when:

You plan to be in business in five years. Owned channels compound. A customer book, a ranking website, and a canvassing operation get cheaper per job over time. Rented leads never do.

You have or can build the operational muscle. If you can manage a sales team, assign work, track activity, and coach, self-generation rewards that competence with the lowest cost per job in the business.

You have an aging customer book. Roofers who have been around a decade are sitting on a goldmine of roofs they installed that are now aging out, plus past leads that never closed. Mining that book is the cheapest acquisition there is.

Your margins are thin and you cannot afford a high CPA. If your jobs are competitive and your gross is tight, you simply cannot afford $1,000 per acquired job. You need the $335 channel, which means you need self-generation done well.

You operate in a steady, non-storm market. Outside heavy storm regions, the edge from working aging roofs systematically is strongest, because you are not fighting an out-of-town swarm and bought-lead competition for the same handful of damaged ZIPs.

The smart answer is almost always both, sequenced correctly

The buy-versus-generate framing is a little false. Mature roofers run a portfolio. The real skill is the mix and the sequence.

A sensible progression looks like this:

  1. Stage one, brand new. Buy leads for cash flow and to build a track record. Accept the high cost per job as the price of starting. Immediately start capturing every customer into a CRM so you are building an asset from day one.
  2. Stage two, established. Layer in self-generation. Start a canvassing operation aimed at the right streets. Begin a targeted mail program. Build the website. Keep buying leads to smooth the gaps, but watch the percentage of jobs coming from owned channels climb.
  3. Stage three, mature. Owned channels carry most of the load at a low blended cost per job. Bought leads become a tactical tool: buy during a slow stretch, buy to test a market, buy when a storm justifies it. You are no longer dependent on anyone else's faucet.

The goal is to move the customer relationship onto channels you own, so that you control your own pipeline instead of renting it. A roofer who owns their next jobs, through their own streets and their own customer book, is a roofer who survives a bad lead-market quarter and a slow storm season.

A blended-cost worked example

Say a mature shop wants 30 jobs a month and runs a mix:

  • 10 jobs from targeted door knocking at $335 each = $3,350
  • 6 jobs from targeted mail at $400 each = $2,400
  • 5 jobs from referrals and the old customer book at $120 each = $600
  • 4 jobs from the website at near-zero marginal cost = call it $0 marginal
  • 5 jobs from exclusive bought leads to fill the gap at $1,071 each = $5,355

Total acquisition spend: $11,705 for 30 jobs, a blended cost per acquired job of about $390. Compare that to running the same 30 jobs entirely on exclusive bought leads at $1,071 each, which would cost $32,130. The blend saved over $20,000 in a single month, and most of that saving came from the owned channels that targeting makes cheap.

That is the math that should drive the decision. Not which side feels more like "real roofing." The blend, weighted toward owned channels, with bought leads as a tactical fill, wins on cost in nearly every mature shop.

A decision framework you can run this week

Here is a practical sequence to figure out your own answer instead of borrowing mine.

Step 1: Measure your current cost per acquired job by channel. Pull the last 90 days. For every channel, divide total spend (including allocated labor) by jobs signed. You will be surprised. Most roofers have never done this and discover one channel is quietly subsidizing a money-losing one.

Step 2: Measure your conversion chain. Contact rate, set rate, quote rate, close rate. These tell you whether your problem is your leads or your sales process. A great lead wasted by a 15% close rate is your fault, not the vendor's.

Step 3: Calculate your maximum sustainable CPA. Take your average gross profit per job. A common rule of thumb is to keep acquisition cost to a fraction of gross, and where you draw that line depends on your overhead. Whatever your number, any channel above it loses money and must be fixed or cut.

Step 4: Audit your targeting. For self-generated channels, ask honestly how your reps and mail decide which homes to hit. If the answer is "the rep picks" or "we mail the ZIP," you have found the leak. Fixing targeting is the highest-leverage move available, because it is what swings self-generated cost per job by 2x or 3x.

Step 5: Mine the asset you already own. Pull your old customer list and your dead leads. Anyone you installed for ten-plus years ago, anyone who got a quote and never signed. This is the cheapest pipeline in the building and most roofers ignore it.

Step 6: Sequence the build. Use bought leads for immediate cash flow if you need it. Simultaneously invest in the owned channels that compound. Set a target for the percentage of jobs coming from owned channels and grow it every quarter.

A quick self-check list

  • Do I know my cost per acquired job, by channel, for the last 90 days? If not, start there.
  • Is my close rate on quoted jobs above 30%? If not, fix the sales process before blaming the leads.
  • Is my self-generated targeting based on actual roof condition and storm exposure, or on guesswork and year-built data?
  • Am I capturing every customer into a system I own, so I am building an asset rather than only renting access?
  • What percentage of my jobs came from channels I own versus channels I rent, and is that percentage growing?

Storm markets versus steady markets change the answer

The buy-versus-generate math is not the same in Oklahoma as it is in Oregon, and treating it as one decision is a mistake. The variable that shifts is how much of your demand is driven by weather events versus the slow, steady aging of every roof in your service area.

In heavy storm regions, a hail or wind event creates a sudden spike of homeowners who need a roofer right now. Bought-lead prices climb during these spikes because every contractor, including out-of-town crews who follow the weather, is buying the same storm. You pay the most exactly when competition is fiercest, and a shared lead in a fresh storm ZIP might be sold to six roofers instead of three. The flip side is that demand is real and urgent, so close rates can be strong if you reach the homeowner fast.

The trap in storm markets is building your entire pipeline on the next event. Storms do not arrive on schedule. A roofer whose only plan is to chase hail has feast-and-famine cash flow and competes in a swarm every time the radar lights up. The fix is to pair storm response with a steady base of aging-roof work that does not depend on the weather. When you systematically work the roofs in your area that are simply old enough to replace, you have jobs between storms, which smooths payroll and keeps crews from leaving in the dry months.

In steady, low-storm markets, the calculus tilts hard toward self-generation. There is no swarm of out-of-town competitors, bought-lead volume for damage claims is thin, and the durable opportunity is the ordinary aging of every roof on every street. A roofer who works those aging roofs methodically, year after year, builds a predictable business that does not need a catastrophe to be profitable. This is precisely where good per-roof targeting pays the most, because the whole strategy depends on finding the roofs that are due when there is no storm pointing you at them.

The practical takeaway: know which market you are in, and weight your channels accordingly. Storm markets can justify more tactical lead buying around events, but every market rewards a self-generated base built on roof age, and steady markets reward it most of all.

How to attribute jobs honestly so the math stays true

None of this analysis works if your data is dirty, and most roofers' data is filthy. The number-one way the buy-versus-generate decision goes wrong is bad attribution: you cannot improve what you measure incorrectly, and you will pour money into a channel that only looks good because another channel is secretly feeding it.

The classic example is the referral that gets credited to a bought lead. A homeowner hears about you from a neighbor, then searches your name, clicks a paid listing, and fills out a form. Your tracking now credits the paid channel with a job that your reputation actually produced. Multiply that across a quarter and you will over-invest in paid acquisition and starve the word-of-mouth that was doing the real work.

A few disciplines keep attribution honest:

  • Ask every booked customer how they found you, and log it. Train whoever answers the phone to ask and record the answer in your CRM. It is imperfect, but it catches the referral-credited-to-paid problem.
  • Use distinct phone numbers or form sources per channel where you can, so a mail piece, a yard sign, and a paid listing each report their own calls.
  • Reconcile spend to signed jobs monthly, by channel. Not leads, jobs. This is the report that tells you the truth.
  • Allocate labor and management to the self-generated channels so they are not artificially flattered against the bought channels that carry an obvious invoice.

When your attribution is clean, the cost-per-acquired-job table from earlier has real numbers behind it, and the decision makes itself. When it is dirty, you are guessing, and you will usually guess in favor of whichever channel sends you an invoice, because it feels concrete, even when it is your most expensive way to buy a job.

Common mistakes that wreck the math

A few errors I see constantly, each one capable of making a good channel look bad or a bad channel look good:

Counting self-generated leads as free. They cost labor, management, and time. Allocate those costs or you will over-invest in a channel that is bleeding payroll.

Comparing cost per lead instead of cost per job. Already covered, but it bears repeating because it is the most common error. The cheap lead is often the expensive job.

Ignoring lead time. Betting the quarter on SEO while crews go idle is a cash-flow disaster even though SEO is cheap per job. Match channel lead time to your cash needs.

Buying leads to mask a broken sales process. If your close rate is low, more leads just means more money wasted. Fix conversion first; it is cheaper than buying your way around it.

Mailing or knocking everything. Untargeted volume is how roofers prove to themselves that mail and canvassing "do not work." They work fine. Spraying the whole ZIP does not.

Never building an owned asset. Roofers who buy leads for ten years and never build a customer book, a brand, or a canvassing operation are perpetual renters, exposed to every price hike and every dry spell.

Chasing storms as the only plan. Storm work is feast or famine and brings an out-of-town swarm that bids you down. A roofer whose entire pipeline depends on the next hail event has no pipeline, only a lottery ticket. Working aging roofs systematically smooths the famine.

Bringing it together

The argument between buying leads and generating your own is not really an argument once you put numbers to it. Bought leads are a fast, predictable, expensive, non-compounding tool that you rent. Self-generated leads are slower to build, operationally demanding, and far cheaper per job once you solve targeting, and they build an asset you own.

The cost-per-acquired-job math, run honestly with all the hidden costs included, almost always points the same direction for a shop that intends to last: weight your pipeline toward channels you own, use bought leads tactically to bridge gaps and test markets, and obsess over the one variable with the most leverage, which is pointing your reps and your mail at the roofs that are actually due.

That last part, knowing which roofs are due house by house, is the difference between self-generation that costs $893 a job and self-generation that costs $335 a job. It is where the math is won or lost. Getting a real read on roof age and storm exposure per address, instead of guessing from the curb or the year built, is how you stop renting your next jobs and start owning them.

If you want to see what that targeting looks like on your own streets, you can book a walkthrough of RoofPredict and have it run against an area you already know, so you can judge for yourself whether it points at the right doors before you bet payroll on it.

FAQ

Is buying roofing leads or generating your own cheaper?

Measured by cost per acquired job, self-generated leads are usually cheaper once your targeting is good. In a typical worked example, bought shared leads ran roughly $571 per job and exclusive leads over $1,000, while targeted door knocking came in around $335 per job. The catch is that self-generation is only cheap with good operations and targeting; done badly, randomly knocked door costs can climb near $900 per job and beat the value of buying.

What is a good cost per roofing lead?

Cost per lead is the wrong number to optimize. A $25 shared lead can cost more per signed job than a $150 exclusive lead because of lower contact and close rates. Track cost per acquired job instead, total channel spend divided by jobs signed, and compare that to your average gross profit per job to decide what you can afford.

What is the difference between shared and exclusive roofing leads?

Shared leads are sold to several contractors at once, so they are cheaper but you race competitors and often get shopped on price, lowering contact and close rates. Exclusive leads are sold to one contractor, cost more up front, and typically convert better because you are not competing for the same homeowner. Which is cheaper per job depends on your close rate and how fast your phone room responds.

How do I calculate cost per acquired job for a lead source?

Divide total spend on the channel, including allocated labor, by the number of signed jobs it produced. Work the conversion chain: leads times contact rate times set rate times quote rate times close rate gives you jobs. For example, 100 leads at $40 with a 65% contact, 55% set, 80% quote, and 25% close rate yields about 7 jobs, or roughly $571 per acquired job.

When does buying roofing leads make sense?

Buying leads is the right call when you need jobs immediately and have no pipeline, when you are brand new with no reputation or customer book, when your close rate is strong enough to make the cost per job work, when you want to test a new market quickly, or when your gross profit per job is high enough to absorb the acquisition cost. It is a tool for speed and bridging gaps, not a permanent foundation.

Why does targeting matter so much for self-generated leads?

Targeting is the variable with the most leverage in self-generation. In a worked door-knocking example, sending a canvasser to random streets produced about $893 per acquired job, while sending the same canvasser at the same pay to pre-selected aging and storm-worn streets produced about $335 per acquired job. The only thing that changed was which doors got knocked. Good targeting removes the wasted knocks and stamps that make self-generation expensive.

Why is year-built data bad for targeting roofing prospects?

Year built tells you the age of the house, not the age of the roof. A home built in 1985 may have been re-roofed in 2019, so it has many good years left and is a wasted knock or stamp. Re-roofs are invisible to public records and real-estate sites. To target well you need an estimate of roof age and storm exposure per address, not the construction date of the house.

Can RoofPredict tell me the exact age of a roof or guarantee storm damage?

No. RoofPredict returns a roof-age range per address, something like eighteen to twenty-two years rather than an exact install date, and it models storm exposure as odds, not proof. It points your reps and mail at the homes most likely to be due so you skip the new roofs. You still need an actual inspection to confirm condition, and the homeowner and their insurer decide everything about any claim.

Should I use both bought and self-generated leads?

Almost always, yes. Mature roofers run a portfolio: bought leads for immediate cash flow and market testing, and owned channels, canvassing, mail, referrals, and search, for low blended cost and a compounding asset. A blended pipeline weighted toward owned channels can cut blended cost per job dramatically compared with running entirely on bought leads, while still giving you the speed bought leads provide.

How do I lower my cost per acquired job without spending more?

Three levers move it most. First, raise your close rate on quoted jobs, since a poor sales process wastes good leads. Second, improve targeting so reps and mail hit homes with worn or storm-exposed roofs instead of new ones. Third, mine the asset you already own, your past customer book and old unclosed quotes, which is the cheapest pipeline you have. None of these require buying more leads.

The Roofline by RoofPredict

Stay Ahead of Roofing Market Changes

Join The Roofline by RoofPredict for weekly roofing intelligence: material price signals, storm demand, insurance and regulatory updates, sales tactics, and local contractor opportunities.

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

Sources

  1. National Roofing Contractors Associationnrca.net
  2. Insurance Institute for Business and Home Safety (IBHS)ibhs.org
  3. NOAA National Weather Serviceweather.gov
  4. NOAA Storm Prediction Centerspc.noaa.gov
  5. Federal Trade Commission: Business Guidanceftc.gov
  6. FTC: Truth in Advertisingftc.gov
  7. U.S. Bureau of Labor Statistics: Roofers Occupational Outlookbls.gov
  8. U.S. Census Bureau: American Housing Surveycensus.gov
  9. OSHA: Fall Protection in Constructionosha.gov
  10. International Code Council: International Residential Codeiccsafe.org
  11. Texas Department of Insurance: Hail and Roof Damage Claimstdi.texas.gov
  12. Small Business Administration: Marketing and Salessba.gov
  13. NOAA National Centers for Environmental Information: Storm Events Databasencdc.noaa.gov
  14. RoofPredictroofpredict.com

Related Articles