THINXSTER
Blog/Meta Ads
Meta Ads8 min readJuly 8, 2026

Why Your Meta Ads ROAS Is Lying to You (and What to Track Instead)

Ads Manager shows a ROAS number that means almost nothing for lead-gen businesses. Here's the gap between reported ROAS and revenue you can actually deposit.

RK
Ryan Korsz
Founder & CEO, Thinxster

TL;DR

Ads Manager shows a ROAS number that means almost nothing for lead-gen businesses. Here's the gap between reported ROAS and revenue you can actually deposit.

→ See how this applies to your business (free 30-min call)

ROAS stands for return on ad spend, and the formula is as simple as it sounds: revenue divided by what you spent to get it. Spend $1,000, generate $4,000 in revenue, and you've got a 4x ROAS. Every dashboard reports it, every agency quotes it, and for local service businesses it is one of the most misleading numbers on the screen.

The problem isn't the math. The problem is what Meta is calling "revenue." Once you see it, you can't unsee it, and you'll never trust the Ads Manager column at face value again.

What Meta is actually counting

The ROAS Facebook shows you is built from pixel-attributed conversion events. For an ecommerce store, that's clean: someone clicks the ad, buys a $90 pair of boots, the pixel fires a "Purchase" event worth exactly $90, and Meta can honestly say "this ad produced $90." Revenue in, revenue tracked, apples to apples.

Now run that logic for a roofing company. Someone clicks your ad and fills out a form. The pixel fires a "Lead" event. What's that lead worth? It has no dollar value — it's a name and a phone number. So one of two things happens:

1.

You assigned a flat value to the lead event (say, $50 per lead), and Meta multiplies leads by that made-up number to produce a "ROAS." That figure is fiction dressed as revenue.

2.

You left it at zero, and Meta reports conversions and cost per lead but no real ROAS at all.

Either way, the number in that column is not money that hit your bank account. It's a count of proxy conversions — form fills, clicks-to-call, "Contact" events — that stand in for revenue but are not revenue. For a lead-gen business, Meta literally cannot see your revenue, because your revenue happens weeks later, on the phone, in a driveway, after a quote and a handshake it has no visibility into.

Meta can't see the money because the money happens weeks later, on the phone, in a driveway it will never visit.

The gap between reported ROAS and true ROAS

Let me show you how wide this canyon gets with real numbers.

Say you spend $3,000 on Meta this month and generate 60 leads. Your cost per lead is $50. Ads Manager, if you've set a lead value of $50, will proudly show a 1x ROAS, or maybe more if you've inflated the value. Looks like you broke even. Panic.

But leads aren't jobs. Walk it down the funnel:

  • 60 leads, of which 40 are real, reachable, and in your service area
  • 24 of those book an appointment (a 60% booking rate on qualified leads)
  • 8 of those close into paid jobs
  • Average job value: $9,000
  • That's $72,000 in actual revenue from $3,000 in spend. Your true ROAS is 24x. The dashboard said 1x. Same campaign, same month, two numbers that are off by a factor of twenty-four.

    This is not a rounding error. It's the difference between shutting off a campaign that's printing money and scaling a campaign because you finally understand what it's doing. Owners kill their best channels every day because they trusted the column instead of the closed jobs.

    Why this happens to lead-gen and not ecommerce

    The core issue is a time-and-place gap between the conversion Meta can see and the revenue you actually earn.

  • Ecommerce: click and purchase happen in the same session, in the same browser, and the price is known. The pixel captures the whole event.
  • Lead-gen: click and purchase are separated by days or weeks, by a phone call, by a sales conversation, and often by an office manager typing into a CRM. Meta sees the front door. It never sees the sale.
  • Add iOS privacy changes, cookie loss, and people who fill out a form on their phone but sign the contract from a laptop, and platform-reported attribution gets even blurrier. Meta is doing its best with the one event it can observe — the form fill — and then guessing at the rest.

    What to track instead: cost per booked job

    Stop optimizing to reported ROAS. For a local service business, the number that governs your business is cost per booked job — total ad spend divided by the number of jobs that actually got scheduled and closed from those ads.

    In the example above, $3,000 in spend produced 8 closed jobs, so your cost per booked job is $375. Now ask the only question that matters: is a $9,000 job worth $375 in advertising to acquire? Obviously, wildly, yes. That answer is clear and honest in a way "1x ROAS" never was.

    From cost per booked job you can back into a true ROAS that means something, because now the numerator is real revenue from real closed work — money you can deposit — not a pixel event with a guessed price tag.

    Closing the loop with your CRM

    Here's the mechanism that makes true ROAS possible: closed-loop attribution through your CRM. The idea is to carry the ad source all the way from click to closed job, so you can trace every dollar of revenue back to the campaign that started it.

    The chain works like this:

  • The lead comes in from Meta, tagged with its source
  • It lands in your CRM as a contact with that source attached
  • As the deal moves — booked, quoted, won — the CRM records the stage and, eventually, the job value
  • Now you can report revenue by ad source, not just leads by ad source
  • This is exactly the kind of pipeline we build. Thinxster builds GoHighLevel pipelines that tag every lead by source and follow it all the way to a closed job, so "true ROAS on closed revenue" stops being a spreadsheet fantasy and becomes a live number you check like a bank balance. Across the accounts we run, that closed-loop tracking has accounted for more than $102M in client revenue — and peak returns of 9.2x ROAS measured on actual closed jobs, not pixel proxies.

    9.2x
    peak ROAS Thinxster has driven, measured on closed jobs not pixel events

    There's a second lever hiding in these numbers. Notice that in the example, 20 of the 60 leads were junk — wrong area, tire-kickers, unreachable. If you can lift the share of leads that are genuinely qualified, your cost per booked job drops without spending another dollar. That's why qualification matters as much as attribution; on the accounts we manage, our systems qualify leads at a 62% average rate, which pulls the whole funnel tighter.

    62%
    average lead qualification rate on Thinxster-managed campaigns

    Rough benchmarks — with a warning

    People always want a number. For local service lead-gen, a healthy campaign typically lands somewhere around a 4x to 8x true ROAS on closed revenue once the funnel is tuned, though high-ticket trades like roofing or solar can run far higher because one job covers a month of spend. But treat those as loose guardrails, not targets. Your real benchmark is your break-even ROAS, which depends on your margins — and that's a calculation worth doing carefully rather than borrowing someone else's number.

    The takeaway is simple. The ROAS in Ads Manager is a proxy metric measuring proxy conversions. The ROAS that runs your business is measured in your CRM, on closed jobs, in dollars you can spend. Build the loop that connects the two, and you'll finally know which campaigns to scale and which to kill — with certainty instead of vibes.

    The One Setting That Makes Reported ROAS Less Useless

    If you are running lead-gen and cannot build full closed-loop attribution tomorrow, there is an interim move that helps: stop feeding Meta a made-up lead value and start feeding it a real one.

    Instead of assigning every form fill a flat 50 dollars, calculate what a lead is actually worth to you on average — average job value times your lead-to-close rate. If a job is worth 9,000 dollars and one in eight qualified leads closes, a lead is worth north of 1,000 dollars, not 50. Feeding Meta that truer number, even as an estimate, gives its optimization something closer to reality to chase, and it makes the reported ROAS column at least directionally honest.

    It is still a proxy. It still cannot see the actual closed job. But an educated proxy beats a random one, and it is a five-minute fix while you build the real closed loop behind it. Just never confuse that estimated number with money in the bank — that mistake is the whole reason this article exists.

    Want the closed-loop attribution built so you can see true ROAS on real jobs? That's the system we install.

    [Book a free strategy call](/book)

    Free Weekly Briefing

    One AI Marketing Tactic.
    Every Tuesday. Free.

    What's actually working across our client accounts right now — ROAS moves, follow-up sequences, creative angles. The stuff that isn't in any blog post yet.

    No spam. Unsubscribe anytime. 1,200+ business owners already in.

    Ready to Deploy

    SEE THIS IN
    YOUR BUSINESS.

    30 minutes. We scope the exact systems that apply to your situation and give you a plan.

    ★★★★★ Trusted by 47+ local service businesses

    BOOK A STRATEGY CALL →