LinkedIn Ads Scraper (Ad Library)
Pricing
from $1.50 / 1,000 ad founds
LinkedIn Ads Scraper (Ad Library)
Scrape LinkedIn public Ad Library ads by advertiser, payer, keyword, country and date range. Extract ad copy, creatives, advertiser details, payer info and pagination diagnostics. No login or cookies required. MCP/API-ready.
Pricing
from $1.50 / 1,000 ad founds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
10
Total users
4
Monthly active users
3 days ago
Last modified
Categories
Share
LinkedIn Ads Scraper - Public Ad Library
Use this Apify Actor to search LinkedIn's public Ad Library by advertiser, payer, keyword, country, and date range. It accepts focused search terms or single-query aliases, then returns one dataset record per ad found. Each record can include ad identity, advertiser details, payer info, creative metadata, search provenance, and optional transparency fields from the public detail page. This Actor is usable through Apify MCP and works without a LinkedIn login or cookies.
Best fit and connected workflows
This Actor fits workflows that start with a public ad search and end with a structured dataset for review, enrichment, or automation. It is a strong fit for:
- Competitor ad monitoring by advertiser or payer name.
- Creative reference collection from public headlines, copy, and media URLs.
- Keyword-based discovery of B2B ad language in the public Ad Library.
- EU transparency review when LinkedIn exposes ad run dates, impression ranges, and targeting summary fields.
- AI and automation workflows that need a compact, machine-readable ad record set through Apify MCP.
Because each record includes search provenance and page information, the dataset can feed downstream reporting, table views, and agent workflows that need traceable public-source ad records.
Practical scenario
Maya is reviewing public LinkedIn ads for a B2B software category. She starts with a company name from a competitor list, selects accountOwner search mode, keeps the country filter on US, and limits the run to recent ads. The returned records show the advertiser name, headline, ad copy, creative type, source URL, and page number. Maya uses the advertiser and creative fields to compare messaging, then opens the adUrl for any records that warrant a closer look.
What it returns
One dataset item represents one LinkedIn Ad Library ad. All records include stable IDs, the public detail URL, advertiser fields when available, copy and creative metadata, filter provenance, and scrape time. Enabling fetchAdDetails can add payer, ad format, and EU transparency information when LinkedIn makes those fields available on the ad detail page.
| Field group | Key fields |
|---|---|
| Identity | adId, adUrl, advertiserName, payerName |
| Creative | creativeType, adFormat, headline, adCopy, bodyText, creativeImageUrl, videoPosterUrl |
| EU transparency, where available | adRunStart, adRunEnd, estimatedImpressions, impressionCountries, targetingSummary |
| Provenance | searchTerm, searchMode, searchCountries, dateOption, pageNumber, sourceUrl, scrapedAt |
LinkedIn retains eligible Ad Library ads for one year after their last impression and exposes extra dates, estimated impressions, and targeting information for ads targeted to the European Union. Fields unavailable on a particular public ad remain null or empty rather than being inferred. See LinkedIn's Ad Library Help for the source product context.
Input fields
| Field | Type | Purpose |
|---|---|---|
searchTerms | array of strings | Advertiser names, payer names, or ad-copy keywords to search in the public Ad Library. |
query | string | Single-search alias for API and MCP callers. Ignored when searchTerms is provided. |
keyword | string | Single-keyword alias for API callers. Ignored when searchTerms or query is provided. |
searchMode | string | Match search terms as advertiser/company name, payer name, or keyword in ad copy. |
countries | array of strings | ISO country codes for the served countries filter, or ALL. |
country | string | Single-country alias for API and MCP callers. Ignored when countries is provided. |
dateOption | string | LinkedIn date filter such as last-30-days, current-month, current-year, or last-year. |
startDate | string | Custom start date in YYYY-MM-DD format. |
endDate | string | Custom end date in YYYY-MM-DD format. |
sortOrder | string | Result ordering: newest to oldest or oldest to newest. |
maxResults | integer | Hard cap on saved and billable ad records across all searches. |
maxPagesPerSearch | integer | Safety cap on pagination per search term. |
startPaginationToken | string | Resume a single search from a later LinkedIn page using a prior summary token. |
fetchAdDetails | boolean | Fetch public detail pages for richer fields such as ad format, payer name, advertiser profile URL, and fuller copy when available. |
outputMode | string | full or compact output shape for tables, automations, and AI agents. |
delayMs | integer | Delay between pagination requests. |
Focused JSON example
{"searchTerms": ["monday", "crm software"],"searchMode": "accountOwner","countries": ["US", "GB"],"dateOption": "last-year","sortOrder": "DESCENDING","maxResults": 50,"maxPagesPerSearch": 10,"fetchAdDetails": true,"outputMode": "compact","delayMs": 350}
Output fields
Each dataset item represents one LinkedIn Ad Library ad.
| Field | Type | Meaning |
|---|---|---|
adId | string | Unique LinkedIn Ad Library numeric ad identifier. |
adUrl | string | LinkedIn Ad Library detail URL. |
creativeType | string or null | Creative type code from the ad card. |
adFormat | string or null | Human-readable ad format from the detail page when enrichment is enabled. |
advertiserName | string or null | Company, page, or profile shown as the advertiser. |
payerName | string or null | Entity shown as paid for by on the detail page when available. |
adRunStart | string or null | Start date LinkedIn reports for this ad when transparency data is available. |
adRunEnd | string or null | End date LinkedIn reports for this ad when transparency data is available. |
estimatedImpressions | string or null | LinkedIn's disclosed total-impression range for eligible ads. |
impressionCountries | array | Country-level impression shares disclosed by LinkedIn. |
targetingSummary | array | Top targeting parameters LinkedIn discloses for eligible ads. |
advertiserLogoUrl | string or null | Advertiser logo image URL. |
advertiserLinkedInUrl | string or null | LinkedIn company or profile URL linked from the ad. |
headline | string or null | Ad headline or primary creative title. |
adCopy | string or null | Primary ad commentary text. |
bodyText | string or null | Secondary ad body text or description when present. |
creativeImageUrl | string or null | Main creative image or thumbnail URL. |
videoPosterUrl | string or null | Video poster image URL when the creative is video. |
ariaLabel | string or null | Semantic label from LinkedIn's ad card. |
searchTerm | string or null | Input search term that produced this record. |
searchMode | string or null | Search mode used for this record. |
searchCountries | array of strings | Countries filter used for this record. |
dateOption | string or null | LinkedIn date option used for this record. |
pageNumber | integer or null | LinkedIn result page number for this search term. |
sourceUrl | string or null | Search or pagination URL used to discover the ad. |
source | string | Data source label. |
scrapedAt | string | ISO timestamp when the record was scraped. |
Illustrative JSON record
{"adId": "1100687363","adUrl": "https://www.linkedin.com/ad-library/detail/1100687363","creativeType": "SPONSORED_STATUS_UPDATE","adFormat": "Single Image Ad","advertiserName": "Restaurant365","payerName": "DYN365, Inc.","adRunStart": "2025-12-30","adRunEnd": "2026-02-11","estimatedImpressions": "5k-10k","impressionCountries": [{"country": "Germany","share": "100%"}],"targetingSummary": [{"category": "Location","detail": "Targeting includes Germany"}],"advertiserLogoUrl": "https://media.licdn.com/dms/image/...","advertiserLinkedInUrl": "https://www.linkedin.com/company/2366033","headline": "Real-Time Insights for QSR","adCopy": "Manual reports do not scale. Real-time insights do.","bodyText": "Trusted by 40,000+ restaurants.","creativeImageUrl": "https://media.licdn.com/dms/image/...","videoPosterUrl": null,"ariaLabel": "Restaurant365, Single Image Ad, View details","searchTerm": "monday","searchMode": "accountOwner","searchCountries": ["US"],"dateOption": "last-year","pageNumber": 1,"sourceUrl": "https://www.linkedin.com/ad-library/search?accountOwner=monday&countries=US","source": "linkedin-ad-library","scrapedAt": "2026-06-08T12:00:00.000Z"}
How it works
The Actor searches LinkedIn's public Ad Library using the provided terms and filters. It supports advertiser, payer, and keyword matching, plus country and date filters. Results are saved as one dataset item per ad and can include pagination provenance such as page number and source URL. When fetchAdDetails is enabled, the Actor also visits the public ad detail page to enrich records with detail-page fields when LinkedIn exposes them. The run summary in the default key-value store includes saved count, stop reason, pages fetched, next pagination token, request diagnostics, and billing counters.
The Actor also exposes structured output that can be read directly through the Apify API or used via Apify MCP.
Pricing
This Actor uses Pay per event plus standard Apify platform usage. Open the live Pricing tab on the Actor page for the current event rates and platform usage details.
Charged events:
Actor Startfor execution initialization.Ad foundfor each saved LinkedIn Ad Library ad.Detail page enrichedfor each successfully fetched public ad detail page.
Example: if a run saves ten ads and enriches four of them, billing includes ten Ad found events, four Detail page enriched events, the Actor Start event, and Apify platform usage.
Use with AI agents (MCP)
This Actor is an Apify Actor usable through Apify MCP. It returns structured LinkedIn public Ad Library records that agents can filter, summarize, compare, or route into downstream workflows.
Tool description: Search LinkedIn public ads by advertiser, payer, keyword, country, and date range, then return dataset records with provenance and optional detail-page enrichment.
Actor identity: khadinakbar/linkedin-ads-scraper
Find public LinkedIn ads for the advertiser "monday" in the US, sort newest first, keep the output compact, and return the ad records with any available advertiser and creative fields.
Output interpretation:
- Use
adIdandadUrlas stable record identifiers. - Use
advertiserName,payerName,headline, andadCopyfor message review. - Use
creativeImageUrlorvideoPosterUrlfor creative inspection. - Use
adRunStart,adRunEnd,estimatedImpressions, andtargetingSummarywhen transparency fields are available. - Use
searchTerm,searchMode,searchCountries,dateOption,pageNumber, andsourceUrlto trace how each record was found.
Provenance, scope, pagination, and cost guidance:
- The Actor uses LinkedIn's public Ad Library only.
- It returns one dataset record per saved ad.
startPaginationTokencan resume a single search from a later page.maxPagesPerSearchandmaxResultshelp bound pagination and total saved records.fetchAdDetailsadds public detail-page enrichment and an extra charged event per successful enrichment.summaryandrunSummaryprovide machine-readable execution diagnostics for agent routing.
Apify API example
import { ApifyClient } from "apify-client";const client = new ApifyClient({token: process.env.APIFY_TOKEN,});const input = {query: "monday",searchMode: "accountOwner",countries: ["US"],dateOption: "last-year",maxResults: 10,fetchAdDetails: false,outputMode: "compact",};const run = await client.actor("khadinakbar/linkedin-ads-scraper").call(input);console.log("Run finished:", run.id);const datasetId = run.defaultDatasetId;const { items } = await client.dataset(datasetId).listItems({ clean: true });console.log(items);
Best results and outcome guidance
Use focused search terms that match how LinkedIn labels the advertiser, payer, or ad copy. Start with a narrow country filter and a recent date range when reviewing current ads. Use DESCENDING when you want the newest public ads first, and ASCENDING when you are building a historical review set. Keep maxResults aligned with the number of records you need, and raise maxPagesPerSearch when the search term is broad. Enable fetchAdDetails when you need payer, format, or transparency fields from public detail pages.
Continue the workflow
- Then use LinkedIn Comments Scraper - No Cookies to add Linkedin engagement evidence to records selected with LinkedIn Ads Scraper - Public Ad Library.
- Then use LinkedIn Company Details Scraper to extend LinkedIn Ads Scraper - Public Ad Library research with a complementary enrichment contract.
Design note
I found that the output contract always requires adId, adUrl, and scrapedAt, while the richer fields remain optional or null when LinkedIn does not expose them.
FAQ
How should I choose between searchTerms, query, and keyword?
Use searchTerms for multi-term searches. Use query or keyword when you need a single alias field for API or MCP callers.
When should I use searchMode = accountOwner?
Use it when your starting point is a company or advertiser name. That is the natural fit for competitor-ad monitoring.
When should I use searchMode = payer?
Use it when the payer name matters more than the advertiser label, especially for agency-managed or entity-specific ad research.
When should I use searchMode = keyword?
Use it when you are looking for phrases inside public ad copy or related creative text.
What does fetchAdDetails add?
It enriches records from public detail pages with fields such as adFormat, payerName, advertiserLinkedInUrl, and fuller copy when LinkedIn exposes them.
How do I review the run output?
Read the dataset for ad records and the default key-value store for the run summary. The detailed run summary includes pagination state, provider route, and billing counters.
Responsible use
This Actor accesses LinkedIn's public Ad Library only. Use it for public ad research, creative review, and transparency analysis. Keep searches aligned with publicly disclosed ad data and review LinkedIn's terms and the source pages that provide the records.