Skip to content

Thinking · Newsletter

How do I know which part of my ad is driving installs or purchases?

Change one part per variant, read each part with the metric that sees it, decide on installs or purchases, and tag every ad by element.

TL;DR. Change one part of the ad per variant (hook, body, end card, length or performer), keep everything else identical, and judge the variants on installs or purchases, not clicks. Then read each part with the metric that sees it (thumb-stop for the hook, hold rate and the play curve for the body, CTA clicks for a playable's end card) and tag every creative by element so patterns show across dozens of ads, not one test. Part metrics show where an ad wins or leaks; only the outcome says which part is worth more of.

Why one ad cannot tell you

A winning ad is a bundle. Its hook, body, performer, length and end card all differ from the ad it beat, so the result credits the bundle. You know it worked, not why, and you cannot make the next one on purpose.

The networks will not untangle it for you. Meta's documentation for dynamic creative says "we currently show only creative-asset level breakdowns such as metrics by image, title, body, video." That tells you which video won, not whether its opening or its ending did the work.

How to find which part of your ad drives installs or purchases

  1. Name the parts before you make anything. Write every concept as hook, body, end card, length and performer, plus the offer if there is one. If the brief cannot say which part a variant changes, the test cannot either.
  2. Change one part per variant. Same body, end card, length and performer; three different hooks. TikTok describes its split tests the same way: "keep the other variables the same." Three variants per part is our rule of thumb, not an industry figure.
  3. Make the parts swappable. Shoot and edit modularly: hooks as separate openings, bodies as separate middles, end cards as separate closing screens. A new test should be an edit, not a reshoot, or you will run too few tests to learn anything.
  4. Read each part with the metric that sees it. The hook in the first seconds, the body in how many people are still watching later, the end card in what happens on the last screen. The table below maps each part to what the networks report.
  5. Decide on the outcome. Compare installs or purchases per thousand impressions across variants. A hook with a higher thumb-stop and fewer purchases lost. RocketShip HQ's AppLovin testing guide says the same: "judge it on the campaign’s goal rather than click-through rate."
  6. Reverse the test. Once a hook wins, hold it and vary the end card; then hold the winning end card and vary the body. Tests in opposite directions show which half of the ad carries the result.
  7. Tag every creative by element and read across the library. One test is noise. Forty ads tagged the same way show which elements keep turning up in the winners.

The metrics that read each part

Part of the ad Metric that reads it What the network reports
Hook Thumb-stop rate (3-second views ÷ impressions) TikTok: "2-second video views". Meta: play curve, second by second
Body Hold rate (ThruPlays ÷ 3-second plays) Meta: plays at 25, 50, 75 and 100 percent of length. TikTok: "Video views at 25%" through 100%
Length Average play time against video length TikTok: "Average play time per video view". Meta: average time a video was played
End card (AppLovin playables) CTA clicks against end card views AppLovin HTML analytics: ENDCARD_SHOWN and CTA_CLICKED
Performer, offer No part metric of their own Read on installs or purchases per thousand impressions

A warning on names. "Hook rate", "thumb-stop" and "hold rate" are practitioner terms, not network metrics, and formulas differ by source. Segwise defines thumb stop rate as "(3-Second Video Views ÷ Impressions) × 100" but hook rate as "(3-Second Video Views ÷ Total Video Plays) × 100", a different denominator. Runneth (Motion) defines hold rate as "(Through plays ÷ 3-Second Video Plays) × 100". Pick one formula per metric, write it down, and never compare your number with a benchmark built on another.

What each network gives you

Meta. The insights API includes a play curve that "illustrates the percentage of video plays that reached a given second", with one entry per second for the first 15 seconds. It is the most useful single view of the body: where the curve drops is where the ad stopped earning attention.

TikTok. "2-second video views" counts plays of at least 2 seconds "in an impression session", and "Replays are excluded". "6-second video views" also counts a view that "received at least 1 engagement within the first 6 seconds", so it is not a pure watch measure.

AppLovin. For playables, ENDCARD_SHOWN fires when "The end card or summary screen inside the HTML experience is shown" and CTA_CLICKED when "The user clicks the call-to-action button inside the creative". AppLovin notes the end card event is "not the post-playable endcard template outside the playable". For other end cards, run the end card as its own test and read the outcome; our end card guide covers how.

Part metrics are diagnostics, not verdicts

Every number in the table can rise while installs and purchases stay flat. A hook can stop thumbs that were never going to buy. That is why step 5 decides and step 4 explains, the argument we made in measure creative on purchases, not on the ad.

And do not stop at the video. Most frameworks do, as we argued in hook, gameplay, CTA is right, here is what it leaves out, yet the end card is the last screen before the install or purchase. If you only vary hooks, you learn a lot about the first seconds and nothing about the screen that asks for the action.

Tagging: how a pattern beats a single test

Tags answer the single-variable question across the whole library. Our working set, which is our convention rather than a standard:

  • Hook type, from a fixed list such as our taxonomy of hooks: visual, verbal, situational, demonstrative, contrarian.
  • Body type: demo, story, testimonial, gameplay, comparison.
  • End card type: repeats the hook, leads with the offer, shows the product or board, logo only.
  • Length band: under 15 seconds, 15 to 30, over 30.
  • Performer: creator, actor, voiceover only, none.

Then group outcomes by tag. If demonstrative hooks beat the rest on purchases per thousand impressions across many concepts, you can brief from it. If they win on thumb-stop and lose on purchases, that is a finding too.

Flixr runs this as a weekly loop (brief, make, launch, read, log) on AppLovin, Meta and TikTok, with the tags kept in the logbook.

Questions people ask

What is a good hook rate? One you measured with a formula you wrote down. Sources define it against impressions or against video plays, so published benchmarks rarely compare; compare variants inside your own account instead.

Should I test the hook or the end card first? Test the part you have varied least. Many accounts have many hooks and one end card, which makes the end card the cheaper lesson; then reverse the test.

Can Meta's dynamic creative find the winning part for me? Partly. Meta breaks results down by asset (image, title, body, video), which tells you which whole video won, not which section of it. Isolating a hook still needs variants that differ only in the hook.

How many ads before tags show a pattern? There is no published threshold we could find. Our view: a tag should appear across several concepts, not several cuts of one concept, before you brief from it, because cuts of one concept share every other element.

Sources: Meta for Developers, Ad Account Insights; Meta for Developers, Marketing API insights (asset feed); TikTok, Video play metrics; TikTok, About Split Testing; AppLovin, HTML analytics integration; Segwise, Thumb stop rate; Segwise, Hook rate; Runneth (Motion), Hold rate; RocketShip HQ, How to test ad creatives on AppLovin.

Keep reading

All thinking

Let's open the logbook.

Name three rivals. We'll send back a read of your live ads against theirs: what you all say, who's on screen, and what's lasting.

Or email admin@flixrstudios.co.