Meta EU reach: the closest public number to ad performance
Meta hides impressions for commercial ads, but publishes EU reach for every ad shown in the EU. How to read it, why the curve over time matters more than one number, and how to get it through an API.
The AdLib team · · 4 min read
Nobody outside a company sees what its ads cost or how many people clicked. Meta's Ad Library does not even show impressions for commercial ads. But for every ad shown in the EU it publishes one number that comes close: how many people the ad reached. Measured once, that number says little. Measured every few days, it shows which ads an advertiser keeps feeding with budget, and that is the closest public signal of what works.
This post explains what Meta publishes, how to read reach over time, and how to get the curve through the AdLib API.
What Meta shows for commercial ads, and what it hides
For a normal commercial ad, the Meta Ad Library shows the creative, the page, the start date, the platforms and whether the ad is still active. It shows no impressions and no spend. Those appear only for political and issue ads, and only as broad ranges.
Ads delivered in the EU are different. The EU Digital Services Act requires very large platforms to keep a public ad repository, so for these ads Meta adds a transparency block:
- Reach: how many accounts in the EU saw the ad, in total and per country.
- Audience split: reach by age group and gender.
- Targeting: the locations, ages and genders the advertiser chose, plus other targeting it discloses.
- Who paid: the payer and the beneficiary of the ad.
Meta keeps this data in the library for a year after the ad last ran.
One reach number is not a performance number
Reach is cumulative: it counts unique accounts since the ad started. A reach of 400,000 can mean a strong ad that ran for a week or a weak one that ran for a year. On its own it mostly tells you the ad was not tiny.
The curve tells you more. If you measure the same ad every few days, the growth between two points is what the ad gained in that window. Advertisers move budget toward ads that perform, so:
- Reach that keeps climbing means the ad is still getting budget, usually because it works.
- Reach that flattens while the ad stays active means delivery was throttled: the budget went elsewhere.
- A new variant whose reach overtakes the old one is often the winner of a test.
This is the same logic as ad run length: nobody keeps paying for an ad that loses money. Reach growth is sharper, because it shows how hard the ad is pushed, not just that it is still on.
Why you need the history, and why the library does not give it
The Ad Library only shows today's value. Yesterday's number is gone, and with it the growth. To see a curve, someone has to look at the same ad repeatedly and keep the numbers.
That is what we do for every advertiser on a watchlist. When we first see a Meta ad, we look up its EU data. While it runs and has EU reach, we look again every few days. Each look adds one point per day: the EU total and the reach per country.
Get the reach curve through the API
The points come with the ad's history:
curl https://api.adlibapi.com/v1/ads/meta:1234567890/history \
-H "X-API-Key: $ADLIB_API_KEY"The reach array is next to the versions and active periods. The values below are an example of the shape, not real data:
{
"data": {
"ad_id": "meta:1234567890",
"reach": [
{ "day": "2026-10-04", "reach_total": 21000, "reach_by_country": { "DE": 15000, "AT": 6000 } },
{ "day": "2026-10-11", "reach_total": 148000, "reach_by_country": { "DE": 110000, "AT": 38000 } },
{ "day": "2026-10-18", "reach_total": 151000, "reach_by_country": { "DE": 112000, "AT": 39000 } }
]
}
}Read it as a story: the ad gained 127,000 people in its second week, then only 3,000 in its third. Whatever the advertiser was testing, this ad was pushed hard and then dropped back. In an agent, the MCP tool get_ad_history prints the same points as text.
The latest EU block, including targeting and payer, is in eu_data on the ad itself (GET /v1/ads/{id}).
Using EU reach to judge ads outside the EU
Many brands run the same creative in the EU and in the US. The US version has no public reach at all, but the EU version of the same creative often does. When copy, image and landing page match, the EU curve is a reasonable hint at how the advertiser rates that creative everywhere. Treat it as a hint: budgets, audiences and seasons differ by market.
Limits worth knowing
- EU only. Ads that never ran in the EU have no reach data, and the number covers EU accounts only.
- Reach, not impressions. One person who saw the ad ten times counts once.
- Measured when we look. Points fall on our check days, so the growth between two points covers several days.
- Only for tracked advertisers. We measure ads of advertisers on a watchlist. Any ad you look up with
GET /v1/ads/{id}also gets a point for that day.
Start tracking an advertiser with a watchlist, and the curve begins with its next ads.
Questions people ask
- Does the Meta Ad Library show impressions?
- Only for political and issue ads, and only as a range. For commercial ads Meta shows no impressions and no spend.
- What is EU reach in the Meta Ad Library?
- For ads delivered in the EU, Meta publishes how many accounts in the EU the ad reached, in total and per country, plus the age and gender split and the targeting. It does so because the EU Digital Services Act requires an ad repository.
- How can I estimate how well a competitor's ad performs?
- Look at how its EU reach grows between measurements. An ad whose reach keeps climbing gets budget; one that flattens has been throttled or stopped. Run length is the second signal.
- Does AdLib store EU reach over time?
- Yes. For advertisers we track, AdLib measures the EU reach of each Meta ad when we first see it and again every few days while it runs, and returns the points in GET /v1/ads/{id}/history as reach.