Take an ad apart

Break a performing ad into its beats and claims so the reusable part can be named. This playbook applies when an ad or piece of marketing is to be taken apart, or called a winner and copied from.

Last updated

Ask an agent for this methodtext
get_playbook(task: "ad-teardown")

Someone hands you an ad and says it works. The job is not to admire it — it is to find the part that is reusable, separate it from the part that is specific to this product, and write both down in a form that survives being handed to whoever makes the next one.

Start by being clear about one thing, because everything downstream depends on it: the file does not know whether this ad won. There is no spend, no ROAS, no hook rate, no thumb-stop in a video. "Winning ad" is a claim from a dashboard somewhere. Take it as given if the user says so — they have the data — but never generate it, and never let the analysis quietly become an explanation of why it won when it is really a description of what it does.

The useful reframe: given that this performed, what in it is reproducible?

Explain it. Do not grade it.

This is the instruction that matters most, because getting it wrong is the default failure of the whole exercise. A teardown says what the ad does and how that works. It does not say whether it is good.

The difference lives in single sentences:

Grading: "The hook is an interchangeable superlative with no substance."

Explaining: "The hook is a first-person evaluation with no conflict named, so the work of holding the viewer sits with the picture and the person rather than the words. That carries when the creator is already known to the audience and does not when they are not."

The second is longer, checkable, and actually transfers to the next ad. The first is an opinion wearing the clothes of an analysis.

Watch for the vocabulary that signals the slide: fails, wastes, weakest, the most expensive mistake, total failure, squanders, completely missing. Every one of those is a verdict, and none of them survives the question "measured against what?"

An omission is a decision

No price, no discount code, no sizing note, no reviews, no material spec. These are not holes in the ad. They are choices, and most of them have ordinary reasons: prices move and are tested, they differ by region, the bundle is one of forty SKUs, attribution runs through the landing page rather than a code, legal will not clear a claim.

So record the omission, name the most plausible reason for it, and say what it costs only where no reason fits. "There is no price in the video, which is normal where pricing is tested" is an observation. "What is completely missing: price" is an accusation dressed as a finding.

The same goes for a long stretch with no new information. Repetition in an ad is sometimes weak writing and sometimes exactly the point — a garment being seen from every angle is the demonstration for a garment. Say which the frames support, and say when they support both.

When the ad is running, it already passed a test you did not see

This follows directly from not knowing whether it won. If the user says the ad performs — or it is in a public ad library, which means somebody is paying for it right now — then every "mistake" you name is a claim against data you cannot read.

That does not make criticism off limits. It makes unmarked criticism wrong. The honest form attaches the mechanism to the uncertainty: "the brand is not named until 5.2s, which is after the largest drop-off point on most feed platforms — worth checking against the retention curve, which the file does not contain."

If the user asks what to change, that is a different job with its own method: ask for the improvements section.

The pass

1. get_transcript(url). No image tokens, and for an ad the script is most of the substance. It also gives you the speaking rate and the claims in text form, which is what the rest of the pass verifies against the picture.

2. watch_video(url). The whole thing. The footer's cut times give you the edit rhythm across the runtime in one call, and the beat boundaries fall out of where the rhythm changes.

3. watch_video(url, start=…, end=…, detail='detail') per beat, only where you need to read what is on screen. Ads are dense with text and most of it is too small at standard.

4. inspect_frame(url, t=…) for every claim, price, and piece of legal text. Not optional. A teardown that misquotes "up to 40%" as "40%" has manufactured a compliance problem, and a claim you half-read is a claim you have invented.

The beat sheet

Ads are built in beats, and the beats are what transfer between products. Mark the boundaries with timestamps and name what each one does:

  • Hook — the reason to still be here at second three.
  • Problem — the state the viewer is in. Sometimes skipped entirely.
  • Turn — where the product enters. Note the exact second; the range across a set of ads is usually the most surprising number in the analysis.
  • Demonstration — the product doing the thing. Whether it is shown working or only described is a structural fact worth recording.
  • Proof — testimonial, before/after, number on screen, logo wall.
  • Offer / CTA — what is asked for, in what words, how long it is on screen.

Not every ad has all six and the order varies. Record what is actually there, including the omissions — an ad with no problem beat is a decision, not an oversight.

Measure these

  • Total duration, and each beat's duration and share of it.
  • Time to product on screen, and time to product named.
  • Cuts per beat. The rhythm change between hook and demonstration is usually visible as a number.
  • Speaking rate — words per second, from the transcript, per beat. Ads routinely slow down at the offer, and the size of that drop is a craft decision you can quantify.
  • On-screen text load — how many distinct text elements, how long each holds.
  • Time the CTA is legible.
  • Whether audio is essential. Would this work muted? Read the transcript against the on-screen text: if nothing the voice says appears on screen, the ad fails silent, which is a real placement constraint.

Separate the two layers

The point of the whole exercise:

Reusable — structure, pacing, the shape of the promise, where proof lands, how the CTA is phrased, whether the product enters early or late. These transfer to a different product tomorrow.

Specific — this product's demonstration, this founder's face, this price, this seasonal angle. These do not transfer, and a teardown that recommends them as a template produces a copy of an ad rather than a next ad.

Write both lists. The second one protects the first from being applied stupidly.

Do not

  • Explain the performance. "The bold colours grab attention, driving high CTR" is a story about a number you have not seen. Describe the choice; attribute nothing.
  • Deliver vibes. "Energetic", "premium", "authentic" — attached to a timestamp and a visible cause, these are observations; on their own they are filler.
  • Quote a claim you have not inspected. Prices, percentages, guarantees, disclaimers.
  • Assume the platform. Aspect ratio and safe-area behaviour suggest one but do not prove it, and the placement changes what the analysis means. Ask.
  • Name the actor, brand or soundtrack from impression. If it matters, say what is visible and let the user confirm.

For the table format and how to run a set of ads together, ask for the beat-sheet section.