Case study

Are Your Ads Losing Money? Kill, Watch, or Scale

The short answer

Your ads are losing money when your cost per booked job is higher than the gross profit that job produces. That's it. Not cost per click. Not cost per lead. Not the ROAS number the ad platform shows you.

So before you can judge any campaign, you need four numbers:

  1. Average job value. What a closed customer actually pays you.
  2. Gross margin. What's left after labor and materials, before overhead.
  3. Lead-to-customer close rate. Out of 10 leads, how many become paying jobs.
  4. Cost per lead. Ad spend divided by leads, counting phone calls and form fills.

If you don't have those four, you're not evaluating ads. You're guessing, and the platform is happy to let you.

The math that decides everything: break-even cost per lead

Here's the calculation. This is an illustration, so plug in your own numbers.

Say your average job is $600. Your gross margin is 50%, so each job leaves you $300 before overhead. You close 1 out of every 4 leads, a 25% close rate.

That means each lead is worth $300 x 0.25 = $75 in gross profit.

$75 is your break-even cost per lead. Pay exactly $75 per lead and you're working for free. Pay $90 and you're losing money on every single lead, no matter how busy the phone feels.

Now set your target. If you want ads to return three dollars of gross profit for every dollar in, your target CPL is $75 / 3 = $25.

Two numbers. Break-even at $75, target at $25. Everything between those is the "watch" zone. That's your whole dashboard.

Adjust for repeat customers, carefully

If you run a recurring service like lawn care, pest control, or pool maintenance, your real customer value isn't one job. If the average customer stays 14 months at $150 a month with a 45% margin, that customer is worth about $945 in gross profit, not $67.

That changes your break-even dramatically. But only use lifetime value if you can actually prove your retention number from past customers. If you're estimating retention because it sounds right, use first-job value instead. Optimistic LTV is the single most common way local businesses talk themselves into overpaying for leads for a year straight.

Don't judge too early. Here's when the data is real.

The biggest mistake is killing a campaign on Wednesday because Monday and Tuesday were quiet. The second biggest is letting a campaign run for six months because "brand awareness."

Reasonable guidance for local service ads:

  • Give it at least 20 to 30 leads before you draw conclusions about cost per lead. Below that, one unusually cheap or expensive week swings the whole average.
  • Give it 2 to 4 weeks minimum on Google Search, longer on Meta, since the algorithm needs conversion data before it stabilizes.
  • Give it at least 3x your typical sales cycle before judging revenue. If your quotes take three weeks to close, judging month-one revenue is judging an incomplete picture.
  • For a single ad or keyword with zero conversions, the practical rule is to cut it once it has spent roughly 2x to 3x your target CPL with nothing to show. In the example above, that's $50 to $75 spent with no lead.

If your total budget is so small that you can't hit 20 leads in a month, that's the real finding. Concentrate spend on one campaign, one service, one geography, instead of spreading it across five and learning nothing about any of them.

Kill, watch, or scale: the decision rules

Once you have enough volume, sort every campaign, ad set, and keyword into one of three buckets.

Kill it

Kill when any of these are true:

  • Cost per lead is above break-even and has been for a full evaluation window. You are paying to lose money faster.
  • The leads are the wrong leads. Out of area, wrong service, price shoppers who were never going to buy at your rate. High lead volume with a collapsed close rate is a spend problem dressed up as a win.
  • It has spent 2 to 3x your target CPL with zero conversions.
  • It only converts on branded search terms. If someone Googled your business name, you didn't buy a customer. You bought a click on a customer you already had.

Kill fast and kill without ceremony. A losing keyword doesn't get better because you've been running it since March.

Watch it

Watch when cost per lead sits between your target and break-even. In the example, that's $25 to $75. These are profitable but thin, and they usually have a fixable bottleneck.

Watching means actively working the campaign, not just staring at it:

  • Cut the bottom 20% of keywords, placements, or audiences by cost per lead.
  • Add negative keywords weekly. In local service search, junk terms like "jobs," "salary," "DIY," "free," and "near me cheap" quietly eat real budget.
  • Check the offer and the landing page before you touch bids. A weak page turns good traffic into bad numbers, and no bid strategy fixes that.
  • Tighten hours and geography to where your closes actually come from.

Give a "watch" campaign one focused change at a time, then one more evaluation window. If it doesn't move into scale territory after two rounds, move it to kill.

Scale it

Scale when cost per lead is at or below your target and lead quality holds up when you check the actual booked jobs, not just the form fills.

Scale in increments of 15% to 25% of daily budget, then wait a week. Bigger jumps reset the algorithm's learning and often spike your CPL for days. Watch cost per lead as you go, because it almost always rises as you increase spend. You're buying less qualified impressions at the margin. The moment CPL crosses your target and stays there, you've found the ceiling for that campaign. Hold it there and grow elsewhere.

The four traps that make good ads look bad

Before you kill anything, rule these out.

Untracked phone calls. Local service ads generate calls, and if calls aren't tracked as conversions, your reporting is missing the majority of your leads. Use call tracking on the ad number and count calls over a minimum duration, usually 30 to 60 seconds, as leads.

Unanswered leads. If nobody calls the form fill back within an hour, your close rate craters and your ads take the blame. Speed to lead is a sales problem that shows up on the ad report.

No offline conversion loop. The platform knows a form was submitted. It doesn't know that form turned into a $4,000 job unless you tell it. Feeding closed-job data back into Google Ads or Meta gives the algorithm the right target to optimize toward.

A landing page that leaks. You can run perfect ads into a page that doesn't load fast, doesn't say what you do, and doesn't make calling obvious. The traffic isn't the problem there. We ran into exactly this on a redesign project, and you can see how we rebuilt a 35-year-old landscaping studio's site to stop losing the visitors it was already getting.

Run this check monthly, in 20 minutes

Open your ad account and your job records side by side. Then:

  1. Recalculate break-even CPL and target CPL from last month's real average job value, margin, and close rate.
  2. Pull cost per lead by campaign, then by ad group or ad set.
  3. Match leads to booked jobs so you can see close rate by campaign, not just overall.
  4. Sort every line into kill, watch, or scale. Write it down.
  5. Execute the kills the same day. Make one change to each watch. Raise budget 20% on the scales.

Twenty minutes a month beats a quarterly panic where you turn everything off.

Want a second set of eyes on your numbers?

If you're running ads and can't tell whether they're making money, that's usually a tracking and math problem, not a creative problem, and it's fixable in a week. Grab a free 15-minute growth call and we'll go through your actual numbers together. No pitch, no pressure: book a time here.

Have a growth problem worth solving?

Bring the website, offer, or campaign. Leave with a clearer next move.
Book a Free 15-Min Growth Call Free 15-minute conversation · No pressure · Talk directly with Rio