Meta ads metrics that matter
ROAS alone misleads: the Meta ads metrics that matter are six read together, weighted into one score per ad so a lucky day never wins the budget.
ROAS alone misleads: the Meta ads metrics that matter are six read together, weighted into one score per ad so a lucky day never wins the budget.
Two ads, same campaign, same week. Ad A sits at a 3.4 ROAS. Ad B sits at 1.9. You sort the column, scale A, cut B, and close the laptop feeling like a professional.
Here is what the ROAS column kept to itself. A's revenue leaned on a single €380 order from someone who would have bought off a flyer. B had the best hook rate in the account, the cheapest cost per purchase, and steady €40 baskets from first-time customers. Three weeks later A has drifted down to 1.6, and B is gone because you killed it.
I have made that exact call with real budget behind it. It is why I no longer believe any single Meta ads metric. The metrics that matter only matter together, as a blend, and the blend is the read.
The takeaways
Because ROAS is a ratio of two noisy numbers, and the revenue side is dominated by order-size luck. One large basket props up a mediocre ad for days. A handful of small ones drags a good ad below your threshold. The metric reports the ratio and hides the composition.
ROAS is also the slowest signal you have. Hook rate stabilizes within hours because every impression feeds it. Clicks settle within a day. Purchases trickle in, and Meta's own documentation puts the learning phase at roughly 50 conversion events per ad set per week. Most creative tests get judged long before that, which means a ROAS-only read judges every ad on its thinnest sample.
And when ROAS is bad, it cannot tell you why. Weak hook? Strong hook, weak click? Good click, leaky landing page? ROAS is a verdict, not a diagnosis. To find the part worth fixing, you need the numbers upstream of it.
Six, read together: hook rate, CTR, cost per acquisition, ROAS, share rate, and revenue per customer. Each one exists to catch what another one misses, which is the whole point of reading them as a set.
I watch frequency too, but as a fatigue input: a CTR slope sliding over several days while frequency climbs means the creative is wearing out. I check that slide against the rest of the account first, so a bad market day does not get blamed on one ad.
Normalize each metric, weight it by funnel stage, and sum the result into one score per ad. Prospecting campaigns weight hook rate and CTR heavier, because attention is the scarce thing up there. Bottom-funnel weights shift toward cost and revenue per customer. Set the weights once, in writing, before the test starts, so nobody (including you) can re-argue the ranking after the numbers land.
One warning from building this: any formula can be gamed by a new ad's freak day. The fix that took me longest to respect is shrinkage. A brand-new 9:16 video posting a wild score on 900 impressions gets pulled toward what 9:16 videos in that account normally do, and it earns its full number back as data arrives. Statisticians call this Bayesian shrinkage with format priors. Buyers can just call it "lucky days don't get the budget."
Whether your current leader won at all, or just landed heads five times in a row, is its own problem. I wrote about how to read an ad test without kidding yourself separately.
Ten minutes, five numbers, and you will disagree with the ROAS column about once a week. Those disagreements are where the money is.
This blend is the scoring engine inside Adscalr. Every creative gets a composite score from six metrics, with weights you can set per project and funnel stage. Fresh results get pulled toward the format's normal so a lucky day never tops the ranking, and the system recommends the next test worth running. None of it is magic. It is the read above, done consistently, for every ad, every day.
If you would rather have the blend computed than maintain the spreadsheet, that is what the ad-intelligence side of the product does.
This is the thinking behind Adscalr.
See the product →