Skip to main content

Meta Ads

The SocialBuster teamPublished Sep 26, 20267 min read

Why per-headline ROAS in flexible ads is not attribution

What Meta actually reports per asset in a flexible ad, a coverage check that found 2.3 percent, and how a ranking can stay honest about the rest.

Measurewhat your ads already proved
Createthe next ad, from your own facts
Testguardrailed, and you confirm every change on Meta
Table of contents

What a flexible ad's report actually contains

A flexible, Advantage+ style ad can carry several headlines, bodies and images at once and let Meta's delivery system pick a combination for each impression. Meta's reporting has a real answer to "which asset showed up": a family of eight asset breakdowns, one each for headline, body, description, image, video, call to action, link and format. Every row in every one of them carries a stable id, the one join key that holds across the whole family, though the rest of the row's shape differs by type: plain text for a headline, body or description, a hash and a filename for an image, a raw enum name and no text at all for a call to action.

That id is the one thing worth trusting without a second check. What the row's numbers mean is a different question, and it is worth checking before building a ranking on top of it. Meta's own documentation is careful on this point: it calls breakdown values "estimated," not a partition of the ad's totals, and video metrics are absent from the whole family, so a hook rate or hold rate per headline or per image cannot be computed at all. Only impressions, clicks, spend and actions are supported per asset.

A number worth checking before you trust it

The natural next assumption is that an ad's per-headline rows should sum to something close to its total spend across all its headlines. A live check against a real, already-running Meta ad account tested that assumption directly, rather than taking the documentation's word for it either way.

Over one ad's full delivery window, its image breakdown rows summed to only 2.3 percent of that same ad's own recorded spend. Over a narrower 7-day slice inside that same window, the figure was 8.5 percent. The title, body, description and call-to-action breakdowns for that same ad summed to the exact same total, to the dollar, as the image breakdown did, which means all five are reporting on one shared, narrow slice of the ad's delivery, not five independent slices that each happen to land near 2 or 8 percent.

Window checkedThis ad's own recorded spendSummed across the breakdown's rowsCoverage
Full delivery window (27 days)100%Same across image, title, body, description and CTA2.3%
One 7-day slice inside it100%Same five breakdowns again8.5%

Fig. 1 · one real ad's own recorded spend against what its asset breakdowns summed to, live check against a connected Meta ad account, 2026-09-17

Well over 90 percent of that ad's own spend, impressions and clicks never show up under any asset at all. A per-headline number built on these rows is a specific, real number about a small slice of delivery. It is not a stand-in for the ad's whole performance, and no rounding or estimate note changes that by much.

Co-occurrence is not attribution

There is a second, deeper gap underneath the coverage problem. Even for the slice of delivery that is captured, Meta's delivery system chose a combination of assets per impression and does not report which specific combination won a specific sale. If a flexible ad running five headlines together produces one conversion, every one of those five headlines' rows can carry that same conversion's revenue, because all five ran alongside it, not because any one of them is provably the reason it happened.

Creative Leaderboard: "Rows overlap: this is co-occurrence, not attribution."

Meta will tell you which ads used a headline. It will not tell you which sale that headline earned.

Two ways to rank, and what each admits

Given all of that, a leaderboard has two honest ways to handle it, and each admits something different. The default counts only ads that ran exactly one value of the element being ranked, so a row's spend belongs to it alone and the visible rows add up to a real total. The cost is that every ad running more than one headline or image, which on a flexible-creative-heavy account can be most of them, is excluded from that ranking entirely.

The other counts every ad that carried a value at all, letting an ad's full totals count toward every value it carried. Rows then overlap on purpose, the visible spend adds up to more than the whole, and each row states how much of it is shared with other rows rather than hiding the overlap behind a tidy total.

Neither mode invents an attribution Meta does not report. The choice is which honest question gets answered: a smaller, cleanly partitioned ranking, or a wider one that openly counts some delivery more than once. Either way, the numbers next to the row are the real ones, and the coverage note next to them says which question they answer.

Where the numbers come from

The eight asset breakdowns, their documented shapes, and the coverage figures (2.3 percent over a full delivery window, 8.5 percent over a 7-day slice inside it) come from a live, read-only check against a real, already-running Meta ad account, run to verify how these reports behave before anything gets built on top of them. It is a fact about how Meta's API reports flexible-ad delivery, not a claim about any advertiser's results.

The single-headline figures ($7,826.71 spend across 5 ads, an 8.72x adjusted return, 9 ads totaling $7.79 hidden below the display thresholds, 1 ad with $794.03 spend carrying no headline) are from the Northwind Sleep demo workspace, a fictional sleep brand SocialBuster's own screens run on for this site. They show how the Creative Leaderboard states its coverage, not a result from any real account.

More from Proof