Zernio
APIFor you
Zernio
APIFor you
API Reference

Ad Library

Search the public Ad LibraryGET
Dashboard
OverviewPlatformsAPI ReferenceResources
Ad Library

Search the public Ad Library

Searches Meta's or LinkedIn's public Ad Library to see what ads other advertisers run, for competitor and market research.

Meta's Ad Library (GET /ads_archive) is searched with Zernio's own developer access, so platform=meta needs no connected account at all. LinkedIn's Ad Library (GET /rest/adLibrary) runs on a connected linkedin / linkedinads account, passed as accountId. Passing a Meta account as accountId also selects Meta. Rows are returned in the platform's raw shape under data; paging.after is an opaque cursor on both (null when exhausted).

Meta coverage. Political and social-issue ads are searchable worldwide. Every other ad is in the archive only if it was delivered to the EU or UK within the last year, so a US-only commercial advertiser is invisible. Spend, impressions and demographics are political-only fields and are left out of the default projection; request them via fields. All customers share Zernio's Meta quota, so a 429 means back off for a minute.

LinkedIn coverage. Ads served after June 1 2023, worldwide, kept for a year after their last impression. EU-delivered ads carry impression ranges and the disclosed targeting facets. Pages are capped at 25 ads (limit > 25 is a 400); after is the next offset.

Which params apply: q, countries, limit, after on both; pageIds, adType, status, platforms, mediaType, languages, searchType, fields, since, until are Meta-only; advertiser is LinkedIn-only. Passing a param the account's platform does not support is a 400 naming the param.


PlatformsMetaLinkedIn
GET
/v1/ads/library

Authorization

bearerAuth
AuthorizationBearer <token>

API key authentication: send your Zernio API key in the Authorization header, prefixed with Bearer.

In: header

Query Parameters

platform?string

Which archive to search. meta needs no accountId. Required unless accountId is given.

Value in

  • "meta"
  • "linkedin"
accountId?string

Zernio SocialAccount id. Required for LinkedIn (linkedin / linkedinads: its token searches). Optional for Meta, where any facebook / instagram / metaads account only selects the platform.

q?string

Keyword search. Meta does not translate it, so write it in the ads' language. Required unless pageIds (Meta) or advertiser (LinkedIn) is given.

Lengthlength <= 100
pageIds?string

Meta only. Comma-separated Facebook Page ids (max 10) whose ads to list.

advertiser?string

LinkedIn only. Advertiser (Page) name to search.

Lengthlength <= 100
countries?string

Comma-separated ISO 3166-1 alpha-2 codes the ads reached. Meta defaults to ALL (an explicit ALL is Meta-only); LinkedIn searches every market when omitted.

adType?string

Meta only.

Default"ALL"

Value in

  • "ALL"
  • "POLITICAL_AND_ISSUE_ADS"
  • "HOUSING_ADS"
  • "EMPLOYMENT_ADS"
  • "FINANCIAL_PRODUCTS_AND_SERVICES_ADS"
status?string

Meta only. ACTIVE = eligible for delivery right now.

Default"ACTIVE"

Value in

  • "ACTIVE"
  • "INACTIVE"
  • "ALL"
platforms?string

Meta only. Comma-separated publisher platforms: FACEBOOK, INSTAGRAM, AUDIENCE_NETWORK, MESSENGER, WHATSAPP, OCULUS, THREADS, STREAMING_SERVICES.

mediaType?string

Meta only.

Value in

  • "ALL"
  • "IMAGE"
  • "MEME"
  • "VIDEO"
  • "NONE"
languages?string

Meta only. Comma-separated ISO 639-1 codes of the ad text.

since?string

Meta only. Earliest delivery date (YYYY-MM-DD). LinkedIn's archive does not filter by date, so it is a 400 there: filter on details.adStatistics.firstImpressionAt / latestImpressionAt instead (EU-delivered ads only).

Formatdate
until?string

Meta only. Latest delivery date (YYYY-MM-DD); a 400 on LinkedIn, see since.

Formatdate
searchType?string

Meta only. Whether q matches words in any order or as an exact phrase (comma-separate phrases to match all of them).

Default"KEYWORD_UNORDERED"

Value in

  • "KEYWORD_UNORDERED"
  • "KEYWORD_EXACT_PHRASE"
fields?string

Meta only. Comma-separated Graph field override. Supports nested {} projections and Graph field modifiers, so a nested edge can be paged explicitly: without a .limit() modifier the expansion runs at the Meta default page size and the tail is dropped silently.

limit?integer

Rows per page. LinkedIn accepts at most 25.

Range1 <= value <= 100
Default25
after?string

paging.after of the previous page.

Response Body

application/json

application/json

application/json

application/json

application/json

import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.adlibrary.searchAdLibrary();console.log(data);

{  "platform": "meta",  "data": [    {      "id": "1234567890",      "page_id": "811889972008357",      "page_name": "Zernio",      "ad_creation_time": "2026-08-02",      "ad_delivery_start_time": "2026-08-03",      "ad_creative_bodies": [        "Schedule posts and run ads from one API."      ],      "ad_creative_link_titles": [        "Zernio for developers"      ],      "ad_snapshot_url": "https://www.facebook.com/ads/archive/render_ad/?id=1234567890",      "ad_library_url": "https://www.facebook.com/ads/library/?id=1234567890",      "publisher_platforms": [        "facebook",        "instagram"      ],      "languages": [        "en"      ],      "eu_total_reach": 18400,      "target_ages": [        "25",        "54"      ],      "target_gender": "All"    }  ],  "paging": {    "after": "QVFIUm..."  }}

Was this page helpful?

Estimate audience reach

Estimates how many people a targeting setup would reach before you create a campaign. Returns a normalized pre-flight audience-size estimate for a targeting spec, before any campaign is created. Backed by each platform's native reach API (Meta `delivery_estimate`, LinkedIn `audienceCounts`, X `audience_summary`, Pinterest `audience_sizing`). Platforms without a usable pre-flight reach API (Google Search/Display, TikTok) return `available: false` with no bounds, so clients can hide or grey out the estimate rather than treat the absence as an error.

List lead conversations

Shows the calls (with recordings) and messages exchanged with one Google Local Services lead, oldest first. Conversation entries of one Local Services lead: phone calls (duration, recording URL) and messages (text, attachment URLs), oldest first. Read live from `local_services_lead_conversation`, always scoped to a single lead. Call-recording URLs require read access on the Google Ads account. Draws on the shared Google Ads operations budget.