Why Is Cost Per Lead a Vanity Metric?
Cost per lead counts every inquiry — including tire-kickers, wrong numbers, price shoppers who never book, and leads who ghost your CSR. It measures marketing activity, not marketing results. A channel that generates 100 leads at $50 each isn't better than a channel that generates 30 leads at $100 each if the second channel books 25 jobs and the first books only 10.
Here's the math that should change how you think about marketing. Channel A: $5,000 spend, 100 leads ($50/lead), 10 booked jobs ($500/booked job). Channel B: $3,000 spend, 30 leads ($100/lead), 25 booked jobs ($120/booked job). Your agency would tell you Channel A is 'performing better' because it has a lower cost per lead. In reality, Channel B produces 2.5x more booked jobs at less than a quarter of the cost per job.
This happens all the time in home service marketing. Google Ads might generate a high volume of leads at a low cost per lead, but many are price shoppers comparing three contractors. Facebook might generate fewer leads at a higher cost per lead, but those leads are warmer and book at a much higher rate. If you're optimizing for cost per lead, you'd shift budget to Google. If you're optimizing for cost per booked job, you'd shift budget to Facebook. Same data, opposite conclusions.
- Cost per lead counts every inquiry: tire-kickers, wrong numbers, no-shows, and real prospects
- Cost per booked job counts only the leads that became actual scheduled work
- For most contractors, cost per booked job is 3-5x higher than cost per lead
- A 'cheap lead' channel with low booking rates can be more expensive per job than a 'pricey lead' channel
- Your agency reports cost per lead because they can see ad platform data but not your CRM data
How Do You Calculate Cost Per Booked Job?
Cost per booked job = total ad spend on a channel divided by the number of leads from that channel that became actual booked, scheduled jobs. Not leads. Not calls. Not estimates. Booked jobs. If you spent $4,000 on Google Ads and it produced 16 booked jobs, your cost per booked job from Google Ads is $250.
The formula is simple. The challenge is getting accurate data for both sides of the equation. The numerator (ad spend) is easy — it's in your Google Ads or Facebook dashboard. The denominator (booked jobs from that channel) requires connecting your ad platform data to your CRM data. You need to know: of the leads Google Ads generated, how many actually became booked jobs?
This is where most contractors get stuck. Their ad platform knows cost. Their CRM knows jobs. But nothing connects the two. They end up guessing or doing manual math in spreadsheets — comparing a Google Ads report showing 47 leads to a CRM report showing 47 new jobs in the same period, without knowing if those are the same 47 customers.
- Formula: total ad spend / number of booked jobs from that channel
- Not booked jobs total — booked jobs specifically from that marketing channel
- Requires connecting ad platform data (spend) to CRM data (booked jobs)
- Most contractors can't calculate this because their systems aren't connected
- Spreadsheet math is unreliable: you're comparing totals, not matching individual leads to jobs
What Are Good Benchmark Ranges by Trade?
Benchmark cost per booked job ranges: HVAC service calls $150-$300, HVAC installs $300-$600, plumbing $100-$250, electrical $75-$200, roofing $200-$500, restoration $150-$400. These vary significantly by market, competition level, average job value, and marketing channel. The real question isn't whether you're in range — it's whether each channel's cost per booked job is profitable given your average ticket.
A $250 cost per booked job sounds expensive until you realize your average HVAC install is $8,000. That's a 32:1 revenue-to-marketing ratio — excellent. The same $250 cost per booked job on a $200 drain cleaning is a 0.8:1 ratio — you're losing money on the marketing even before labor and materials.
This is why cost per booked job needs to be evaluated in context of your average job value by channel. Google Ads might produce expensive leads, but if those leads are high-ticket equipment replacements, the cost per job is justified. Facebook might produce cheap leads, but if they're all $150 service calls, the margin is thin. The metric that matters most isn't cost per booked job in isolation — it's the ratio of revenue to marketing cost by channel.
- HVAC service calls: $150-$300 per booked job (typical)
- HVAC installs/replacements: $300-$600 per booked job
- Plumbing: $100-$250 per booked job
- Electrical: $75-$200 per booked job
- Roofing: $200-$500 per booked job
- Restoration: $150-$400 per booked job
- These vary by market — use as starting benchmarks, not absolute targets
Why Does Your Marketing Agency Report Cost Per Lead Instead?
Your marketing agency reports cost per lead because that's what they can measure. They have access to ad platform data (clicks, impressions, leads, cost) but not your CRM data (booked jobs, revenue). They can tell you how many leads they generated and what each one cost. They can't tell you how many became booked jobs or what revenue they produced — because that data lives in your CRM.
This creates a structural misalignment. Your agency's incentive is to maximize the metric they can control (leads) and report the number that looks best (cost per lead). Your incentive is to maximize the metric that matters (booked jobs and revenue). These aren't the same thing — and the gap between them is where marketing waste lives.
A responsible agency would want to see your CRM data to calculate cost per booked job alongside cost per lead. If they resist this transparency, ask why. The most common reason is that cost per booked job reveals that some campaigns they're running aren't actually profitable — generating leads that never book. The accountability gap between cost per lead and cost per booked job is often 3-5x.
- Agencies see ad platform data: clicks, impressions, form fills, cost
- Agencies don't see CRM data: booked jobs, revenue, customer quality
- Cost per lead is the best metric they can report — not the best metric for your decisions
- Accountability gap: cost per lead looks good even when jobs aren't booking
- Solution: connect CRM data to ad data so both you and your agency see cost per booked job
- Ask your agency to report cost per booked job — if they can't, you need better attribution
How Do You Lower Your Cost Per Booked Job?
Three levers reduce cost per booked job: improve lead quality (better targeting, less waste), improve booking rate (answer calls, train CSRs, follow up on estimates), and improve attribution (find hidden winners and cut hidden losers). Most contractors focus on getting more leads. The fastest ROI usually comes from booking more of the leads you're already paying for.
Lever 1 is lead quality: tighter targeting, negative keywords in Google Ads, better audience selection on Facebook, and eliminating low-intent campaigns. This reduces the numerator (spend) and improves the denominator (more leads that are likely to book).
Lever 2 is booking rate: answer every call (missed calls destroy your cost per booked job), train CSRs to convert calls into bookings, follow up on unsold estimates within 24 hours, and make booking easy. If you're missing 20% of your calls, you're inflating your cost per booked job by 20% without realizing it. Lever 3 is attribution: once you can see cost per booked job by channel, you can shift budget from expensive channels to profitable ones. This is where Rivet makes the biggest impact — showing you which channels to scale and which to cut.
- Lever 1: Improve lead quality — better targeting, negative keywords, audience refinement
- Lever 2: Improve booking rate — answer calls, train CSRs, follow up on estimates
- Lever 3: Improve attribution — find which channels are profitable and shift budget accordingly
- Missed calls inflate cost per booked job: 3 missed calls/week at $500 avg = $72K/year lost
- CSR training: every 10% improvement in call-to-book rate drops cost per booked job by 10%
- Attribution insight: cutting one unprofitable channel can fund growth in a profitable one
How Does Rivet Calculate Cost Per Booked Job Automatically?
Rivet connects your ad platform spend data (Google Ads, Facebook, LSA) to your CRM job data (ServiceTitan, Jobber, Housecall Pro) and calculates cost per booked job by channel, campaign, keyword, and creative — automatically, in real time. No spreadsheets, no manual matching, no guessing. One dashboard shows you exactly what each marketing channel costs per actual booked job.
The calculation happens by connecting three data sources: ad spend (from your ad accounts), lead attribution (from call tracking and UTM data), and job outcomes (from your CRM). Rivet matches individual leads to the marketing touchpoints that generated them, then follows those leads through to booked job status and collected revenue.
The result is a dashboard that shows, for example: 'Google Ads: $4,200 spent, 18 booked jobs, $233 cost per booked job, $67,000 revenue. Facebook: $1,800 spent, 12 booked jobs, $150 cost per booked job, $41,000 revenue. LSA: $2,100 spent, 22 booked jobs, $95 cost per booked job, $48,000 revenue.' Now your budget decision is obvious: scale LSA, shift Google Ads budget to Facebook, and stop overspending on the highest cost-per-job channel.
- Connects ad platform spend to CRM job outcomes automatically
- Calculates cost per booked job by channel, campaign, keyword, and creative
- Real-time dashboard: see cost per booked job update as jobs are completed
- No spreadsheets or manual matching required
- Compares channels side by side so budget decisions are obvious
- Works with ServiceTitan, Jobber, Housecall Pro, and other CRMs