Lock in $67
Method

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.

Espen Opdahl Published 6 min read
The short answer

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.

worth knowing The public Ad Library is open to anyone with a browser. This tool is not.

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 wantedWhat the connector gives you
The ad's primary textNothing. ad_creative_bodies exists in the public API and does not come through
How long an ad has been runningThe start time only — no stop time, so a finished ad looks like a live one
Where it ranNothing. Platform, language and location targeting all stay behind
Spend and impressionsReserved 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 creativeA link to the snapshot page, which you open in a browser yourself
Who is advertising, and how heavilyThis 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

  1. Search by page, not by keyword START HERE

    Run one keyword search to harvest page_id values, check by eye that the pages returned are actually your competitors, then throw the keyword away and pass those IDs in page_ids from 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.

  2. Count advertisers, not ads

    Ask for a page of results and tally how many rows each page_name took. 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.

  3. 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 price

Pre-sale: the modules are still being recorded and founding members get the checkout link first. No charge today. Public price $97.

Espen Opdahl Writes The Claude Ads Operator. I run Meta ad accounts through Claude and Meta's official ads connector, and I write down what actually happens — including the parts that don't work. Not affiliated with Meta or Anthropic.