AdBlueprint
Analytics
meta ads
roas
cost per result

Cost per Result vs ROAS: which metric should you actually use?

ROAS isn't a universal scorecard. It only works for value-tracked sales campaigns — see the right success metric for sales, lead gen, traffic and awareness.

AdBlueprint Team 5 min read

ROAS gets treated like the one number that matters. It isn't. ROAS is a great scorecard for exactly one kind of campaign, and a misleading one for every other kind. Judge a lead-gen campaign by its ROAS and you'll kill campaigns that quietly print money. The ones you scale instead look great in Ads Manager but lose cash in the bank. The metric you trust has to match the job the campaign was hired to do.

The actual difference

Cost per Result is what you pay for one unit of whatever you told Meta to optimize for: one purchase, one lead, one landing page view. It always exists. Every campaign has a result and a cost.

ROAS (Return on Ad Spend) is revenue divided by ad spend. A ROAS of 3.0 means every ฿1 spent brought back ฿3 in tracked sales. It only exists when Meta knows the baht value of each conversion. That means a Pixel or CAPI purchase event firing with a real value parameter.

That last part is where the confusion starts. If your campaign optimizes for Leads, Meta has no idea whether a lead is worth ฿800 or ฿80,000. So it can't report ROAS. It reports Cost per Lead instead. That's not a bug. There's just no revenue number to divide.

Sales campaigns: ROAS, but never alone

For e-commerce campaigns optimizing for Purchase with a value, ROAS is the right primary metric. But know your breakeven first. Breakeven ROAS = 1 ÷ gross margin. If you keep ฿40 of gross profit on every ฿100 sale, your breakeven is 2.5. Anything under 2.5 loses money, even though the number is "above 1" and feels positive.

Watch Cost per Purchase alongside it. ROAS can hold steady while CPA quietly climbs, because average order value went up, not because your ads got more efficient. Two numbers catch what one number hides.

Lead generation: Cost per Lead, then close the loop

Meta can't see lead value, so it hands you Cost per Lead. On its own, ฿300 per lead means nothing. You have to finish the math.

Say you get 100 leads and close 20% of them. That's 20 customers. At a ฿5,000 average deal, that's ฿100,000 in revenue. You spent ฿30,000. Your real ROAS is 3.3. The campaign that looked like "pure cost" was your best performer all along.

Track close rate and deal size in a simple sheet. That's the only way to turn Cost per Lead into the truth. Founders who skip this step trust Cost per Lead alone. A cheap lead from a bad audience that never closes is the most expensive lead you can buy.

Traffic, engagement, awareness: Cost per Result only

ROAS here is either zero or fiction. A Traffic campaign's job is link clicks — judge it on Cost per Link Click and landing page view rate. An engagement campaign's job is interactions. An awareness campaign's job is reach, so judge it on CPM and frequency. Asking these campaigns for a ROAS number is asking the wrong question entirely.

The trap nobody talks about

In Thailand, a big share of orders are cash on delivery. The Pixel fires a Purchase event the moment a customer confirms the order. But COD orders get cancelled or rejected at the door, often 20–40% of them. So in-platform ROAS counts revenue that never reaches your bank.

A reported 3.0 ROAS with a 30% COD rejection rate is really 2.1. If your breakeven is 2.5, that "winning" campaign is underwater and you'd never know from Ads Manager. Reconcile reported revenue against actually-collected revenue at least once a month.

In-platform vs blended ROAS

Ads Manager shows in-platform ROAS, the revenue Meta credits to itself. Blended ROAS is total revenue from every channel divided by total ad spend. They tell different stories. In-platform ROAS over-credits Meta when it and Google both claim the same buyer, and under-counts when iOS blocks tracking. For a founder running one main channel, blended ROAS is the honest number: take your monthly sales total, divide by ad spend, done. Use in-platform ROAS to compare campaigns against each other; use blended ROAS to answer "is the whole budget working?"

Quick reference

Campaign typePrimary metric
Sales / catalog (Purchase + value)ROAS + Cost per Purchase
Lead generationCost per Lead → offline ROAS
TrafficCost per Link Click
Engagement / awarenessCPM / Cost per Result
App installsCost per Install → in-app ROAS

What to do next

Before you read another ROAS number, check what the campaign was optimized for. It's right there in the objective column in Ads Manager. Then decide whether ROAS even applies. When you generate a blueprint in AdBlueprint, the success metric is set per objective. You compare the right number from day one, instead of forcing every campaign onto the same scorecard.

Frequently asked questions

What counts as a good ROAS for Meta ads in Thailand?
There's no universal number — it depends on your margin. Breakeven ROAS = 1 ÷ gross margin, so a 40% margin means you break even at 2.5. Aim for 1.5–2x above breakeven, and if you sell COD, subtract your rejection rate before you celebrate.
Why doesn't Meta show ROAS for my lead campaign?
Because a lead has no baht value attached, Meta can't divide revenue it doesn't know. It reports Cost per Lead instead. To get a real ROAS, compute it offline: leads × close rate × average deal size, divided by spend.
Can I compare ROAS across campaigns with different objectives?
No. ROAS is only comparable between campaigns that share the same value-tracked objective, like two sales campaigns. Comparing a sales campaign's ROAS to a traffic campaign's is meaningless — one has revenue data, the other doesn't.