meta-ads-search
The ads the Meta Ad Library (Facebook, Instagram, Messenger) shows for a keyword search, one row per ad: advertiser page, dates, platforms, text, link, button, media, cards, and spend and impressions for political ads. query is the search text; country is ALL or two letters (US, GB, DE); active_status is active or all; limit up to 100. A view shows up to 30 ads; below limit, the recipe adds the search split by media type (4 more fetches, not in the Library's order). No login. 2-8 s; if Facebook refuses our address, a residential exit (3-10 s), then a browser: 20-45 s, up to 10 units.
Recipes are not open yet.
What this recipe returned on its last run. No key needed to look.
Fields
25 columns on every row. null means the site does not state it.| field | type | meaning |
|---|---|---|
| ad_archive_id | string | The Ad Library's id of the ad (digits, as a string). |
| ad_url | string | The ad's own page in the Meta Ad Library. |
| page_id | string | The id of the Facebook page that runs the ad (digits, as a string). |
| page_name | string | The name of the Facebook page that runs the ad. |
| page_url | string | The Facebook address of the page that runs the ad. |
| page_likes | integer | How many likes the page that runs the ad has; null when the Library does not show it. |
| is_active | boolean | True while the ad runs, false when it has stopped. |
| start_date | string | The day the ad started running, ISO 8601 UTC (the Library counts days in Pacific time, so the hour is 07:00 or 08:00). |
| end_date | The day a stopped ad ended, ISO 8601 UTC; null while the ad runs. | |
| platforms | string[] | Where the ad runs, lower case: facebook, instagram, messenger, whatsapp, threads, audience_network. |
| display_format | string | The ad's format as the Library names it, lower case: image, video, carousel, dpa (a product catalog ad), dco (an ad Meta assembles from several texts and images), text; null when the Library gives none. |
| title | string | The ad's headline; for a catalog ad, whose own headline is a template, the first card's headline. |
| body | string | The ad's main text (at most 5000 characters); for a catalog ad with a template text, the first card's text. |
| link_url | string | Where a click on the ad goes; for a catalog ad, the first card's link. |
| link_caption | string | The short text under the link, usually its domain (nike.com). |
| cta | string | The button text (Shop now, Learn more, Install now). |
| cta_type | string | Meta's code for the button (SHOP_NOW, LEARN_MORE, INSTALL_MOBILE_APP). |
| images | string[] | The ad's image URLs, its cards' images included, at most 20 (Facebook's image links expire after some days). |
| videos | any[] | The ad's video file URLs (HD when there is one), its cards' videos included, at most 20 (the links expire after some days). |
| cards | any[] | The cards of a carousel or catalog ad, at most 20, each with title, body, link_url, cta, image and video; empty for a single-image or video ad. |
| same_creative_ads | integer | How many ads use this same image or video and text (the Library shows them as one); null when the Library gives no count. |
| impressions | The impressions range the Library shows (>1M, 10K-15K); only for political and issue ads, and some ads seen in the EU; else null. | |
| spend | The amount spent as the range the Library shows (>$1M, $100 - $199), in currency; only for political and issue ads, else null. | |
| currency | The currency of spend (USD, EUR); null when there is no spend. | |
| paid_for_by | Who paid for the ad, as its disclaimer says; only for political and issue ads, else null. |
null means the site does not state it.
currency; only for political and issue ads, else null.spend (USD, EUR); null when there is no spend.How it behaves
Cost. 3-7 units; up to 10 if Facebook refuses. A failed run costs 0.
Freshness 30 min. The same input within 30 min is served from cache at 0 units.
How it answers. Answers at once for one input; a large run goes as a job you poll.
Questions about this recipeQuestions
Short answers. The API reference has the long ones.
Call POST /recipes/meta-ads-search with your key and query and country and active_status. You get rows with the 25 fields above. The recipe is tested against the live site every 6 hours.
3-7 units; up to 10 if Facebook refuses. A failed run costs 0. The same input within 30 min costs 0.
Yes. Sign up with Google, GitHub or email for a free key with 1,000 credits every month. No credit card.
The health check runs every 6 hours against the live site. A failing recipe shows as failing on this page until we fix it.
Extra fields, higher volume, or a private copy with a freshness SLA. We build it on Enterprise.
Request a changeMore for competitor intelligence
All 8 recipes →One product on Product Hunt as one row: name, tagline, description, website, logo, rating and review count, followers, categories, social…
Today's Product Hunt launches, then each product page read by the LLM for a category and a one-line summary.
The reviews on a company's Trustpilot page, newest first, one row per review: star rating, title, full text, publish and experience dates…
For developers
Get a free API key and run your first crawl.
1,000 credits every month. No credit card. Your self-hosted setup keeps working.
For teams
Talk to us about volume, regions and an SLA.
A 30-minute call with the team that writes the crawler. DPA on request, invoice billing, your choice of US, EU or Singapore.