Ad Library
Search LinkedIn's public ad archive by keyword or advertiser, with the customer's own token
Ad Library
GET /v1/ads/library searches LinkedIn's public Ad Library (/rest/adLibrary) with the token of a connected linkedin or linkedinads account. The member token you already hold is enough: access is granted to the Zernio app, not per scope.
Rows come back in LinkedIn's raw shape under data. paging.after is the next offset (null on the last page) and paging.total is the number of matching ads.
const { data } = await zernio.adlibrary.searchAdLibrary({
query: {
accountId: 'ACCOUNT_ID',
advertiser: 'Microsoft',
countries: 'DE',
since: '2026-06-01',
limit: 25,
},
});
for (const ad of data.data) {
console.log(ad.details.advertiser.advertiserName, ad.details.type, ad.adUrl);
}page = client.ad_library.search_ad_library(
account_id="ACCOUNT_ID",
advertiser="Microsoft",
countries="DE",
since="2026-06-01",
limit=25,
)
for ad in page.data:
print(ad.details.advertiser.advertiser_name, ad.details.type, ad.ad_url)curl "https://zernio.com/api/v1/ads/library?accountId=ACCOUNT_ID&advertiser=Microsoft&countries=DE&since=2026-06-01&limit=25" \
-H "Authorization: Bearer YOUR_API_KEY"What is in the archive
Every ad served on LinkedIn after June 1 2023, worldwide, kept for one year after its last impression. New ads show up 24 to 48 hours after their first impression.
Each row carries adUrl (the public detail page with the creative), isRestricted, and details with the ad type (SPONSORED_STATUS_UPDATE, SPONSORED_VIDEO, ...) and the advertiser (advertiserName, advertiserUrl, and the disclosed adPayer when it differs).
Ads delivered to the EU also carry the DSA transparency data: adStatistics (firstImpressionAt, latestImpressionAt, totalImpressions as a from/to range, impressionsDistributionByCountry) and adTargeting, one entry per facet (Language, Location, Company, Job, ...) with the included and excluded segments. Ads that never reached the EU have an empty adTargeting and no adStatistics.
Searching
| Param | Notes |
|---|---|
q | Keyword search over the ad text. |
advertiser | Advertiser (Page) name. Combine with q to narrow one advertiser's ads. |
countries | ISO alpha-2 codes the ads reached, comma-separated. Omit to search every market (ALL is Meta-only and rejected here). |
since / until | Delivery window, YYYY-MM-DD. Either bound alone is fine; Zernio fills the other one. |
limit / after | At most 25 rows per page (LinkedIn's cap; more is a 400). Pass paging.after back for the next page. |
The Meta-only filters (pageIds, adType, status, platforms, mediaType, languages, searchType, fields) are a 400 naming the param on a LinkedIn account.
Errors
| Response | Meaning |
|---|---|
400 with LinkedIn's message | LinkedIn rejected the query (an unknown country, a page over 25). The message is passed through verbatim. |
403 linkedin_reconnect_required | The token expired. Reconnect the LinkedIn account. |
403 mentioning partnerApiAdTransparencyCreativeEntities | The token was issued by an app without Ad Library access. Only tokens from the Zernio app qualify. |