Blog › Case study
Case studyNov 15, 2026·6 min read

From $10,500 in Ads to $78,000 in Revenue: A Landscaping Case Study

Case study
$10.5K
→ $78K revenue
The short versionA real landscaping client spent $10,500 on Meta ads. That brought 401 leads, 294 qualified, 22 appointments and 16 paying customers worth $78,000, about $7 back for every $1 spent. Tracking every lead in one pipeline is what made those numbers visible.

Most "case studies" show one big number and skip everything in between.

This one shows every step, straight from a real landscaping client's GoHighLevel pipeline in Illinois.

The numbers, step by step

Ad spend
$10.5KMeta ads
Leads
401from the ads
Qualified
294right fit, right area
Appointments
22visits booked
Customers
16paid jobs
Revenue
$78Kfrom 16 customers
One landscaping client, start to finish. Every lead tracked in GoHighLevel.
Real CRM
GoHighLevel · lead pipeline
GoHighLevel pipeline: 401 opportunities, 294 qualified, 22 appointments booked
The real pipeline: 401 leads, 294 qualified, 22 appointments booked. Names blurred.

What those numbers really mean

~$26cost per lead
~$656cost per paying customer
7.4xreturn on ad spend
  • 73% of leads were qualified. 294 out of 401 were the right fit and in the right area. The targeting and the offer were doing their job.
  • About $656 to win each customer. Against roughly $4,875 in revenue per customer, that's an easy trade.
  • About $7 back for every $1 spent. $78,000 in revenue from $10,500 in ads.
The ads didn't just bring leads. Every dollar could be traced to a real customer.

Why tracking every lead mattered

Every lead from the ads went into one GoHighLevel pipeline. That's the only reason these numbers exist.

Without it, you'd know you spent $10,500 and "got some jobs." With it, you know exactly:

  • How many leads came in, and how many were worth calling
  • How many turned into booked visits
  • How much revenue those visits brought in

That's how you decide, with confidence, whether to spend more.

Do you know your cost per customer?I'll help you find it, and show you where your leads are slipping away.
Get my free audit →

What you can take from this

  • Judge ads by customers and revenue, not clicks. A $26 lead means nothing until it becomes a paying job.
  • Put every lead in one place. A simple pipeline shows you exactly where people drop off.
  • The step from qualified lead to booked visit is where the money is. 294 qualified leads turned into 22 appointments. Faster, more persistent follow-up is the biggest lever most businesses have. Here's why speed matters so much.

Common questions

Do Facebook ads work for landscaping companies?

They can work very well. In this case, a landscaping client turned $10,500 in Meta ad spend into 401 leads, 16 paying customers and $78,000 in revenue.

What is a good cost per lead for landscaping?

In the landscaping accounts I manage, quality leads usually cost around $30–35. In this case study it was about $26.

What is a good return on ad spend for a landscaper?

It depends on your job sizes and margins. This client got about 7.4x: $78,000 in revenue from $10,500 in ads.

How do you track which ads turn into customers?

Put every lead into one CRM pipeline, such as GoHighLevel, and move each one through stages: lead, qualified, appointment, customer.

Want me to look at your ads?

Send me your ad account or website. I'll review it personally and tell you the first 3 things I'd fix. Free, no strings attached.

Usually replies the same day · 151 client reviews

Keep reading

Roofing
Clicks…
but no
leads?
Roofing5 min read

Why Your Roofing Ads Get Clicks But No Leads

Homeowners want a price, not a sales call. How $100+ for zero leads became $25–50 per lead.

Lead costs
$30–47
per lead
Lead costs6 min read

What's a Good Cost Per Lead for Roofing, Plumbing, Landscaping & Concrete?

Real ranges from real contractor accounts, and what pushes yours up or down.

Follow-up
5 min
or the lead goes cold
Follow-up5 min read

Speed to Lead: Why the First Contractor to Call Back Gets the Job

The lead that waits until tomorrow is already talking to someone else.