LinkedIn Ad Library Search Scraper avatar

LinkedIn Ad Library Search Scraper

Pricing

from $6.00 / 1,000 ad records

Go to Apify Store
LinkedIn Ad Library Search Scraper

LinkedIn Ad Library Search Scraper

Search public LinkedIn Ad Library ads by advertiser or keyword, with normalized creatives and EU transparency fields.

Pricing

from $6.00 / 1,000 ad records

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

9 days ago

Last modified

Share

What is LinkedIn Ad Library Search Scraper?

LinkedIn Ad Library Search Scraper is an Apify Actor for searching public LinkedIn Ad Library ads by advertiser name or creative keyword. It accepts advertiser lists, keyword lists, country filters, date boundaries, pagination controls, optional detail enrichment, provider preference, and response format. Each saved dataset item is one normalized public ad record with creative fields, provenance fields, and eligible EU transparency fields. The Actor is usable through Apify and through Apify MCP for structured ad discovery and downstream automation.

Best fit and connected workflows

This Actor fits workflows that start with a public advertiser name or a creative phrase and end with structured ad records ready for review, enrichment, or handoff.

Good fits include:

  • Competitive research on public LinkedIn ads by advertiser name.
  • Creative discovery from product or category keywords.
  • EU transparency review using run dates, impression ranges, and targeting summary fields.
  • AI-agent workflows that need bounded public ad records through Apify MCP.
  • Follow-up enrichment with LinkedIn profile data after a public advertiser or ad URL is identified.

A natural workflow connection is:

  1. Search public ads here by advertiser or keyword. a bounded number of Review adId, adUrl, headline, cta, and transparency fields.
  2. Pass the returned public URL or ID into a downstream LinkedIn workflow when you need profile-level or post-level context.

Related Actors:

  • Use LinkedIn Profile Scraper & Email Finder 📧 ✅ No Login Required for enrichment after discovery when you have a returned public URL or ID.
  • Use LinkedIn Profile Posts Scraper for post-level context after discovery when you have a returned public URL or ID.

Practical scenario

Maya, a marketing analyst, starts with the advertiser name HubSpot and a country filter of US and DE. She sets maxResults to 10 and keeps fetchAdDetails on to retrieve additional public transparency fields when available. The run returns records with headline, adType, cta, adUrl, adRunStart, estimatedImpressions, and targetingSummary. Maya uses the returned adUrl and creative text to compare message themes, then opens the ads that look relevant for a deeper review.

Input fields

FieldTypePurpose
advertisersarray of stringsSearch by public advertiser display names such as Microsoft or HubSpot.
keywordsarray of stringsSearch by creative phrases such as CRM software or data warehouse.
countriesarray of stringsLimit results to ISO alpha-2 country codes reported by the Ad Library.
startDatestringSet the beginning of the reported ad run window using YYYY-MM-DD.
endDatestringSet the end of the reported ad run window using YYYY-MM-DD.
maxResultsintegerCap the number of normalized ad records persisted in the run.
maxPagesPerSearchintegerBound provider pagination for each advertiser or keyword search.
fetchAdDetailsbooleanRequest optional detail enrichment for each saved ad record.
providerPreferencestringChoose whether the routing options listed in the input schema is tried first.
responseFormatstringChoose concise or detailed record shape for saved ads.

Focused input example

{
"advertisers": ["Microsoft", "HubSpot"],
"countries": ["US", "DE"],
"startDate": "2026-01-01",
"endDate": "2026-06-30",
"maxResults": 10,
"maxPagesPerSearch": 2,
"fetchAdDetails": true,
"responseFormat": "detailed"
}

Output fields

FieldMeaning
adIdStable public LinkedIn Ad Library identifier.
adUrlPublic LinkedIn Ad Library detail URL.
advertiserNameDisclosed advertiser display name, when available.
advertiserLinkedInUrlPublic company URL, when returned.
headlinePrimary public headline from the ad creative.
descriptionPublic ad body text from the provider response.
adTypeReported creative format such as Single Image Ad.
ctaPublic call-to-action label, when available.
destinationUrlPublic landing-page URL linked from the ad.
imageUrlPrimary public image URL, when returned.
videoUrlPrimary public video URL, when returned.
carouselImageUrlsBounded carousel image URLs in detailed mode.
adRunStartReported start time for eligible public ads.
adRunEndReported end time for eligible public ads.
estimatedImpressionsLinkedIn's disclosed impression range.
impressionCountriesBounded country-level impression shares for eligible ads.
targetingSummaryBounded public targeting categories for eligible ads.
searchTypeWhether the record came from an advertiser or keyword search.
searchTermThe advertiser or keyword that returned the record.
searchCountriesCountry filter sent to the provider.
sourceProviderProvider route that returned the search result.
detailProviderProvider route that returned optional detail enrichment.
detailsFetchedIndicates whether optional detail enrichment succeeded.
scrapedAtISO timestamp when the record was persisted.

Illustrative output record

{
"adId": "1174793313",
"adUrl": "https://www.linkedin.com/ad-library/detail/1174793313",
"advertiserName": "Microsoft",
"advertiserLinkedInUrl": "https://www.linkedin.com/company/1035",
"headline": "Explore Microsoft Fabric",
"description": "Learn more about data and analytics.",
"adType": "Single Image Ad",
"cta": "Learn more",
"destinationUrl": "https://example.com/",
"imageUrl": "https://media.licdn.com/dms/image/example",
"videoUrl": null,
"carouselImageUrls": [],
"adRunStart": "2026-02-06T00:00:00.000Z",
"adRunEnd": "2026-02-08T00:00:00.000Z",
"estimatedImpressions": "5k-10k",
"impressionCountries": [
{
"country": "Germany",
"impressions": "100%"
}
],
"targetingSummary": [
{
"category": "location",
"detail": "Targeting includes Germany"
}
],
"searchType": "advertiser",
"searchTerm": "Microsoft",
"searchCountries": ["US"],
"detailsFetched": true,
"scrapedAt": "2026-07-14T17:30:00.000Z"
}

How it works

The Actor searches the public LinkedIn Ad Library using provider-backed collection and normalized output. It supports advertiser searches and creative keyword searches. Country filters are passed together to each search. maxPagesPerSearch bounds provider pagination for each query, while maxResults caps how many normalized ad records are saved and billed. If fetchAdDetails is enabled, the Actor can make a second verified provider call per saved ad to enrich public transparency fields. providerPreference selects which configured provider is attempted first, with the other configured provider used after a route interruptions. Output is written to the dataset, and terminal run details are stored in key-value store records.

The live manifest uses provider API keys supplied by the Apify environment:

Pricing

This Actor uses Pay per event plus Apify platform usage. Platform usage is billed separately by Apify, and the live Pricing tab shows the current pricing details for each run.

Events:

  • Actor start: charged once per run.
  • Ad record: charged when one normalized public LinkedIn Ad Library record is saved to the dataset.
  • Ad detail enrichment: charged only after optional detail enrichment succeeds for a saved ad record.

For example, a run that saves ten ads and enriches all ten with optional details triggers ten Ad record events and ten Ad detail enrichment events, plus one Actor start event, along with Apify platform usage. A search-only run at the same cap triggers only the Ad record events, plus platform usage. See the live Pricing tab for the current pricing view.

Use with AI agents (MCP)

This Actor is usable through Apify MCP as a tool for structured public LinkedIn Ad Library search. The exact Actor identity is khadinakbar/linkedin-ad-library-search-scraper.

Tool description:

  • Search public LinkedIn Ad Library ads by advertiser or keyword.
  • Return normalized ad records with creative fields and, when available, EU transparency fields.
  • Support bounded pagination and record caps so agents can control cost and output size.

Search public LinkedIn Ad Library ads for HubSpot in US and DE, save up to 5 records, and return detailed records if available. Then summarize the most repeated headline themes and list the ad URLs.

Output interpretation:

  • Use adId and adUrl as stable public record identifiers.
  • Use searchType, searchTerm, and searchCountries for provenance.
  • Use detailsFetched, sourceProvider, and detailProvider to understand the collection path.
  • Use estimatedImpressions, impressionCountries, and targetingSummary as public transparency signals when returned.

Provenance and scope:

  • The Actor returns public LinkedIn Ad Library data only.
  • It does not expose credentials or private advertiser data.
  • responseFormat: concise keeps each record smaller for agent workflows.
  • responseFormat: detailed includes bounded media and targeting arrays when returned by the provider.

Pagination and cost guidance:

  • Set maxResults to the number of records your agent actually needs.
  • Use maxPagesPerSearch to bound breadth for each advertiser or keyword.
  • Enable fetchAdDetails when the workflow needs richer public transparency fields and accepts the extra successful detail-enrichment event.

Apify API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const run = await client.actor('khadinakbar/linkedin-ad-library-search-scraper').call({
keywords: ['CRM software'],
countries: ['US'],
maxResults: 5,
fetchAdDetails: true,
responseFormat: 'concise',
});
const dataset = await client.dataset(run.defaultDatasetId).listItems();
console.log('Dataset items:', dataset.items);

Best results and outcome guidance

Start with one advertiser or one keyword, then expand only after the first result set is useful. Keep maxPagesPerSearch small when testing a new query. Use advertisers when you already know the company name; use keywords when you want creative discovery around a product phrase. Add countries when the workflow depends on reported country scope. Use fetchAdDetails when transparency fields matter to the next decision. Choose detailed when the workflow needs bounded media and targeting arrays in the returned dataset.

Continue the workflow

Design note

I found that the dataset contract keeps adId, adUrl, searchType, searchTerm, sourceProvider, detailsFetched, and scrapedAt required for every saved record, which makes provenance visible even when some creative or transparency fields are null.

FAQ

Can I search by advertiser name and keyword in the same run?

Yes. Supplying both creates independent searches, which keeps the returned records easy to trace back to the original query.

What should I use when I only know a product phrase?

Use keywords. That is the clearest path when you want public ads containing a phrase such as CRM software or data warehouse.

How does this Actor connect to other LinkedIn workflows?

Use this Actor first to discover public ads, then pass the returned public URL or ID into the verified LinkedIn profile enrichment Actors when your workflow needs downstream context.

What records are saved?

One dataset item equals one normalized public ad record. Fields may be null or empty when the provider did not return them, but the record structure stays stable.

How do I reduce the scope of a run?

Use a smaller maxResults, a smaller maxPagesPerSearch, a narrower country list, or a single advertiser or keyword.

Responsible use

Use the Actor for public Ad Library research, analysis, and automation that fits your legal, contractual, and privacy obligations. The output reflects public records returned by provider-backed collection and may vary by country, time window, and the fields disclosed for a given ad. Review the returned URLs and transparency fields in your own workflow before making decisions.