Every figure on this site is reproducible from public data and a documented pipeline.
Here's exactly how the 17,999 creatives and their analysis are produced.
122,038
ads collected
17,999
unique creatives
234
candidates
2018-11-06 โ 2026-06-30
coverage window
1
Source โ Meta Ad Library API
Ads are pulled from Meta's public Ad Library API for U.S. Senate 2026 advertisers
(234 candidates across 287 advertiser pages). We store spend and
reach as the Ad-Library reported range midpoints, plus delivery dates, platforms,
demographics, and regions.
2
Deduplication โ classify the creative, not the ad
Campaigns run the same creative as dozens of near-identical ad variants. We reduce each ad to a
creative by hashing its normalized copy, collapsing 122,038
ads into 17,999 unique creatives (a 6.8ร ratio).
Analysis is done once per creative and shared back across its duplicate ads.
3
22-axis multimodal analysis
Each unique creative is classified once by a Claude Sonnet multimodal pass that reads both the
image and the copy, tagging 22 visual and message axes โ issue, message type, framing, emotional
appeal, production tier, format, symbols, and more. Structured JSON output enforces a fixed schema.
4
Performance proxies
We don't have click or conversion data (nobody does, from the public API). Instead we use two
observable proxies: longevity (days an ad stayed live โ campaigns pause what
underperforms) and reach (impression midpoints). The "what works" analysis
correlates creative traits against these.
5
Refresh
The collection is re-captured on a cadence; because analysis is keyed to the creative hash, each
refresh only needs to tag genuinely new creatives. Figures update as new ads are ingested.
Last captured: 2026-07-02.
Caveats worth stating plainly
Observational, not causal. Longevity/reach correlations show what campaigns
keep running โ not proof a trait causes performance. Not adjusted for budget, candidate, or timing.
Ranges are wide. Ad-Library spend and impression figures are broad buckets; read directional, not precise.
Coverage is best-effort. We match advertiser pages by name + branding; a handful of imageless (video-only) ads can't be visually analyzed.