All articles
    Local Services•10 min read•Jun 11, 2026

    Cost Per Lead Is Lying to You: The Cost-Per-Booked-Job Math Every Contractor Needs

    A $40 lead at 15 percent close costs more than a $70 lead at 40 percent. The cost-per-booked-job formula for roofers and home-services owners.

    Contractor's hands at a truck tailgate with a clipboard, calculator, and a roofing estimate in warm natural light

    Cost per lead is the most quoted number in home-services marketing and the most useless. It is the number on every dashboard, the number agencies brag about, the number that makes a $40 lead feel like a win. But cost per lead does not pay your crew, fund your truck, or show up in your bank account. The number that does is cost per booked job, and it is almost never on the report.

    Optimizing for cheap leads usually means buying the worst leads. The cheapest clicks come from the broadest, least-qualified searches and the lowest-intent audiences. They convert to phone calls. They rarely convert to signed contracts. Once an owner sees the actual math, the conversation flips from buying cheaper leads to buying better ones. This post is the math. Optimizing for cheap leads usually means buying the worst leads. The cheapest clicks come from the broadest, least-qualified searches and the lowest-intent audiences. They convert to phone calls. They rarely convert to signed contracts. Once an owner sees the actual math, the conversation flips from buying cheaper leads to buying better ones. This post is the math.

    The Number on Your Dashboard Is Not the Number That Matters

    Why cheap leads feel like a win and rarely are

    A cheap lead is a dopamine hit. Cost per lead drops, the line on the chart goes down, and everyone in the meeting nods. The problem is that cost per lead measures the front door, not the close. A roofer who buys 100 leads at $40 and signs 15 of them is not beating a roofer who buys 100 leads at $70 and signs 40. He just thinks he is, because the only number he looks at is the one at the front door.

    The trap of optimizing in-platform CPL

    Google Ads and Meta will both happily drive your cost per lead down if you ask them to. That is what their bidding does best. The trap is that the platform optimizes for the conversion it can see, a form fill or a phone call, not a signed job it never hears about. Tell Smart Bidding to find cheaper leads and it will find people who fill out forms and never answer the phone again. The platform did its job. You asked the wrong question.

    What you actually pay per signed job

    Your real customer acquisition cost is total spend divided by the jobs you actually booked. Everything between the click and the signed contract is leakage, and the size of that leakage is your close rate. A channel with a high cost per lead and a high close rate can be your cheapest channel per job. A channel with a rock-bottom cost per lead and a terrible close rate can be the most expensive thing you run. You will never see that on an ad-platform dashboard, because the dashboard does not know your close rate.

    The Cost-Per-Booked-Job Formula

    CPBJ = CPL divided by close rate

    This is the whole post in one line. Cost per booked job equals cost per lead divided by your close rate. Write it on a whiteboard. Take a screenshot. It is the single most useful piece of arithmetic in a home-services business, and it takes ten seconds to run once you have the two inputs.

    Cost per booked job equals cost per lead divided by close rate. If a metric is not on the way to that number, it is a diagnostic, not a goal.

    Worked example: the $40 lead vs the $70 lead

    Run two channels side by side. Channel A delivers leads at $40 and you close 15 percent of them. Channel B delivers leads at $70 and you close 40 percent of them. On the dashboard, Channel A wins by a mile. In your bank account, it loses.

    • Channel A: $40 cost per lead divided by a 0.15 close rate equals about $267 per booked job.
    • Channel B: $70 cost per lead divided by a 0.40 close rate equals about $175 per booked job.
    • Same marketing dollar, and the expensive lead is roughly a third cheaper once it becomes a signed job.

    The $40 lead looked about 43 percent cheaper. The $70 lead is about 34 percent cheaper where it counts. Move budget toward the channel with the lower cost per lead and you spend more to book the same work, and feel good about it the whole time.

    Why a 10-point swing in close rate beats a 30 percent cut in CPL

    Because close rate sits in the denominator, it moves cost per booked job harder than cost per lead does. Cut your cost per lead by 30 percent and you cut cost per booked job by 30 percent. Lift your close rate from 20 percent to 30 percent, a 10-point swing, and you cut cost per booked job by a third. Most owners pour all their energy into negotiating cheaper leads and almost none into closing more of the leads they already pay for. That is backwards. The cheapest job you will ever book is the one you win from a lead already sitting in your pipeline.

    Layer In Speed-to-Lead

    How response time moves close rate

    Close rate is not a fixed trait of your business. It is something you operate, and the biggest operational lever on it is how fast you respond. A lead that gets a call back in two minutes is a different lead, economically, than the same person contacted ninety minutes later. By then they have called two competitors and one of them picked up. You paid for that click either way.

    The five-minute window and what it does to bookings

    Industry benchmarks on lead response have been consistent for years. Responding within five minutes instead of thirty can sharply raise your odds of actually reaching and qualifying the lead. The exact multiple varies by study and by trade, but the direction never changes. Speed wins. For a home-services owner this is the highest-return, lowest-cost change available, because it lifts close rate without touching ad spend. You book more jobs on the same budget.

    Where most contractors lose jobs they already paid for

    The leak is rarely the ad. It is the gap between the lead arriving and a human reaching out. Forms that sit in an inbox until morning. Missed calls that never get a callback. Voicemails nobody checks until Monday. Every one of those is a job you paid to generate and then let walk to a competitor. Fix the response process and you raise close rate.

    Cost Per Booked Job by Service Line

    Why roofing, siding, gutters and windows have different economics

    A single blended cost per booked job across every service you offer hides as much as cost per lead does. A booked gutter cleaning and a booked full roof replacement are not the same job and should not carry the same acquisition budget. Each service line has its own average ticket, its own margin, and its own close rate. Roofing leads cost more and close slower but carry a large ticket. Gutters convert fast and cheap, but the job is small. Lump them together and you will overspend on the small stuff and underspend on the work that actually funds the business.

    Margin-weighted booked-job cost

    The honest version of this metric weights by margin, not revenue. What you can afford to pay for a booked job is a function of the gross profit that job throws off, not its sticker price. A $1,200 gutter job at 50 percent margin and a $14,000 roof at 30 percent margin can support wildly different acquisition costs. Run cost per booked job per service line, then check it against the gross margin that line produces. That is the number that tells you where to put the next marketing dollar.

    Spending more to win the jobs worth winning

    Once you see cost per booked job by margin, the strategy inverts. You stop chasing the cheapest leads across the board and start spending aggressively where the booked-job economics are strongest. Paying $300 to book a high-margin roof replacement is a great trade. Paying $120 to book a thin-margin repair might be a bad one. Same dollar, opposite decision, and you can only tell them apart with the math.

    1. Compute cost per booked job separately for each service line.
    2. Pull the gross margin per job for each line from your numbers, not your gut.
    3. Rank lines by margin dollars per booked job, not by cost per lead.
    4. Shift budget toward the lines that produce the most profit per signed job, and cap the thin ones.

    You Cannot Manage What You Cannot See

    Why close rate lives in your CRM, not your ad account

    Here is why almost nobody runs this math. The two inputs live in two different systems. Cost per lead lives in your ad account. Close rate lives in your CRM. Google and Meta know what they spent and how many forms came in. They have no idea which of those turned into a signed contract three weeks later. The number that matters is split across a fence, and most owners never reach over it.

    Connecting calls, forms and bookings to the job outcome

    The fix is to wire the systems together so the booking outcome flows back to the ad that produced it. On the phone side, that means call tracking with dynamic number insertion so each call carries its source. We cover the mechanics in our piece on call tracking and attribution. For our roofing clients in Massachusetts and Pennsylvania, the architecture pairs CallRail for call and form capture with AccuLynx as the CRM, so a job that reaches signed in AccuLynx can be traced back to the call, form, and campaign that started it. That connection is what turns a pile of leads into a measurable close rate per channel.

    What changes when Google can finally see your close rate

    Once the booked-job outcome flows back to the platform, the bidding algorithm stops optimizing for cheap forms and starts optimizing for the searches that produce signed jobs. The mechanism is offline conversion import. Google keys offline conversions on the GCLID captured at the click, with a 90-day window to upload the outcome. As of June 15, 2026, Google stopped allowing new advertisers onto the legacy Ads API path for offline conversion imports and is steering everyone to its Data Manager API. Accounts already importing keep working during the migration, so for now CallRail still flows in the way it always has. The plumbing is changing but the principle is not. Where no GCLID exists, Enhanced Conversions for Leads falls back to hashed first-party data like email and phone to match the conversion. On Meta, the same outcome goes back through the Conversions API, deduplicated against the browser pixel with a shared event ID so you do not double-count. Once the platforms can see close rate, they start chasing it for you.

    A One-Page Scorecard for Owners

    The four numbers to track every month

    You do not need a dashboard with forty widgets. You need four numbers per channel, every month, on one page. These four let you compute cost per booked job and catch a dying channel before it costs you a season.

    1. Spend: what you put into the channel this month.
    2. Leads: how many calls and forms it produced.
    3. Close rate: how many of those leads became signed jobs, pulled from the CRM.
    4. Cost per booked job: spend divided by booked jobs, computed per channel and per service line.

    Red flags that mean your cheapest channel is your most expensive

    Watch for the channel with the lowest cost per lead and the lowest close rate. That is the trap channel. It looks like your best performer on the ad dashboard and it is quietly your worst on cost per booked job. The other red flag is a channel where cost per lead is creeping down month over month while booked jobs stay flat or fall. That is not efficiency. That is the algorithm finding cheaper, worse leads while you mistake it for progress.

    • Lowest cost per lead paired with lowest close rate: your most expensive channel in disguise.
    • Cost per lead falling while booked jobs stay flat: the algorithm is buying junk.
    • One service line carrying a blended number that looks fine but hides a money-losing line underneath.
    • A channel with no close-rate data at all: you are flying blind and should assume the worst.

    How to brief your agency on outcome economics

    Stop asking your agency for a lower cost per lead. Ask for a lower cost per booked job, and give them the close-rate data to optimize against. A good partner will welcome it, because it lets them prove the work in dollars instead of vanity metrics. Tell them which service lines carry the margin, give them access to the booked-job outcomes, and judge the relationship on cost per booked job by line. That single shift in the brief changes what gets optimized, what gets cut, and what gets scaled.

    The Math Changes the Whole Conversation

    Cost per lead rewards the cheapest leads, which are usually the worst leads. Cost per booked job rewards the leads that actually become work. The formula is trivial, cost per lead divided by close rate, but running it forces you to connect your ad spend to your CRM, to respond to leads in minutes instead of hours, and to spend where the margin is instead of where the clicks are cheap. Across more than $100M in ad spend managed, $185M+ returned, and 60,000+ leads, the pattern holds. The owners who win are not the ones who buy leads cheapest. They are the ones who book the most jobs per marketing dollar, and they are the only ones measuring it that way.

    You do not have a lead-cost problem. You have a measurement problem that is making your cheapest channel look like your best one.

    Want this applied to your account?

    We will run a free audit of your paid media, website, or full funnel and tell you exactly where the biggest gains are.

    Get a free audit