
"Is 3.9x a good ROAS?"
That was the number on a call with my account manager last month, for one of our clients, a moving company. August came in at a 3.9x return on ad spend. My first question wasn't whether 3.9x is high. It was how much of every booked dollar the business actually keeps.
That's the part most answers to "what is a good ROAS" skip. They hand you a single number, usually built on e-commerce stores. For a lead generation or service business, I don't think a good ROAS is a benchmark at all. It comes from your margin and your profit target, and the revenue behind it has to come from your CRM, not from the ad platform.
Here's how I work it out, and what that 3.9x actually meant.
What ROAS measures and what it leaves out
ROAS is revenue divided by ad spend. Spend $1,000, book $4,000, and your ROAS is 4x.
It's a revenue number, not a profit number. A 4x ROAS for a business that keeps 70 cents of every dollar is a very different month than a 4x ROAS for a business that keeps 20 cents. Same ratio, completely different outcome.
So I don't trust a ROAS figure until I know two things. What margin the business runs on, and where the revenue number came from.
Why most ROAS advice doesn't fit lead generation
Most of what you'll read about ROAS was written with e-commerce in mind. A store sells a product online, the pixel sees the purchase, and the purchase value shows up in the ad account a few minutes later. The revenue is right there.
Lead generation doesn't work that way. The ad produces a call or a form. The revenue happens later, and often offline. A after a quote, a sales conversation, or a booked job. The ad platform never sees it unless you send it back.
That changes two things for a lead gen business.
- The revenue in your ROAS has to come from your CRM or your job records, matched back to the ads that produced those leads.
- The ROAS you need depends on your margin, and a service business can run on very different margins than a retailer.
If the ROAS you're reading in Google Ads is built on form fills with a made up value attached, you're not looking at ROAS. You're looking at an estimate. It's a big part of why your CRM data is the most valuable asset in your ad account.
How to calculate your break even ROAS
Break even ROAS is the point where the margin on the revenue your ads bring in exactly pays for the ads. Below it, you lose money on every ad dollar. Above it, you make some.
The formula is simple. Break even ROAS equals 1 divided by your gross margin.
- At a 50% margin, break even ROAS is 2x.
- At a 25% margin, break even ROAS is 4x.
- At a 70% margin, break even ROAS is about 1.4x.
Look at the 25% case. A business on thin margins can run a 3.5x ROAS, which sounds healthy, and still lose money on its ads every month. A business on fat margins can run 2x and be doing fine.
Use the margin left after the cost of delivering the work, meaning labor, materials, and whatever else it takes to do the job. That's the money available to pay for marketing.
So what is a good ROAS? The one that hits your profit target
Breaking even isn't the goal. A good ROAS is the multiple that produces the profit you want from the ad spend.
Here's the math I ran on that call. The business runs about a 50% margin. My read was that the owner would want at least a 2x to 3x return on what he puts into ads, so I started at 2x.
At a 50% margin, a 2x return takes 4x on revenue.
- Spend $3,000 on ads in a month.
- Book $12,000 in revenue from those leads.
- Keep $6,000 after the cost of doing the jobs.
He puts in 3 and gets 6 back. That's the 2x return, and it takes a 4x ROAS to get there.
The general version is that the ROAS you need equals the return you want divided by your margin.
- 2x back at a 50% margin needs a 4x ROAS.
- 3x back at a 50% margin needs a 6x ROAS.
- 2x back at a 25% margin needs an 8x ROAS.
I'd rather set that number before a campaign launches than argue about it after. If you know your margin and your profit goal, you know what good looks like before the first dollar is spent. Our CAC calculator runs the same logic from the cost per customer side.
And one important note here. We always associate ad spend to profit, not revenue, because if the business chose not to invest that ad spend, it would have contributed directly to their profitability. It's technically not profit yet either, because they have fixed costs that have to be covered, so it's contribution margin, but for simplicity we call it profit. That's why internally we always aim to get a 3x Profit on Ad Spend (POAS), so we know our clients are winning.
Was 3.9x a good ROAS for this business?
At a 50% margin, break even is 2x. August's 3.9x was nearly double that.
Run it through the profit math and 3.9x brings back about $1.95 in margin for every ad dollar. That's right at the 2x return I'd expect the owner to want at a minimum, and the trend was moving in the right direction.
Once you have a number like that, the question stops being whether the ads work. It becomes how much more to put behind them. In September we moved weekly spend from $300 to $425.
The budget here is small, and the math is exactly the same. ROAS doesn't care how big the account is, and tends to compress as you scale.
Where the revenue comes from matters more than the ratio
That 3.9x would mean nothing if it came from the ad platform, because most of the time the platforms are wrong. It didn't. Here's how my account manager builds it, because the mechanism is the part worth copying.
Match each lead to a booked job
The client runs its quotes, jobs, and invoices in its job management software. For the calls she can identify, she takes the caller's phone number, looks it up there, and finds the job and what it was invoiced for. One job for this client can show up as more than one invoice when the work runs across two days, so she adds those together instead of counting the first one she finds.
Don't credit the ads for customers you already had
Some people who call in from an ad are past customers. On that call we found callers who had been clients since the year before, and some who already had a booking and were just calling to confirm it. She doesn't count those as new revenue from the ads, even when the call came through a paid campaign. It makes the ROAS lower but it also makes it honest.
Wait for the values to land
Revenue lags in a business like this. A job gets booked weeks before it happens, and the dollar amount often isn't filled in until later. When we talked, September's numbers weren't complete yet. Some booked jobs still had no amount on them.
So we look at revenue by when the job was booked, and we don't call a month until its values have caught up. We also ask the client's team to keep those values updated, because the ROAS is only as current as their records.
Be clear about what you can't match yet
Not every lead can be tied to a job. Some calls come through with a date and not much else, so there's no phone number to look up. We count the ones we can match and clearly tell them what's missing, rather than filling the gap with an estimate.
None of this is fancy. It's a phone number lookup and some discipline. But it's the difference between a ROAS you can make budget decisions on and one you can't. When the ad account and the CRM disagree, this is usually where the join breaks. And yes, you can automate this more, but I wanted to use this example because even without all the fancy tech it's still possible to do. And then once you have the system, you can work to automate it.
Why platform reported ROAS can steer you wrong
This goes beyond reporting. With value based bidding, like Target ROAS in Google Ads, the platform predicts future conversions and their value from the conversion values you report to it (Google Ads Help).
Give it the same value on every form fill and it will chase whatever produces the most form fills, junk included. That's what I call the Reverse Optimization Trap. The platform keeps getting better at finding leads you don't want, because nobody told it which ones turned into revenue.
The fix is to send booked or closed revenue from your CRM back to the platform as offline conversions, matched to the original click. Then the value it optimizes toward is the value you actually collect. That's true on Google, and on Meta for that matter.
What about longer sales cycles?
A moving company books a job within days or weeks. A B2B service with a three month sales cycle won't know last month's revenue for a while.
The math doesn't change. The timing does. I'd still set the ROAS goal from margin and profit target, measure it over a window long enough for deals to close, and watch earlier stages like qualified leads and held appointments in between. If leads are coming in and not turning into appointments, that's a different problem, and it's worth figuring out whether it's the leads or the follow-up before you touch the ads.
How to find a good ROAS for your business
Work through it in this order.
- Get your gross margin after the cost of delivering the work.
- Divide 1 by it. That's your break even ROAS.
- Pick the return you want on ad spend and divide it by your margin. That's your goal.
- Build revenue from your CRM or job records, matched lead by lead. Leave out existing customers and give values time to land.
- Send that revenue back to the ad platform so it optimizes toward what you collect, not what gets submitted.
If ROAS comes in above break even and near your goal, you've earned the right to spend more. If it comes in high but the revenue came from the platform tracking and not your CRM, you don't know yet. You need it coming from the source of truth.
If you want a second set of eyes on whether your ROAS is built on real revenue, we can help with that in our free system review. We can help trace it from the ad to the booked job. You can also see how we run the full system.
Sources

About the author
Kyle Rutledge
Owner
I’m Kyle, founder of Gradari, a paid ads lead generation agency that helps B2B and SaaS companies stop wasting budget on low-quality leads and start building systems that actually drive growth.
