What Is ROAS, and Why Service Businesses Should Track Cost per Booked Job
ROAS is revenue divided by ad spend. When your sale happens on the phone or in the driveway, cost per booked job shows whether Facebook ads pay.

ROAS (return on ad spend) is the revenue your ads brought in divided by what you spent on them. For example, $4,000 in sales from $1,000 in ads is a ROAS of 4, often written as 4x or 400%. For an online store, that number is close to the truth because the sale happens on the website, where Meta can see it. For a roofer, a detailer or an HVAC company, the sale happens on the phone, in the driveway, or after a quote weeks later. In those businesses, ROAS in Ads Manager is either blank or a guess. That is why we tell service businesses to judge their ads on a different number: cost per booked job.
Why does ROAS break when the sale happens offline?
ROAS needs a revenue figure tied to the ad, and a lead form or a phone call doesn't carry one. Ads Manager shows ROAS only when a purchase value is sent back through the Meta Pixel or the Conversions API. A form submission has no dollar amount attached, so on most local service accounts the ROAS column stays empty.
You can fill it in by hand. Even then, three things distort it:
- Lag. Say a roof replacement signs six weeks after the lead came in. If you measure a 30-day window, that month's ROAS looks terrible. If you measure the next month, it jumps, even though the ads didn't change.
- One job swings everything. With four jobs a month, one large job can triple the month's ROAS without the ads getting any better.
- Revenue isn't profit. A ROAS of 3 is a profit at a 60% gross margin and a loss at 25%. The ratio alone doesn't tell you which one you have.
We make money from ads on Meta, so we have an interest in the numbers looking good. That is exactly why we'd rather you judge ads on jobs on your calendar than on a ratio Meta can't fill in. The team behind Lemon Agency has run campaigns for more than 300 clients, and an ROAS figure with no list of booked jobs behind it doesn't tell a business owner much.
How do you calculate cost per booked job?
Cost per booked job is your ad spend for a period divided by the number of jobs from those ads that got on your calendar with a date and an agreed price. It doesn't count leads or estimates. It counts booked jobs. If you need the step before this one, we explain what cost per lead on Facebook is and what counts as good in a separate post.
We'd set up the tracking like this. First, give every lead a source in your sheet or CRM: Facebook, Google, referral, repeat customer. Instant form leads arrive with the form name. For phone calls, ask how the caller found you and write down the answer. Second, mark the outcome within 7 days: no answer, not a fit, estimate given, booked, or lost. Third, once a month, divide spend by booked jobs and record the revenue from those jobs. A lead that comes in during one month and books the next still belongs to the month it came in. Go back and update the earlier month.

For example, this is how one month could look for a home service business. These figures are an illustration, not results from our accounts:
| Step | For example | How it's calculated |
|---|---|---|
| Daily budget | $30 | set in the campaign |
| Ad spend | $900 | $30 x 30 days |
| Cost per lead (Meta) | $30 | from Ads Manager |
| Leads | 30 | $900 / $30 |
| Reached by phone | 21 | 70% of leads |
| Estimates given | 10 | from your sheet |
| Booked jobs | 4 | from your sheet |
| Average job | $1,800 | from your invoices |
| Revenue | $7,200 | 4 x $1,800 |
| ROAS | 8.0 | $7,200 / $900 |
| Cost per booked job | $225 | $900 / 4 |

Now change one thing. Say you reach only 10 of the 30 leads instead of 21, and you book 2 jobs. Meta still reports $30 per lead, because the ads didn't change. Your cost per booked job doubles to $450. Only the second number shows the problem, and it isn't in the ads. It's in how fast you follow up on Facebook leads.
What should your cost per booked job be?
The ceiling is the gross profit on an average job. Anything above that loses money on the first job. The formula is average job price times gross margin. In the example above, a $1,800 job at a 40% gross margin leaves $720 of gross profit. The ads took $225 of it, so $495 is left per job, or $1,980 for the month after the $900 spend.
The ceiling is very different across industries. For example, a $250 detail at a 60% margin caps cost per booked job at $150. A $12,000 roof at 30% caps it at $3,600. A detailer paying $225 per booked job loses money on the first visit and needs repeat customers to come out ahead. If a client returns three times a year, use first-year revenue instead of one visit. This is the honest version of the question of what a good cost per lead is.
From our accounts: Over the 30 days to Oct 25, 2026, Meta lead form campaigns for foreign-currency mortgage claims in Poland spent about $2,167 and collected 43 leads, an average of about $50.40 per lead. These are lawsuits that Polish borrowers file against banks over loans indexed to a foreign currency. In the same 30 days, campaigns for business loans in Poland spent about $337 and collected 33 leads, an average of about $10.20 per lead. Both figures are what Meta reports: form submissions before anyone called them back. They show a nearly fivefold difference in cost per lead. They can't show which campaign paid off better, and neither can Meta. That only appears once the business counts how many leads became signed clients and what each client is worth. The same applies to your ads. A $50 lead that books a high-value job can be the cheaper lead.
When is ROAS still the right number, and when isn't cost per booked job enough?
ROAS is the right number when the sale happens online and the purchase value goes back to Meta. That covers online stores, bookings with a prepaid deposit, and gift cards sold on your site. In those cases, track ROAS and set your break-even point at 1 divided by your gross margin. At a 40% margin, break-even ROAS is 2.5.
Cost per booked job also has limits. With fewer than about 5 booked jobs a month, one job more or less moves it too much, so use a rolling three-month average. With a long sales cycle, wait until most of a month's leads have an outcome before you judge it. And if most of your value comes from recurring service, divide by first-year revenue, not by the first invoice.
Efekto creates ads from your website, publishes them, and optimizes them every day: it turns off the ones that don't bring results and scales the ones that do. It works with the results the ad account can see, and for a service business those results are leads. The booked-job column stays with you, because the sale happens on your phone and in your calendar. You can see the full cycle on how Efekto works.
Our position is simple. If someone reports your ads to you as ROAS with no list of booked jobs behind it, ask for the list. If you report the ads yourself, start with a source column and an outcome column this week. If you want the ads side handled while you track the jobs, you can start at efekto.ai.
- Jakub Zwoliński
Founder, Lemon Agency · Efekto · October 29, 2026