# Meta Ad Library search API

The Meta Ad Library search API searches the ads running now in the Meta Ad Library (Facebook, Instagram and Meta's other apps) by keyword: advertiser, text, headline, images and videos, landing page, first and last day shown; can be limited to a country and to image or video ads, sorted by impressions or newest first. 30 ads a page. One call costs 2 credits ($0.004 to $0.0067 depending on the pack); failed calls are free. Last tested 2026-10-17.

- Page: https://socialtoai.com/meta-ad-search-api/
- Last updated: 2026-10-17
- Last tested: 2026-10-17

| Request | Price key | Credits |
| --- | --- | --- |
| `POST /v1/call/meta.ad_search` | `meta.ad_search` | 2 |

Preview: this interface is not marked stable yet, so its parameters and fields may still change. It is charged like any other call, and a failed call is not charged.

## Request

```bash
curl https://api.socialtoai.com/v1/call/meta.ad_search \
  -H "Authorization: Bearer $SOCIALTOAI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "running shoes"
  }'
```

```python
import os
import requests

response = requests.post(
    "https://api.socialtoai.com/v1/call/meta.ad_search",
    headers={"Authorization": f"Bearer {os.environ['SOCIALTOAI_KEY']}"},
    json={
        "query": "running shoes",
    },
)
print(response.json())
```

## Parameters

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `query` | string | Required | — | Search terms |
| `region` | string | Optional | — | Only ads delivered in this country or region, by its two-letter code; all of them when left out |
| `sort` | string | Optional | popular | By impressions, highest first, or newest first `"popular"` `"latest"` |
| `type` | string | Optional | — | Only image ads or only video ads; all of them when left out `"image"` `"video"` |
| `cursor` | string | Optional | — | Pass page.cursor from the last response to get the next page. |

## Response fields

| Field | Type | Meaning | Given |
| --- | --- | --- | --- |
| `items[].title` | string | The entry's title or name. | yes |
| `items[].url` | string | A link that opens it; null where the platform's list has none. | yes |
| `items[].rank` | integer | Position on a board, from 1. | yes |
| `items[].heat` | integer | The platform's heat score. | yes |
| `items[].fields.format` | string | The ad's format: text, image or video. other is a format of the platform's own. | yes |
| `items[].fields.text` | string | The ad's body text. | yes |
| `items[].fields.landing_url` | string | Where a click on the ad leads. | yes |
| `items[].fields.advertiser.id` | string | Advertiser ID. | yes |
| `items[].fields.advertiser.name` | string | Advertiser's name. | yes |
| `items[].fields.advertiser.url` | string | The advertiser's page on the platform. | yes |
| `items[].fields.images` | string[] | Addresses of the ad's images. | yes |
| `items[].fields.first_shown_at` | string | When the ad was first shown. | yes |
| `items[].fields.last_shown_at` | string | When the ad was last shown. For an ad still running, when the platform last saw it. | yes |

Every item also has platform, id, ref, approx and type; the response around the items is the same on every call. [Response format](https://socialtoai.com/docs/api/response.md)

## Sample response

Sample data: names, links and text are replaced by placeholders; the numbers are as recorded.

```json
{
  "request_id": "req_00000000-0000-4000-8000-000000000001",
  "schema_version": "v1",
  "fetched_at": "2026-10-12T21:48:35.000Z",
  "action": "call",
  "op": "meta.ad_search",
  "platform": "meta",
  "status": "ok",
  "items": [
    {
      "platform": "meta",
      "id": "…",
      "ref": "…",
      "approx": [],
      "type": "entry",
      "entry_type": "ad",
      "title": "…",
      "url": "https://example.com/…",
      "rank": null,
      "heat": null,
      "fields": {
        "format": "image",
        "text": "…",
        "landing_url": "https://example.com/…",
        "advertiser": {
          "id": "…",
          "name": "…",
          "url": "https://example.com/…"
        },
        "images": ["https://example.com/…", "https://example.com/…"],
        "first_shown_at": "2026-10-07T07:00:00.000Z",
        "last_shown_at": "2026-10-12T07:00:00.000Z"
      }
    }
  ],
  "unavailable": [],
  "page": {
    "has_more": true,
    "cursor": "cur_…",
    "cursor_expires_at": "2026-10-12T22:18:35.000Z"
  },
  "warnings": [],
  "applied_params": {
    "query": "running shoes"
  },
  "cost_credits": 2,
  "billing": {
    "cost_credits": 2,
    "balance_credits": 98,
    "today_spend_credits": 2,
    "daily_limit_credits": null,
    "daily_remaining_credits": null,
    "display": "This call: 2 credits. Balance: 98 credits."
  },
  "replayed": false
}
```

## Paging and failures

- One call returns a page of up to 30 items. When page.has_more is true, send page.cursor back as cursor for the next page; each page costs 2 credits and a cursor works for 30 minutes.
- A call that runs and finds nothing is a successful call: status is "empty", items is empty, and it costs 2 credits.
- 1 call per second per key, 5 after a purchase; going over is not charged. [Rate limits](https://socialtoai.com/docs/credits-and-billing.md#rate-limits)
- A failed call costs 0 credits and is never retried on its own. [Error codes](https://socialtoai.com/docs/api/errors.md)

## Ask your AI

- Search the ads running now in the Meta Ad Library (Facebook, Instagram and Meta's other apps) by keyword: running shoes. → `call {"op":"meta.ad_search","query":"running shoes"}`, 2 credits
- Search the ads running now in the Meta Ad Library (Facebook, Instagram and Meta's other apps) by keyword: running shoes, with sort set to latest. → `call {"op":"meta.ad_search","query":"running shoes","sort":"latest"}`, 2 credits

## The same call on other platforms

| Platform | Price key | Credits | Page |
| --- | --- | --- | --- |
| TikTok | `tiktok.ad_search` | 2 | https://socialtoai.com/tiktok-ad-search-api.md |
| LinkedIn | `linkedin.ad_search` | 2 | https://socialtoai.com/linkedin-ad-search-api.md |

## More on Meta Ad Library

| Interface | What it does | Price key | Credits | Page |
| --- | --- | --- | --- | --- |
| `advertiser_ads` | Get the ads an advertiser (a Facebook page) is running now in the Meta Ad Library, by the page's ID. | `meta.advertiser_ads` | 2 | https://socialtoai.com/meta-advertiser-ads-api.md |
| `advertiser_search` | Find advertisers (Facebook pages) in the Meta Ad Library by name. | `meta.advertiser_search` | 2 | https://socialtoai.com/meta-advertiser-search-api.md |
| `ad_detail` | Get one ad of the Meta Ad Library by its library ID or link. | `meta.ad_detail` | 2 | https://socialtoai.com/meta-ad-detail-api.md |

## FAQ

**Do I need a Meta Ad Library account or Meta Ad Library's own API access?**

No. You only need a SocialToAI key. The call returns content and account information publicly visible on Meta Ad Library; you never sign in to Meta Ad Library or apply for anything there.

**What does “Preview” mean here?**

Preview: this interface is not marked stable yet, so its parameters and fields may still change. It is charged like any other call, and a failed call is not charged.
