// Meta ads scraper

Meta ad data for every brand on your list

Turn the Meta Ad Library into a data source. Send a domain or Facebook page URL, get back every Facebook and Instagram ad as JSON. Look up one company or run it across thousands.

No credit card required

"After testing multiple qualification points (company size, marketing roles, website features), the #1 filter we've used to find high quality B2C/DTC brands has been qualifying for active Meta ads. Adyntel has been very accurate and gives us a lot of good data around brand's ad campaigns, their integration makes using their tool stupid easy in Clay."
Christian Plascencia

Christian Plascencia

Co-Founder @ RevGrowth

Agency

What you get from each API call

Pass in a domain or Facebook page URL. Get back structured data for every active ad that company is running on Facebook and Instagram.

For the company:

  • Total ad count across all Meta platforms
  • All active ads currently running
  • Inactive ads for campaigns that targeted the EU or UK
  • Pagination via continuation_token for large ad libraries

For each ad:

  • Format: image, video, carousel, or dynamic creative (DCO)
  • Start date, and end date for inactive ads
  • Destination URLs: primary link plus additional destinations for multi-locale or multi-variant ads
  • Copy: body text, headline, link description, and CTA
  • Creative assets: image URLs, video URLs, and preview thumb

Example response (shopify.com):

{
  "status": "success",
  "data": {
    "page_id": "20409006880",
    "country_code": "ALL",
    "continuation_token": "AQHSLCvINjglGZ21w8YWrk17vcI7lEBCi1CtbeCvaLrgPo5a4rD_...",
    "platform": ["facebook", "instagram"],
    "number_of_ads": 5907,
    "unique_landing_pages": ["https://www.shopify.com/free-trial", "..."],
    "results": [
      [{
        "ad_archive_id": "1616561949512060",
        "snapshot": {
          "page_name": "Shopify",
          "body": { "text": "" },
          "caption": "shopify.com",
          "cta_text": "Learn more",
          "cta_type": "LEARN_MORE",
          "display_format": "DCO",
          "cards": [{ "title": "Convierte tu web en una tienda", "link_url": "https://www.shopify.com/...", "original_image_url": "https://..." }]
        },
        "is_active": true,
        "start_date": 1765180800,
        "end_date": 1771574400,
        "publisher_platform": ["FACEBOOK", "INSTAGRAM", "MESSENGER"]
      }],
      [ /* more ads... */ ]
    ]
  }
}

Each call returns ~30 ads and a continuation_token. Page through until complete. 1 credit per call.

Actionable data at any volume

Run one domain or batch millions. Same structure every time.

Run it for:

Creative research
Pull all ads from your top competitors. The response includes direct image and video URLs. Feed them to your design team. Collation counts show how many creative variants they're testing per concept.

Competitive monitoring
Schedule daily checks on your top competitors. Track when new creatives appear and when campaigns go dark. Build your own timeline of their ad activity through repeated API calls.

DTC and e-commerce qualification
Meta is the primary paid channel for DTC brands and consumer apps. Ad activity here is a stronger qualification signal for these companies than Google would be. Flag which accounts are running paid ads before outreach.

Agency prospecting
High collation counts mean active creative testing — an in-house team or an agency. Companies with many collation groups and frequent new creatives are likely spending enough to need outside help.

Inbound enrichment
Trigger an API call when a prospect signs up. If your customers are DTC brands or consumer apps, Meta activity tells you more than Google would. Route them based on format mix, platform split, or whether they're running lead form ads.

Example responses (same structure):

// gymshark.com
{
  "number_of_ads": 1488,
  "page_id": "129669023798560",
  "results": [ /* ~30 ads per page */ ],
  "continuation_token": "AQHSTsu5MSGd7dN4..."
}

// clickup.com
{
  "number_of_ads": 595,
  "page_id": "304981139881438",
  "unique_landing_pages": ["clickup.com/lp/features/calendar", "..."],
  "results": [ /* ~30 ads per page */ ],
  "continuation_token": "AQHS4flqHBLhIzZ..."
}

// asana.com
{
  "number_of_ads": 787,
  "page_id": "180143175668",
  "results": [ /* ~30 ads per page */ ],
  "continuation_token": "AQHS1Bp-VNZyA17M..."
}

Each call returns ~30 ads and a continuation_token. Same fields for every domain. 1 credit per call.

Format ready for any tool or workflow

Clean JSON. Every field has the same structure across all responses. No parsing edge cases.

Clay

Add as HTTP API enrichment or use Adyntel's direct integration. Map fields to columns. Build conditional logic:

  • number_of_ads > 10: tag as "active advertiser"
  • display_format = "VIDEO": add to "video advertiser" list
  • platforms includes "INSTAGRAM": tag as Instagram advertiser

CRMs (Salesforce, HubSpot, Pipedrive, Attio, etc.)

Store as custom fields: meta_ad_count (number), meta_start_date (date), meta_primary_format (text), meta_page_id (text). Trigger sequences when ad count changes or new formats appear.

Databases (Postgres, Airtable)

Store full JSON in JSONB column. Query by format, platform, or page name. Track changes over time by storing responses daily.

LLMs (ChatGPT, Claude, Gemini, Copilot, etc.)

Pass structured ad data as context: "Analyze these 23 Meta ads from Notion: [JSON]. Extract their main value props and messaging themes." Get competitive intelligence without manual analysis.

Spreadsheets (Google Sheets, Excel)

Import via Apps Script or Power Query. Flatten JSON into rows. Track ad count by company, pivot by format and platform, sort by start date.

Python/Node

Standard HTTP POST. Parse with built-in JSON libraries. No SDK. No wrapper. Works anywhere you can make an HTTP request.

response = requests.post('https://api.adyntel.com/facebook', json={
    'api_key': key,
    'email': email,
    'company_domain': 'notion.so'
})
all_ads = [ad for group in response.json()['results'] for ad in group]

Simple, transparent pricing

Start with 50 free credits so you can test the product. No credit card required.

Subscription
(save 25%)
Pay as you go

5,000

credits

$44/mo

$0.00882 per credit

Try for Free

25,000

credits

$179/mo

$0.00714 per credit

Try for Free

50,000

credits

$321/mo

$0.00643 per credit

Try for Free

Need more than 50k credits? Contact us for a custom plan.

Frequently asked questions

Adyntel's Meta ads library scraper API

What input do I need?
A company domain or a Facebook page URL. If you send a domain, Adyntel finds the Facebook page automatically. A Facebook page URL will give more accurate results.
Does this return Instagram ads too?
Yes. One call covers Facebook, Instagram, Messenger, and Threads. The publisher_platform field tells you which platforms each ad runs on.
Can I pull ads that have stopped running?
Depends on the market. Meta only archives ads that ran in EU or UK countries — those are stored for 12 months. Political and issue-based ads are archived for 7 years globally. For standard commercial ads outside those regions, Meta doesn't keep a record once the ad stops. To pull inactive EU/UK ads, pass a country_code for those markets and set active_status to inactive or all. By default only active ads are returned.
Can I filter by country?
Yes. Pass a country_code for any of the 190+ supported countries.
What data comes back for each ad?
Body, headline, link URL, image and video URLs, CTA type and text, carousel cards, publisher platforms, page name, page ID, start date, end date.
Can I filter by format?
Yes. media_type accepts image, video, or meme.
How does pagination work?
The first call returns around 30 ads plus a continuation_token. Pass the token in the next call. Repeat until the token is null.
What does each call cost?
1 credit. No charge if the domain has no Facebook page or the page isn't public.
Do I need a Meta developer account?
No. Meta's Ad Library API requires a developer app and approved access. Adyntel doesn't. One POST request with a domain.
How is this different from Apify?
Apify's Facebook scrapers need a Facebook Ad Library URL or page URL as input. You search the Ad Library manually, find the company, copy the URL, paste it into the scraper, configure the actor, and download results from a dataset. Adyntel takes a domain and returns JSON. There are also 15+ different Facebook scrapers on Apify from different developers with different maintenance schedules. Adyntel maintains one endpoint.
Can I use this with Clay?
Yes. Adyntel integrates directly with Clay. Enrich entire tables with Facebook and Instagram ad data.
Do you cover other platforms?
Yes. LinkedIn and Google ads. Same domain input, same JSON output.