The hook is the first three seconds of a video or the first line of body copy — the angle that decides whether anyone keeps reading. Your competitor has tested dozens of them in their Meta ads, and Meta's Ad Library has every one sitting in plain sight. The problem isn't access. It's that hooks live scattered across hundreds of ad cards with no way to group them, and no native way to tell which ones a competitor actually kept paying to run. This tutorial fixes both: how to extract every hook from a competitor's Meta library, cluster them into a clean taxonomy, and rank each cluster by how long it survived.
This is about the opening line and angle — not the creative format. A UGC testimonial and a static graphic can both open with the same social-proof hook. We're isolating the angle here, not the wrapper.
A working hook taxonomy
Before you extract anything, you need buckets to sort into. A loose "good/bad" sort is useless. Here's a taxonomy that covers the vast majority of DTC and SaaS hooks:
| Hook type | What the opening line does | Example opener |
|---|---|---|
| Problem-agitation | Names a pain and twists the knife | "Still waking up at 3am with your mind racing?" |
| Social proof | Leads with crowd, numbers, or status | "Over 2 million people switched to this." |
| Curiosity gap | Withholds the payoff to force the click | "The reason your skincare isn't working." |
| Direct offer | Leads with the deal, no warmup | "50% off your first order ends tonight." |
| Before/after | Frames a transformation up front | "I went from bloated every day to never." |
| Founder story | First-person origin / why-we-built-this | "I quit my job because razors were a scam." |
| Authority/expert | Borrows a credential or institution | "Dermatologists won't tell you this." |
| Negativity/callout | Attacks a category or competitor norm | "Big supplement brands are lying to you." |
| Question hook | Opens with a direct question to the viewer | "What if your mattress was the problem?" |
Nine buckets is enough to be rigorous without drowning. Add or merge categories to fit your niche — a B2B SaaS competitor will lean curiosity and authority, a supplement brand will lean problem-agitation and before/after. The taxonomy is the spine of everything below.
The manual approach (and why it stalls)
You can absolutely do this by hand, and it's worth doing once so you understand the texture of the data.
- Go to the Meta Ad Library, set the country, filter to the brand's Page, and set status to Active.
- Open each ad card. For video ads, read or transcribe the first line of voiceover or the on-screen text in the first second. For image/copy ads, grab the first line of primary text.
- Paste each hook into a spreadsheet with columns:
hook text,hook type,ad format,first seen,still active?. - Tag each row with one of your taxonomy buckets.
- Pivot by hook type to see which angles the brand uses most.
This works — until it doesn't. A brand running 80+ active ads will eat an afternoon. Worse, the Meta Ad Library shows you a snapshot of today. It tells you an ad is active, but not whether it launched last week or has been running for four months. That distinction is the entire game, and the manual method can't recover it: Meta's API returns no run-time history. You'd have to screenshot the library every day yourself to build it.
So the manual pass gives you the hooks but not the verdict on which ones endure. That's the gap.
The AdWhispr approach: extract, cluster, rank by longevity
AdWhispr ingests a competitor's entire Meta ad library, snapshots it daily, and lets you interrogate it by chat or directly inside Claude via its MCP server. Because it has been watching since you added the brand, it knows each ad's days-running — and days-running is the closest thing to a performance signal you'll get. Brands don't keep paying to serve ads that lose money. An ad still live after 100 days is a proven winner; the hook inside it is a hook that survived contact with real spend.
So instead of sorting hooks alphabetically or by vibe, you rank each taxonomy cluster by longevity. That reorders your entire read of the competitor.
Step 1 — Add the brand and let it ingest
Paste the competitor's Facebook URL into AdWhispr, or use the add_brand tool inside Claude. It pulls the full library and starts daily snapshots. The longer it's tracked, the richer the run-time distribution.
Step 2 — Ask it to extract and cluster
Once ingested, ask in plain language. Example prompts:
"Extract every hook from [Brand]'s active ads. Group them into hook types — problem-agitation, social proof, curiosity, direct offer, before/after, founder story, authority, callout, question. Give me the count per type."
"For each hook cluster, list the actual opening lines so I can see the variations within each angle."
You now have the same spreadsheet the manual method produces — in seconds, not an afternoon — with every hook already tagged to your taxonomy.
Step 3 — Rank each cluster by days-running
This is the step the Ad Library can't do. Ask:
"Within each hook type, rank the ads by days-running. Which hook angles have the longest-running ads, and which ones churn out fast?"
"Show me the days-running distribution per hook type, not just the top one. I want to see whether a whole angle endures or just one lucky ad."
Read the distribution, not a single hero number. A cluster where five problem-agitation ads have all run 90+ days is a durable angle. A curiosity cluster where one ad ran 200 days but the other eight died in two weeks is one lucky creative, not a winning category. AdWhispr surfaces the spread so you don't mistake an outlier for a pattern.
Step 4 — Pull the receipts
For any cluster, ask for the source ads:
"Show me the three longest-running problem-agitation ads with their exact opening lines and first-seen dates."
Every claim ties back to a real ad card with a verifiable first-seen date. Nothing here is invented. AdWhispr will not tell you a competitor's CTR, CPC, or ROAS, because Meta's Ad Library does not expose those for competitor ads — they live only inside the advertiser's account. Any tool that hands you a competitor's exact ROAS made it up. Days-running and engagement are real signals; fabricated funnel math is not, and AdWhispr cites its inputs instead of guessing.
What the ranked output tells you
When you sort hooks by endurance instead of recency, three things jump out:
- The angle they bet on. The hook type with the most 90+ day ads is the angle the competitor has validated with their own money. That's your highest-confidence intel.
- The graveyard. Hook types that churn out fast are angles they tested and abandoned. Don't copy a competitor's current ads blindly — half of them may be a test that's already failing.
- The white space. A taxonomy bucket they barely touch is either a dead angle in this niche or an opening nobody has claimed. Cross-reference against a second competitor with
compare_brandsto tell which.
From there, generate_brief packages the longevity curve and the hook breakdown into a shareable PDF or Markdown brief, and clone_ad can build original creative grounded in a verified winning hook — your copy, your brand, with the source ad cited so you know the angle is proven.
The one rule
Extract the hooks, yes — but never trust a hook just because it's live today. Rank by days-running, read the distribution, and you'll separate the angles a competitor committed to from the ones they're quietly killing. That's the difference between copying noise and learning from proof. Browse more competitor-research playbooks on the blog.
Stop guessing which hooks work — paste a competitor's URL into AdWhispr and rank their angles by the only metric that doesn't lie: how long they kept running.