River
Y CombinatorBacked by Y Combinator

Marketing & GrowthFree

Ad Creative Performance Review by Attribute

Every creative tagged by format, hook, offer and proof, then scored by attribute, with the pairs that co-occur too often flagged as inseparable.

Start here

River's creative analysis tags every asset in the export by format, hook, offer, proof, who appears and where it was shot, then scores each attribute across all the assets carrying it. An attribute pooling seventy creatives is readable where seventy individual rows are not. It also reports which attribute pairs co-occur too often to be told apart, which is the column every creative report leaves blank. You get the tagged sheet, a chart by attribute, and a brief naming the next three tests.

The templates that rank for this search sort the export by cost per purchase and call the top rows winners. On Brackenridge Outdoor's ninety days, 26 of 214 creatives clear fifty purchases, so 188 rows are being ranked on single-digit conversion counts. The best asset by cost per purchase took 0.89 percent of the spend, and it carries the hook that costs 27.5 percent more everywhere else it appears, which is the opposite of the brief the ranking implies.

Built for performance marketers writing next quarter's creative brief, growth leads deciding whether video earns its production cost, and agency teams reporting on a test nobody designed. Pair it with the Google Ads account audit where the waste is structural rather than creative, the search term review when the targeting is the problem, and the cross-platform paid report when the numbers have to reconcile. It runs in the marketing workspace beside all three.

Why a creative's own numbers are the wrong grain

Both platforms say this about their own reports. Google's asset reporting documentation states that ratio metrics at the asset level, including cost per acquisition and return on spend, should be used as directional indicators only. Its reason is that those ratios are influenced by the combination of assets served together, and its recommendation is to evaluate at the asset group or campaign level. Meta makes the same point differently: when you run many ads, the delivery system learns less about each one.

Brackenridge Outdoor spent $486,000 across 214 creatives in ninety days and got 4,120 purchases. Twenty-six of those creatives reach fifty purchases. The median of the other 188 is six purchases, and between them they hold 38 percent of the spend. Regrouped by attribute, 21 of 23 levels clear the same floor. The problem-first hook returns $96.36 per purchase across 71 creatives against $122.86 for product-first across 88, a gap worth $44,624 over the quarter.

The tagging only pays off if you also count how often two attributes travel together. All 34 of Brackenridge's creatives carrying a review count on the pack shot were also shot in the field, and all 18 carousels carry a bundle discount. Those attributes cannot be told apart in this data, whatever their pooled figures say, so the honest output names the pair rather than crediting either one. The tests worth running next are the ones that break a pair: a review count shot in studio, a carousel with no discount on it.

How it works

  1. Send the export

    The creative-level rows, plus a line on what is actually in each ad.

  2. River tags everything

    Format, hook, offer, proof, talent and setting on every row, with the inferences flagged.

  3. Read by attribute

    A sheet, a chart, and a brief that names what cannot yet be separated.

  4. Retag and rerun

    Add an attribute you care about, or move the floor, and the pooling recomputes.

What you get

  • Every creative tagged by format, hook, offer, proof, who appears and where it was shot
  • Cost per result by attribute level, with the creative count and spend pooled behind each
  • The rows too thin to read individually, counted, with the spend they still hold
  • Attribute pairs that co-occur too often to separate, named instead of silently credited
  • A chart of cost per result by attribute, which is the slide that gets read
  • Three next tests, each designed to break one entangled attribute pair apart

Common questions

Can't I just sort the export by cost per purchase?

You can, and on this account it points the wrong way. The best single creative took 0.89 percent of the spend and carries the product-first hook, which costs 27.5 percent more per purchase across the 88 creatives using it. A ranking decided by that little budget is not a brief.

Where does the fifty-purchase floor come from?

Meta's own stability threshold. Its documentation says an ad set usually exits the learning phase after about fifty results in the week after its last significant edit. Borrowing that number as a readability floor is a judgement, it is stated as one, and you can move it.

How do you tag attributes without seeing the creative?

From what you tell it and what the export already carries. Ad names, primary text and headlines usually give away format, offer and proof. Anything inferred rather than stated is marked as inferred in the sheet, so a wrong tag can be corrected in one cell rather than argued about.

Isn't pooling across campaigns unfair, since budgets differed?

It is imperfect and it is better than the alternative. Pooling averages some of the platform's own allocation out, which a single asset's figure cannot. Every attribute level therefore reports the distinct creatives and campaigns behind it, so a level resting on one campaign is visible as one campaign rather than as a finding.

What if two attributes always appear together?

Then neither gets the credit and the pair is named. All 34 review-count creatives here were shot in the field and all 18 carousels carry a bundle discount, so four pairs are reported as inseparable. Each one becomes a test: the same proof element in studio, the same format without the discount.

Does this work for Google as well as Meta?

Yes, and Google's documentation is blunter about needing it. It notes that asset-level metrics are non-summable, since one impression containing three assets registers an impression against each, so the parts will not add up to the whole. Attribute pooling does not depend on them adding up.

What do I do with the result?

Write the next brief from the attribute table rather than the asset ranking. On this account that means problem-first hooks, a review count on the pack shot, and a person in the frame. Where the waste turns out to be structural instead, the Google Ads account audit is the better read. Where it sits after the click, read the funnel and landing-page review.

Ad Creative Performance Review by Attribute

Fill in the form and your workspace opens with the work already underway.