The Wilow Ad Index / How it is built

The Wilow Ad Index

How the Ad Index is built.

Where the numbers come from, how brands are grouped, and the places we already know the method is imperfect.

Last updated 26 August 2026

Kole Ogundipe

By Kole Ogundipe, founder of Wilow. Back to the Ad Index.

What the numbers are read from

Every figure in the Ad Index is read from ads that are live on Meta right now, through the same free Wilow Ad Library anyone can use. We do not buy a panel, survey advertisers, or receive data from ad accounts. If a number is on the Index, it was counted from ads you can go and look at yourself.

That is also the reason there is no cost anywhere on these pages. Meta publishes what an ad looks like, where it points and when it started. It does not publish what anyone paid, who clicked, or what sold. A benchmark built from ad accounts can show you a cost per click; this one cannot, and we would rather say so than estimate one.

How a brand joins the panel

A brand enters the Index when somebody looks it up in the free tool. Nobody at Wilow picks the list. That is deliberate: a hand-picked roster is a roster of companies we happened to think of, and the first edition of this Index failed partly for that reason.

The trade is that the panel reflects who gets searched rather than who is representative. Brands that marketers are curious about are over-represented, and so are the markets those marketers work in. Each industry page names its own markets so you can see the mix before you use the number.

How brands are sorted into industries

Sorting is automatic. A language model, run at temperature zero, reads each advertiser's name, the domains its ads point at and a sample of its ad copy, and files it into one of twelve industries.

It is asked two separate questions, in this order. First, what kind of advertiser is this: a brand, an affiliate, a marketplace, or none of those. Only then, which industry. Keeping those apart matters more than it sounds. When the model was allowed to answer not a brand as an option inside the industry question, it never once chose it, and filed a general marketplace as a supplements brand with high confidence. Asked as its own question first, it got the same case right immediately.

Anything the model will not place cleanly is filed as unsorted and never published. Of roughly 500 advertiser accounts sorted this way, 23 came back as affiliates, 14 as marketplaces, 16 as unclear, and 41 more were genuine brands that fit none of our twelve industries. All of those sit out.

How we collapse one company running many accounts

This is the step that does the most work, and the one most benchmarks skip. A single operation frequently advertises under several names, and counting each as a separate brand would let one company move an industry median on its own.

We treat accounts as the same operation when they send traffic to the same registrable domain, honouring multi-part endings like co.uk, and when their brand names share a stem. One pet supplement operation in this panel runs six advertiser names; one supplement operation in Sweden runs four. Without this step, Pet Care alone would have counted a single Danish company six times.

Two traps are worth naming because we fell into both. Shared platform domains, such as Facebook lead forms, app store links, ad servers and link-in-bio pages, falsely weld unrelated brands together, so they are excluded from the signal. And a retailer that several brands check out through is not those brands: a shared checkout domain once merged two supplement brands into the shop that stocks them.

When an industry publishes

An industry gets a page at 25 brands, and not before. Below that it appears on the hub greyed out with its current count, so you can see it filling up rather than take our word that it will.

A pull only counts if it was complete. Meta returns at most 100 ads per window, so a brand that hit that ceiling has a floor, not a total, and publishing a floor as a total is how the first edition of this Index produced numbers that did not hold. Of the pulls behind this build, 115 were dropped as truncated and 43 as empty, leaving 272 brands measured and 232 inside publishing industries.

What these numbers cannot tell you

We only ever see survivors. Meta shows when an ad started and never when it stopped, and a killed ad disappears from the library completely. So we can say a brand has nothing old still running. We cannot say its ads died, and you should not read it that way.

The launch rate is a floor. For the same reason, counting new ads only counts the ones still alive, so every brand launched at least as many as we show, and probably more.

There is no spend, no clicks and no sales here. Not because we left them out, but because the public data does not contain them.

Nothing here is a cause. Video share, creator use and landing-page count are described next to each other, never as drivers of each other. If an industry runs more video and also has more long-running ads, this page will not tell you which way that runs.

Where we know the method is imperfect

Publishing the weak points is part of the method, not an apology for it.

The classifier is not perfectly stable. Two runs over the same cached data returned 277 and then 272 measured brands. The five headline numbers did not move between those runs; individual industry rows moved by up to three points. Treat any single industry figure as carrying a few points of slack.

Booking platforms still look like shared companies. Where several independent businesses each have their own subdomain on one platform, our domain rule can merge them. We have one known case of this in beauty and skincare, and are fixing it by keeping full hostnames rather than just the registrable domain.

There is a gap in the middle of the data. The tool fetches ads under 30 days old and over 90 days old, and does not fetch the band in between. It is why the ninety-day figure is the one we lean on: an ad past 90 days sits squarely inside a window we do fetch, so the gap cannot manufacture it.

Using these numbers

You are welcome to republish any figure or chart from the Ad Index, including in commercial work. The only thing we ask is that you credit Wilow and link to the page you took it from, so your reader can check the figure and see when it was last updated.

Cite it as: The Wilow Ad Index, Wilow, https://trywilow.com/ad-index (figures as of the date shown on that page)

Questions about the method, or a case where you think we have merged two companies that are not the same: tell us and we will look at it.

How we estimate ad spend

Two kinds of number appear in the Wilow Meta Ads Library and in Competitor Tracking. Reach is a fact: Meta publishes it for any ad delivered in the EU, EEA or UK under the Digital Services Act, per country and per age and gender band, and we display it as reported. Spend is a model: Meta publishes spend and impressions for political and issue ads only, so every spend figure we show is calculated from reach and an assumed cost, and we never claim a spend figure came from Meta.

The formula is estimated spend = reach × CPM ÷ 1,000. Reach is the number of people Meta reports the ad reached in the country you are viewing. CPM is the cost you assume for reaching a thousand of them. In the web tool you set it: the slider runs from £10 to £50, starts at £15, and every figure on screen moves with it, because the assumption belongs to you, not to us. Where a number has to be produced without you present, such as through our API or MCP server, we return a range built on a £10 to £25 assumption rather than a single number, with its confidence and a link back to this page.

We do not publish a CPM benchmark. The bounds above are illustrative inputs to a calculation, not a claim about what Meta advertising costs in any market or category. We have not measured that, so we do not assert it. If you have your own account data, use your own CPM. It will be better than ours.

How confident you should be: low. The model has three known weaknesses. First, reach counts people while CPM prices impressions, so if an ad showed to the same person four times a naive calculation understates real spend by about that factor; we treat the CPM input as the cost per thousand people reached, which folds frequency into the number you choose, but it is still an assumption doing the work. Second, coverage is EU, EEA and UK only: ads that never delivered into those markets have no published reach and get no estimate, so a brand advertising heavily in the United States can look quiet here, and where we have priced only part of a brand's ads we say so on screen. Third, one ad is not a budget: these are per-ad figures for ads currently live, they exclude everything already stopped, and they exclude every channel that is not Facebook or Instagram.

What we will not do: present a modelled spend figure as a measured one; cite a CPM benchmark we have not measured ourselves; show a total that silently rests on ads we have not priced; or report a spend number without the range and the assumption attached to it. If you can show that any part of this method is wrong, we want to know and we will change it. The reach layer is auditable against Meta's own Ad Library, and every ad we show links back to its Ad Library entry so you can check ours against theirs.

Search any brand and see every Meta ad it is running right now.

Look your brand up