Ad Library

Search the public Ad Library

Competitor and market research over the public ad archives. 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, since, until, limit, after on both; pageIds, adType, status, platforms, mediaType, languages, searchType, fields are Meta-only; advertiser is LinkedIn-only. Passing a param the account's platform does not support is a 400 naming the param.

get/v1/ads/library

Query parameters

platform'meta' | 'linkedin'

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

accountIdstring

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

qstring

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

pageIdsstring

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

advertiserstring

LinkedIn only. Advertiser (Page) name to search.

countriesstring

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'ALL' | 'POLITICAL_AND_ISSUE_ADS' | 'HOUSING_ADS' | 'EMPLOYMENT_ADS' | 'FINANCIAL_PRODUCTS_AND_SERVICES_ADS'

Meta only.

status'ACTIVE' | 'INACTIVE' | 'ALL'

Meta only. ACTIVE = eligible for delivery right now.

platformsstring

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

mediaType'ALL' | 'IMAGE' | 'MEME' | 'VIDEO' | 'NONE'

Meta only.

languagesstring

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

sincestring date

Earliest delivery date (YYYY-MM-DD).

untilstring date

Latest delivery date (YYYY-MM-DD).

searchType'KEYWORD_UNORDERED' | 'KEYWORD_EXACT_PHRASE'

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

fieldsstring
Example:id,page_name,ad_delivery_start_time,ad_creative_bodies

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.

limitinteger

Rows per page. LinkedIn accepts at most 25.

afterstring

paging.after of the previous page.

Response

Archived ads (raw platform shape)

platform'meta' | 'linkedin' required
dataobject[] required

Changes