You can stare at two competitors' Facebook ad libraries in side-by-side browser tabs for an hour and still walk away with a vibe instead of a verdict. The Meta Ad Library shows you what's running — but a real comparison needs what's working, what's new, and where the money's going, and none of that is on the page. This is the tutorial for running a true side-by-side: the exact signals to line up, what each one tells you, and the one prompt that collapses the whole hour into a single answer.
The seven signals that actually compare two strategies
Most "competitor comparisons" stop at ad count. That's a vanity number — a brand running 200 mediocre ads is losing to one running 12 proven winners. Here's the full signal set, and what each side-by-side column tells you.
| Signal | What it tells you when Brand A ≠ Brand B |
|---|---|
| Total ad count | Catalog breadth. High count alone means nothing without longevity. |
| Active set | What's live right now (ad_delivery_stop_time is null). The current battlefield. |
| Longest-runners | The proven winners. An ad live 120 days is one the brand keeps paying for. |
| Hook mix | How each brand opens — fear, status, price, social proof, curiosity. Their angle of attack. |
| Format mix | Video vs. static vs. carousel vs. UGC. Their production model and budget posture. |
| Iteration rate | New creatives per month. Who's testing fast vs. coasting on old winners. |
| Est-spend range | The wide Meta range, narrowed with cited inputs. Relative scale, not a fake exact number. |
Read these as a set. A brand with few ads but long run-times and high spend is a disciplined winner-scaler. A brand with hundreds of fresh ads and short run-times is in spray-and-pray test mode. The combination is the story.
Doing it manually (the hour you'll never get back)
To build that table by hand, here's the actual workflow:
- Open Brand A in the Meta Ad Library, filter to active, and count. Then count all ads. Note the gap.
- Eyeball the active set. Open each ad, guess its hook category, tally formats by hand.
- Find the longest-runners — except the public library shows a start date, not run-time history, so you're estimating from "Started running on…" with no record of whether it ever paused.
- Repeat all of that for Brand B.
- Try to estimate spend. Meta gives you a range like "$0–$10K" per ad for political ads only — for commercial ads you get nothing, so you guess from ad count.
- Build a comparison table from your scattered notes and hope you tallied consistently across both brands.
It works, barely. The fatal flaw is step 3: Meta's API returns no history. There's no record of how long an ad has actually run, whether it restarted, or how the active set changed week over week. You're comparing two snapshots and calling it a strategy analysis.
Why the longevity gap matters
Days-running is the single most important column in the table, and it's the one the manual method can't give you honestly. Brands don't keep paying to serve ads that lose. So an ad that's been continuously live for 90+ days is, by revealed preference, a proven winner — the brand has voted with its budget every single day.
The trick is reading the distribution, not one hero number. Brand A might have three ads past 150 days and nothing else — a brand riding a few evergreen winners. Brand B might have twenty ads clustered at 20–40 days — a brand churning creative hard and killing losers fast. Same "longest-runner" headline, completely opposite strategies. You only see that shape if something has been snapshotting both libraries daily. Meta's API won't hand you the history, which is exactly why the history is the product.
Doing it in one prompt with AdWhispr
AdWhispr ingests each brand's entire Meta ad library, snapshots it every day, and exposes the comparison through an MCP tool called compare_brands. Instead of two browser tabs and a spreadsheet, you ask one question — in chat or directly inside Claude:
Compare Hims and Roman head-to-head. Show me total vs. active ad counts, the longest-running ad for each, their hook mix and format mix, who's iterating creative faster, and the estimated spend range for each with the inputs you used.
What comes back is the full side-by-side, every column populated from daily-snapshot data:
- Ad counts — total catalog and live active set for each brand, with the gap that tells you who's actively scaling vs. sitting on a backlog.
- Longest-runners — the actual continuously-live champions per brand, pulled from snapshot history, with the run-time distribution so you see "three evergreens" vs. "twenty churners" at a glance.
- Hook mix — each brand's opener breakdown from our classification taxonomy (problem/agitation, status, price-anchor, social proof, curiosity), labeled as our analysis, not Meta-verified fact.
- Format mix — video / static / carousel / UGC split per brand, revealing production model and budget posture.
- Iteration rate — new creatives per month, derived from first-seen dates across the snapshots. This is the tempo metric you simply cannot calculate from a single library view.
- Est-spend range — Meta's wide range, narrowed by triangulating engagement-verified reach, days-running, and creative volume, with every input cited so you can sanity-check it.
compare_brands is part of the Agency plan ($149/mo), built for exactly this multi-brand, cross-competitor work — alongside full change alerts and a 10+ brand workspace. Pro ($29/mo) covers single-brand deep dives, briefs, and cloning; Agency is when you're running side-by-sides across a whole category.
Reading the output like an analyst
The point isn't the table — it's the decision. Map each finding to a move:
- Brand B iterates 3× faster than Brand A → they're out-testing you on creative volume; your edge has to be sharper angles, not more ads.
- Brand A has two ads past 180 days you don't run anything like → that's a proven angle sitting unguarded. Worth modeling a fresh, original take on.
- One brand is 80% video, the other 80% static → tells you where each is spending production budget, and which format is currently winning enough to dominate their mix.
- Spend ranges overlap heavily → you're in a fair fight on budget, so the win comes from creative and longevity, not outspending.
And one honesty rule that separates a real comparison from a fabricated one: no competitor CTR, CPC, or ROAS appears anywhere in this output. Those metrics live only inside each advertiser's own account — Meta never exposes them for competitor ads. Any tool that shows you a rival's exact ROAS invented the number. AdWhispr cites the inputs behind every signal instead, because being honest about what's knowable is the whole point of trustworthy competitive intel.
From comparison to action
Once the side-by-side surfaces an unguarded winner, you don't stop at noting it. Ask AdWhispr to clone_ad the proven angle — you get an original creative grounded in that verified winner (a new image in your brand identity, or a scene-by-scene script brief for video), with the source cited. Or run generate_brief to export the whole comparison as a PDF for the team, led by the derived-intelligence panel — longevity curve, engagement-verified reach, iteration rate — before any qualitative take.
That's the loop: compare in one prompt, read the distribution, clone the unguarded winner. The hour-long manual version gave you a vibe. This gives you a verdict you can ship.
Stop tab-hopping between ad libraries — run a real side-by-side. See more tutorials on the blog or start comparing at adwhispr.com.