Knowledge Base & Insights

Impressions, Clicks, Leads, Jobs: What Event Are You Actually Paying For?

💡 30-Second Executive Summary
  • Contractors treat pay-per-lead, pay-per-click and pay-per-impression as different worlds, usually with strong opinions about which one is a scam.
  • They're the same arithmetic run to different depths.
  • Answer one question — what event am I paying for — then run the chain from your margin down to that event and stop.
  • That single habit tells you your ceiling on any platform that exists now or launches next year, exposes why cheap impressions on a low-intent placement aren't cheap, and kills the most common reporting error there is: putting a cost per contact next to a cost per lead next to a cost per job and calling it a comparison.

Every channel you can advertise on sells you one of three things.

Some sell you the lead itself — a phone call, a form, a name and a number. Google’s Local Services Ads work this way. So do Angi, Thumbtack, HomeAdvisor, and every marketplace that has ever cold-called your business.

Some sell you a visit — a click, a person arriving on your website — and what happens after that is your problem. Search works this way.

And some sell you an impression. Not a visit, not a lead — the fact that your ad was displayed to someone. Display works this way, and so does most targeted social buying: you’re paying per thousand shows, whether or not anybody looks.

Contractors treat these as fundamentally different worlds, usually with strong opinions about which one is a scam. They aren’t different worlds. They’re the same arithmetic, run to different depths.

The chain just gets longer or shorter

The chain that turns your margin into a bid:

average job × margin = max per customer × close rate = max per lead × website conversion = max per click

If you’re buying leads, you stop one step early. The website conversion rate never enters the calculation — you aren’t buying visits, so it doesn’t matter what share of visits become inquiries. Your maximum is max per lead, full stop.

If you’re buying clicks, you run all three steps, because the thing you’re purchasing sits at the end of that line.

And if you’re buying impressions, you run one step further:

max per click × click-through rate = max per impression

Multiply by a thousand and you have your maximum CPM.

What you’re buyingWhere the chain stopsYour maximum
Leadsafter close ratemax per lead
Clicksafter website conversionmax per click
Impressionsafter click-through ratemax CPM

Which has a pleasant consequence. Every time a new platform appears — and one appears every eighteen months, with a new name for what it sells — you don’t need a new framework. You need to answer one question: what event am I paying for? Then run the chain to that event and stop.

Pay per booked appointment, run one step. Pay per lead, two. Pay per click, three. Pay per impression, four. Pay per completed job — if anyone ever offers you that — run zero; your maximum is simply your margin.

Why impressions feel cheap and often aren’t

Run it on a real appliance repair account that could pay $2.66 per click.

  • On a placement where 5% of people who see the ad click it, the most it can pay for a thousand impressions is about $133.
  • On a display placement where 0.3% click — a perfectly ordinary display rate — the same business can pay about $8 for the same thousand impressions.

Same company, same maximum per customer, and a sixteen-fold difference in what a thousand shows are worth. Nothing changed except how many people who saw the ad did anything about it.

This is why “our CPM is only twelve dollars” is not a sentence that means anything. A CPM is only affordable relative to the click-through rate behind it, and low-intent placements have low click-through rates almost by definition. Cheap impressions on an audience that doesn’t respond aren’t cheap. They’re just quiet.

And one case where the chain doesn’t apply at all: an awareness campaign supporting door-to-door sales is bought on impressions, but those impressions never become clicks, leads or website visits. There you don’t compute a maximum — you measure the lift in close rate and compare it to what the campaign cost. Rare, but worth recognizing when you’re in it, because otherwise you’ll judge a working campaign by a metric it was never going to produce. That’s the whole shape of roofing.

The method measures results, it doesn’t model mechanisms

Here’s where most people overcomplicate this, and the overcomplication is expensive.

When you buy a lead from a marketplace, that same lead is often sold to two or three of your competitors. People find this outrageous, and it does mean your close rate on that channel will be lower — you’re now racing to the phone rather than having a conversation.

But you do not need to model any of that.

You don’t need to know how many contractors received the same inquiry. You don’t need to know who called first, or how the platform ranks you, or what its algorithm weighs. All of it is already inside the number you actually care about: your own average conversion from lead to job on that channel.

Measure that, and the mechanism is accounted for. The sharing, the racing, the algorithm — all of it shows up as a lower conversion rate, which flows through the chain and produces a lower maximum for that channel. Which is the correct answer, arrived at by measurement rather than theory.

This is what makes the method portable. It doesn’t care how a platform works. It cares what a platform produces.

Which is also why you should be suspicious of anyone who explains at length how an algorithm works but can’t tell you what a job costs.

Therefore: a maximum per channel

If conversion from lead to job differs by channel — and it does, substantially — then your maximum differs by channel too.

A lead from a search campaign, where the customer found you specifically and called you specifically, might convert at 60%. The same trade’s lead from a shared marketplace might convert at 20%, because two competitors got there first. Those two leads are not worth the same money, and paying the same for both is a straightforward error.

So your maximum isn’t one number. It’s a small grid:

SearchPay-per-leadSocial
Kitchens
Bathrooms
Decks

Service lines down the side, channels across the top — and sometimes a third dimension for job type, where a move-out clean and a recurring customer sit in different rows.

That sounds like a lot. In practice it’s one spreadsheet tab, and it’s the single highest-return hour you’ll spend on your advertising.

Only count what you paid for

A specific rule for pay-per-lead channels, and it materially changes the arithmetic.

Most of them let you dispute leads that were never real — wrong number, someone outside your service area, a person asking for a service you don’t offer, a spam submission. Disputed leads get credited back.

Leads you were refunded for do not go into your economics. Neither the cost nor the lead.

This sounds obvious and it’s routinely ignored, usually because the dispute process is tedious and nobody bothers to reconcile the credits against the report. The result is a cost per lead that looks worse than reality, which can talk you out of a channel that actually works.

On Local Services Ads specifically, most of this is automatic — Google screens the obvious rubbish itself. What it can’t do is see what happened on your end, which is why your dispatcher has to keep the statuses current: booked or not, and what the lead was worth. A poor-quality rating is what triggers a re-examination and a credit. More on that in LSA charges for missed calls.

Compare the same event, or don’t compare

This is the most common mistake in channel reporting, and it’s the reason cross-channel comparisons in most agency reports are meaningless.

Here is one HVAC account’s “conversions” for a six-month period — 921 of them, every one counted the same way in the same report:

What actually happenedCount
Someone phoned through Local Services Ads459
Someone phoned from a search ad179
Someone phoned from the website89
Someone sent a message through Local Services Ads84
Someone filled in the website form75
Someone booked a slot through Local Services Ads35

A booked slot and a message are not the same event, and neither is worth what the other is worth. That account is a good one — every row is a real human making contact. But the moment a marketplace starts counting a profile view or a click on a phone number as a “contact,” the same column stops meaning anything.

That is how a channel gets to look ten times cheaper than everything else: not by being cheaper, but by counting something easier. A “contact” is not the same object as a “lead,” which is not the same object as a booked job. Platforms name their units differently, count them differently, and have every commercial reason to count generously.

The only comparison that means anything is cost per completed job. Take the channel’s spend, divide by the jobs that actually came from it. Now the numbers are commensurable, and quite often the ranking changes completely from what the dashboards suggested.

If you take one habit from this article: never let two numbers sit next to each other in a report unless they count the same event.

Where the risk sits

The two models don’t carry more or less risk. They carry it in different places.

Buying clicks. You see the traffic before it converts. You can look at the search terms, notice that a third of your budget is going to people looking for jobs rather than services, and cut it this afternoon. The risk is paying for a lot of visits that produce nothing — and the control is that you can see it happening and intervene.

Buying leads. You’ve pre-agreed a fixed price for a stranger’s contact details. You can’t see it coming and you can’t cut a specific lead before it arrives. The risk is concentrated in quality: bad leads at a fixed price, arriving on schedule. The controls you do have are the dispute process, the categories you’ve opted into, and your service area — which is why those settings deserve more attention than they usually get.

Neither is safer. A channel isn’t safe or unsafe. A price is affordable or it isn’t.

Closing the loop

One technical point that applies to both models and matters more the longer your sales cycle is.

Your ad platform sees a form submission or a phone call. It does not see whether that call became a booked job, a quote, a wrong number, or someone asking if you’re hiring. And it optimizes toward more of whatever you told it was a success — which, by default, is “a call happened.”

So by default you are training every automated system you use to find you more phone calls, regardless of whether those calls make money.

The fix is to send the outcome back:

  1. Capture the source on every inquiry, including click identifiers on both forms and dynamically tracked calls.
  2. Match those to your CRM by phone number.
  3. Push the status changes back to the platform as offline conversions: qualified, quoted, won.

Now the system optimizes toward revenue.

This is genuinely more work than switching on a standard integration, and off-the-shelf connectors don’t do the phone-number matching reliably enough to trust when your average job is worth thousands. But in any trade where the gap between a call and a customer is large — remodeling most of all — this is the difference between an ad account that learns and one that guesses. Setup detail is in conversion tracking for home services.

It’s also, bluntly, one of the clearest tests of whoever runs your advertising. Ask them whether your ad platform knows which leads became jobs. The answer tells you a great deal.

This chapter is drawn from Win in the Spreadsheet First — the full chain, the seven inputs behind it, and the same treatment per trade are in the book.

Frequently asked questions

What is a good CPM for a home service business?
There is no good CPM in the abstract, because a CPM is only affordable relative to the click-through rate behind it. Take a business that can pay $2.66 per click. On a placement where 5% of viewers click, a thousand impressions are worth about $133. On a display placement clicking at 0.3% — a perfectly ordinary display rate — the same business can pay about $8 for the same thousand shows. Same company, same economics, a sixteen-fold difference. Low-intent placements have low click-through rates almost by definition, so cheap impressions on an audience that doesn't respond are not cheap. They're just quiet.
Is pay-per-lead better than pay-per-click?
Neither is safer — they carry risk in different places. Buying clicks, you see the traffic before it converts: you can read the search terms, notice a third of the budget going to people looking for jobs rather than services, and cut it this afternoon. The risk is paying for visits that produce nothing, and the control is that you can watch it happen. Buying leads, you've pre-agreed a fixed price for a stranger's contact details and can't cut a specific lead before it arrives. The risk concentrates in quality, and your controls are the dispute process, the categories you opted into, and your service area. A channel isn't safe or unsafe. A price is affordable or it isn't.
How do I compare Google Ads, Local Services Ads and Yelp fairly?
Only by cost per completed job. Platforms name their units differently, count them differently, and have every commercial reason to count generously. In one HVAC account we run, a single six-month conversion column contained 459 calls through Local Services Ads, 179 calls from search ads, 89 calls from the website, 84 messages, 75 form fills and 35 booked slots — six different events, added up as one number. A booked slot and a message are not worth the same, and a channel counting profile views as contacts will always look cheapest. Take each channel's spend, divide by the jobs that actually came from it, and the ranking often flips completely. Never let two numbers sit next to each other in a report unless they count the same event.
Should disputed or refunded leads count in my cost per lead?
No — neither the cost nor the lead. Most pay-per-lead platforms let you dispute leads that were never real: wrong number, outside your service area, asking for a service you don't offer, spam. Disputed leads get credited back, and both sides of that transaction have to come out of your economics. This gets ignored routinely because reconciling credits against the report is tedious, and the result is a cost per lead that looks worse than reality — which can talk you out of a channel that actually works. On Local Services Ads much of the screening is automatic, but Google can't see what happened on your end, so your dispatcher has to keep lead statuses current for the credit to trigger.
Why does my ad platform keep sending me bad leads?
Because by default you told it that a ringing phone is success. Your ad platform sees a form submission or a call. It does not see whether that call became a booked job, a quote, a wrong number, or someone asking if you're hiring — and it optimizes toward more of whatever you marked as a conversion. The fix is to send the outcome back: capture the source and click identifiers on every inquiry including dynamically tracked calls, match them to your CRM by phone number, then push status changes back as offline conversions — qualified, quoted, won. Ask whoever runs your advertising whether your ad platform knows which leads became jobs. The answer tells you a great deal.
We do this for you Get a maximum per channel, not one number

Ready to fix the leaks?

Our diagnostic audit covers your tracking, ad accounts, and SEO architecture.

Get a maximum per channel, not one number

Get an Express Growth Audit for Your Business

Enter your website URL — we'll send a breakdown of marketing leaks within 24 hours.

Don't want to wait 24 hours — book a 45-min call.

By submitting, you agree that Husky Digital may contact you about your request by email or phone. We do not send marketing texts or automated calls without your separate consent. See our privacy policy.