Find Meta Ads
find_meta_adsSearch Meta Ad Library for a company's Facebook and Instagram ads, returning one row per ad with creative text, headlines, dates, surfaces, and snapshot URLs. Coverage varies by region.
Instructions
Search the Meta Ad Library for a company's ads through Facebook's sanctioned Graph API and return ONE FLAT ROW PER AD with creative text, headline, delivery dates, the Meta surfaces it ran on and Meta's permanent snapshot URL for the rendered ad. COVERAGE IS NOT UNIVERSAL: the Ad Library holds all ads only in the EU and only political and issue ads elsewhere, so a commercial advertiser outside the EU is legitimately absent and every row carries a coverage note saying what the search could have found. Requires the caller's own Meta app access token, as the metaAccessToken argument or the META_ACCESS_TOKEN environment variable. Use it to check whether a company advertises on Facebook and Instagram right now or to pull a creative history; each call is a point in time read, so monitoring means calling it on a schedule and comparing rows. Not for organic posts or follower counts, which the brand presence mappers cover. Impressions and spend exist for political ads only and arrive as bands, so a null there is not zero spend. Read only; requires an APIFY_TOKEN and consumes Apify credits per call.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| maxAds | No | How many ad rows to return per company. This is a cost dial, not a change of answer: the row always reports how many ads matched before the cap. | |
| ad_type | No | ALL returns every ad the Ad Library holds for those countries. POLITICAL_AND_ISSUE_ADS narrows to the political archive, which is the only archive that carries impressions and spend, and which requires a verified identity on your Meta account. | |
| skipCache | No | Default false: a successful lookup is cached for seven days and reused, which costs nothing on a repeated run. Set true to force a fresh fetch. | |
| media_type | No | Narrow to a creative format. Useful for a creative teardown where you only care about video, and irrelevant for a simple "are they advertising" check. | |
| company_name | No | Strongly recommended here. Meta advertiser search is a fuzzy text search over page names, so the company name is what the identity gate compares a matched page against. Without it the gate falls back to the domain stem, which is weaker. | |
| company_domain | No | Bare company domain, for example gymshark.com. Used to derive the advertiser search term when no company name is given, and used by the identity gate to check that a matched advertiser page really is this company. | |
| metaAccessToken | No | YOUR OWN Meta app access token, free to create at developers.facebook.com. Required unless the server was started with the META_ACCESS_TOKEN environment variable, which keeps the token out of the chat transcript; the Ad Library API is not open, so with neither the call returns an error before any Apify run starts. Political and issue ad data additionally requires a verified identity on your Meta account, which is a Meta requirement. | |
| ad_active_status | No | Whether to return currently running ads, stopped ads, or both. ACTIVE is the default because a currently running ad is the buying signal; ALL is what you want for a creative history or a competitive teardown. | |
| ad_reached_countries | No | Which country audiences to search. This parameter is REQUIRED by Meta and a request without it fails outright. The EU set is where the Ad Library covers ALL ads rather than only political ones, so it is the default. |