Gallery · updated 2 October 2026
Fifteen competitor ad libraries, measured exactly
These fifteen libraries have something most competitor figures do not: an exact size. Each was small enough that our pull was never the limiting factor, so the live count is the advertiser's real number rather than a ceiling we hit. Together they hold 3,386 live ads, of which we read 3,097, yielding 2,773 distinct creatives. The gap to each brand's largest rival runs from 0.46× to 313×.
Nine rows link to a full read. Brands are described by category rather than named, rivals included, and no page carries a spend, conversion or cost figure because none of that is observable from outside an ad account.
Why “measured exactly” and not “read whole”
These are not the same claim and we had the wrong one on this page until it was checked. An exact size means the library did not exceed our pull limit — nothing was truncated, so the live count is real. It does not mean every one of those ads was downloaded.
In ten of these fifteen, some ads did not come down at scrape time: expired between the count and the pull, withdrawn by the advertiser, or simply would not serve. The Ads read column below is therefore the honest denominator for anything computed from creative content, and Live ads is the honest figure for library size. Coverage runs from 74% to 100% and is 91% overall, with five libraries read at exactly 100%.
The fifteen libraries
| Category | Live ads | Ads read | Distinct creatives | Largest rival | Gap |
|---|---|---|---|---|---|
| Lending, India | 3 | 3 | 3 | 940 | 313× |
| Wellness resort, India | 12 | 12 | 19 | 145 | 12× |
| Baby care, India | 18 | 18 | 12 | 314 | 17× |
| Feminine care, India | 24 | 20 | 31 | 471 | 20× |
| Premium apparel, India | 43 | 40 | 51 | 413 | 9.6× |
| Intimates, US | 104 | 91 | 156 | 288 | 2.8× |
| Baby care, UK | 140 | 137 | 211 | 97 | 0.7× |
| Colour cosmetics, India | 224 | 214 | 185 | 309 | 1.4× |
| Vitamins, UK | 255 | 226 | 390 | 1,034 | 4.1× |
| Luxury apparel, UK | 269 | 269 | 109 | 243 | 0.9× |
| Nutraceuticals, India | 279 | 265 | 133 | 972 | 3.5× |
| QSR, US | 300 | 288 | 37 | 410 | 1.4× |
| Women's nutrition, UK | 536 | 478 | 428 | 338 | 0.6× |
| Beauty, India | 553 | 410 | 298 | 252 | 0.5× |
| Savings, India | 626 | 626 | 710 | 367 | 0.6× |
Source: public Meta Ad Library, read between 16 September and 2 October 2026. Live ads is the Ad Library's active-ad count, unlimited by our pull. Rival totals are the same count; rival libraries were sampled or counted, not measured against their own pull. Gap is the largest rival's live ads divided by the brand's.
Four things the table shows
Being outnumbered is the normal case. Ten of the fifteen brands were running fewer live ads than their largest rival, and four were behind by more than 10×. A brand discovering it is outnumbered on volume has discovered the category average, not a crisis.
But a third of them were ahead. Five of the fifteen out-advertised every rival we read in their category — the savings brand at 626 live ads against 367, the beauty brand at 553 against 252. Volume leadership is not rare, and in both cases the brand we were asked to look at was setting the pace.
Library size and creative variety come apart. Measured against the ads we actually read, distinct creatives per ad runs from 0.41 to 1.73 across fourteen of these libraries — and then there is the QSR library at 0.13, which is 3.2× below the next-lowest. 37 creatives from 288 ads read, with 315 of its 352 media files byte-identical repeats. Counting ads makes it the fourth-largest advertiser here; counting creatives drops it below brands running a tenth of its volume.
A third of these libraries are too small to compute from. Five hold under 40 distinct creatives, where an attribute share moves double digits the moment two ads go live. Five hold 200 or more, which is where a competitor read turns from a description into a measurement. More on that line in when a library is too big to read whole.
Why only fifteen, out of forty-one
We have read 41 brand libraries and decoded 13,842 distinct creatives across them. Only fifteen appear here, because this table makes two promises — that the live figure is exact rather than a ceiling, and that the row is a brand we were asked to look at rather than one of its rivals — and only fifteen keep both.
The rest were capped by our own pull limit or returned no live total at all. Those reads are still useful and they are not rows in this table, because a capped count cannot anchor a percentage: eight of our pulls stopped at a ceiling, and seven of those stopped at exactly 150, which is a configuration value rather than a fact about any advertiser.
Six further brands produced no readable data and are excluded entirely rather than recorded as running no ads. A failed read is not a finding.
How to read a row
- Live ads is the Ad Library's count of currently active ads on the day of the read, not limited by our pull. It changes daily.
- Ads read is how many of those we actually fetched. Where it is lower, the missing ads expired or would not serve between the count and the pull.
- Distinct creatives is after deduplication by content hash of the ads read, so two ads sharing one file count once. It can exceed the ad count, because one ad may carry several assets.
- Gap compares live ad counts only. It is not a spend comparison and should not be read as one. Below 1× means the brand ran more live ads than any rival we read.
A row can be arithmetically perfect and still wrong
A sixteenth row sat here until it was checked at source. Its figures were flawless — 64 live ads, 64 read, 137 distinct creatives, entirely self-consistent — and it carried the highest creatives-per-ad value on the page, so the upper bound of our range came from it.
It was a rival's library rather than a brand we were asked to look at, and this table is subjects only. Removing it moved the range from 0.41–2.14 to 0.41–1.73. No arithmetic check could have found that, because nothing about the numbers was wrong. What was wrong was what the row was, and that is a question only the source answers.
The remaining fifteen rows were then checked the only way that works: each subject read from its own deck's title and rivals list rather than inferred, confirming that no brand in this table appears in its own competitor set. All fifteen held. That outcome does not retrospectively validate the shortcut — the one row it got wrong was the single deck where the subject had no live total of its own, so there was nothing but position to go on.
We say so here rather than quietly restating the range, because it is the same failure as every other correction on this site: the measurement was right and the description of it was not.