Facebook Ad Library search through Claude: what comes back
Meta's connector has an Ad Library search built in, so you can skip the third-party scraper. Then you find out what the payload actually carries.
Meta's official ads connector searches the public Ad Library itself — the tool is
ads_library_search, and you do not need a third-party server for it. What
comes back is thin: a page name, a link title, two timestamps and a snapshot URL. Not the ad's
primary text. Not the picture. Not how long it has been running. And because the Library indexes
ads rather than creatives, one advertiser running the same creative across many ads can fill your
entire result page. It is a pointer list, not a research report.
You ask Claude what a competitor is running. Back comes a tidy list — page names, ad IDs, a couple of dates — and you realise you have learned nothing about their offer, their angle or their price.
That is not the model being lazy. It is the whole of what the tool handed it. The decision worth making before you start is which job you are doing. Reconnaissance — who is advertising in this category, since when, at what volume — is a job this payload can do. Creative research needs the words and the pictures, and the words and the pictures are the two things it does not carry.
What ads_library_search returns
Five inputs: search_terms, page_ids, countries,
ad_active_status and ad_type. At least one of the first three is
required, and asking without them gets a flat refusal rather than a default:
At least one of search_terms, page_ids, or countries must be provided.
When it does answer, every ad in the list has the same shape. Here is a real row with the identifiers cut out:
{
"estimated_total_count": ...,
"ads": [
{
"id": ...,
"page_id": ...,
"page_name": "Mind & Mood Daily",
"ad_creative_link_title": "Feel More Like Yourself Again",
"ad_creation_time": ...,
"ad_delivery_start_time": ...,
"ad_snapshot_url": "https://www.facebook.com/ads/library/?id=...",
"currency": "USD"
}
]
}
Eight keys per ad, and no fields parameter with which to ask for more. Both times
arrive as raw epoch integers, so any calendar date you read in the chat is the model's arithmetic
rather than something Meta sent.
Set that against what Meta publishes through the Ad Library API. The
ArchivedAd
reference lists ad_creative_bodies — the actual text of the ad — alongside
ad_creative_link_descriptions, ad_delivery_stop_time,
publisher_platforms, languages, target_ages,
target_gender and target_locations. None of those are reserved for
political advertising. None of them reach the chat.
Keyword search is looser than it looks
On 27 August 2026 I asked for ten active ads in the United States matching
sleep supplement. Every row came back from novel-promotion pages, two of them between
the lot, each carrying an identical link title inviting the reader to start reading. Nothing about
sleep. Nothing about supplements. The same call for magnesium glycinate, minutes later,
behaved exactly as you would want: supplement advertisers, on topic, ranked sensibly.
One term worked and one returned an unrelated category, on the same day, through the same tool. Treat the keyword path as a way to discover page IDs, and check what came back before a summary gets written on top of it.
The tool's own description, read live on 27 August 2026, states that the tool "is only available to viewers who have at least one active ad account; callers without an active ad account will receive an error rather than results". The same description rules one use out by name: "Do NOT use for bulk data extraction/scraping of the Ad Library". That is a policy line living inside the instructions the model reads, which makes it a great deal more binding on Claude's behaviour than on yours.
What the Library holds, and what arrives in the chat
| What you wanted | What the connector gives you |
|---|---|
| The ad's primary text | Nothing. ad_creative_bodies exists in the public API and does not come through |
| How long an ad has been running | The start time only — no stop time, so a finished ad looks like a live one |
| Where it ran | Nothing. Platform, language and location targeting all stay behind |
| Spend and impressions | Reserved for political and issue ads even in the public API — and the connector returns the same eight keys for those, so they never appear |
| The creative | A link to the snapshot page, which you open in a browser yourself |
| Who is advertising, and how heavily | This it does well: page names and a row per ad |
The last row is the one worth building a routine around. Everything above it is a reason to open a tab.
Knowing what a tool will not tell you is what stops a summary becoming a decision. See how the weekly routine is built →
How to get something out of it anyway
-
Search by page, not by keyword START HERE
Run one keyword search to harvest
page_idvalues, check by eye that the pages returned are actually your competitors, then throw the keyword away and pass those IDs inpage_idsfrom then on. A page search is exact; a keyword search is a guess about how Meta indexed somebody's copy. The trade: you have to already recognise who your competitors are — and the keyword path that would have told you is the one you just stopped trusting. -
Count advertisers, not ads
Ask for a page of results and tally how many rows each
page_nametook. In my supplement search, ten rows resolved to three advertisers, and in the sleep search to two. That concentration is the signal the thin payload is genuinely good at: it tells you who is running enough volume to dominate an index they do not control. The trade: ad count is a poor proxy for budget. A brand running dozens of near-identical ads may be spending heavily, or may be testing badly, and this payload cannot separate the two. -
Open the snapshot URLs for the handful that matter
Every row carries
ad_snapshot_url. For the ads that survive the first two steps it is worth the click — the rendered ad, the copy, the format — and you can paste what you find back into the chat. The trade: it is manual, and it is exactly the step the whole exercise was meant to remove.
The Ad Library indexes ads. Advertisers think in creatives. That gap is your result page.
- Treating the keyword search as a topic search. It matches text in ad creative, which is not the same as matching a subject, and one of my two probes proved it on the day.
- Reading the result count as market size. The response calls it an estimate, and it counts ads, not advertisers and not spend.
- Asking Claude to preview a competitor's ad. The preview tool works on ads in an account you have access to. For someone else's ad, the snapshot URL is the route — and yes, the connector reads creatives fine for your own account.
- Letting the model find "themes" in link titles. A link title is often a discount line or an empty string. A theme built from those is a theme about button copy.
Try this tonight
Run one keyword search for your category, active ads only, in your country. Ignore every field
except page_name, and count how many rows each page took. The one or two pages that
dominate are worth an hour — open their snapshot URLs and read the offers. The pages that appear
once are noise, and you have just saved yourself researching them.
The same de-duplication problem shows up inside your own account, where you at least have a key to group on: de-duplicating by creative_id covers that. The Ad Library payload has no such key. If you want the rest of what the connector exposes, the full tools list has it, and if you have not connected yet, start with the setup.
Frequently asked questions
Do I need a third-party MCP server to search the Facebook Ad Library?
Not for this. Meta's own ads connector carries an Ad Library search tool, so if you are already connected you have it. Third-party servers and scrapers still win on one thing — they return the ad's body copy and other fields the official tool leaves out — so the honest answer is that it depends on whether you want reconnaissance or creative research.
Can I see how much a competitor is spending?
No. Spend and impressions are published only for ads about social issues, elections and politics, and that is a rule of the Ad Library rather than of the connector. For an ordinary commercial advertiser the figure does not exist publicly, and anything that quotes you one is estimating.
Why does one advertiser fill my whole result page?
Because the Library returns a row per ad, and a brand commonly runs one creative across many ads for placement and audience splits. There is no creative identifier in the response to group them, so ask for the tally by page name and read that instead of the raw list.
Will Claude read the competitor's actual ad text for me?
Not from this tool — the primary text is not in the response, only the link title. Open the snapshot URL, and paste the copy into the chat if you want it worked on. It is a manual step and there is no way around it through the official connector today.
Research that ends in a decision, not a summary
The course covers the weekly routine, the prompts that force a verification step, and the places where the connector's answer is thinner than it looks.
See what's inside — $67 founding pricePre-sale: the modules are still being recorded and founding members get the checkout link first. No charge today. Public price $97.