Scrape public LinkedIn Ad Library search results and ad detail pages for competitive advertising research. Export LinkedIn ad creatives, advertiser names, payer names, ad URLs, creative text, CTA/headline signals, media URLs, run-date text, impression ranges, targeting text, and monitoring metadata.
Who is it for
This Actor is for B2B marketers, agencies, ad operations teams, founders, and competitive-intelligence analysts who need repeatable exports from the public LinkedIn Ad Library.
What you can use it for
- Monitor competitor LinkedIn campaigns weekly.
- Collect new ad creative and messaging for B2B competitive intelligence.
- Export public LinkedIn ad transparency data for agency reporting.
- Track paid-by entities and advertiser pages from official LinkedIn Ad Library URLs.
- Build a lightweight LinkedIn Ad Library API workflow by running saved inputs on a schedule and reading the dataset through the Apify API.
- Compare LinkedIn ads library results across multiple keywords and countries to collect LinkedIn ad examples for creative research.
This Actor uses public anonymous LinkedIn Ad Library pages only. It does not log in, access Campaign Manager, scrape private profiles, or collect member-only data.
Ready-to-run Store examples
Use these public Apify Store examples when you want a saved task with safe, bounded inputs and a preview dataset:
- B2B SaaS LinkedIn ads research — export recent US LinkedIn Ad Library creatives for B2B SaaS messaging research.
- LinkedIn fintech ads in the UK — compare UK fintech advertisers, creative types, public ad-library URLs, and copy themes.
- LinkedIn CRM ads research — monitor CRM competitors and capture advertiser names, ad URLs, creative text, and media signals.
- LinkedIn AI startup ads — collect public AI startup ad examples for positioning and campaign research.
- LinkedIn cybersecurity ads — review cybersecurity campaign messages and advertiser transparency fields.
Each example is intentionally capped for quick validation and points to LinkedIn Ad Library ad URLs rather than unavailable destination landing-page URLs.
Input recipes from verified Store examples
These are the same bounded inputs used by the public Store examples above. QA verified each example task with 20 unique ad records and matching item charge events.
B2B SaaS LinkedIn ads research
{
"keyword": "b2b saas",
"countries": ["US"],
"dateOption": "last-30-days",
"maxAds": 20
}
LinkedIn fintech ads in the UK
{
"keyword": "fintech",
"countries": ["GB"],
"dateOption": "last-30-days",
"maxAds": 20
}
LinkedIn CRM ads research
{
"keyword": "crm",
"countries": ["US"],
"dateOption": "last-30-days",
"maxAds": 20
}
LinkedIn AI startup ads
{
"keyword": "AI startup",
"countries": ["US"],
"dateOption": "last-30-days",
"maxAds": 20
}
LinkedIn cybersecurity ads
{
"keyword": "cybersecurity",
"countries": ["US"],
"dateOption": "last-30-days",
"maxAds": 20
}
Input fields
startUrls- Official LinkedIn Ad Library search URLs to process.keyword- Keyword for the public Ad Library search builder.advertiser- Optional account owner filter.payer- Optional paid-by filter.countries- ISO country codes, for exampleUS,GB,CA,AU.dateOption-last-30-days,last-6-months,last-year, orany-time.changedSince- Optional ISO timestamp for incremental monitoring labels.maxAds- Maximum unique ad detail records to save.requestDelayMs- Delay between detail requests to reduce rate limiting.proxyConfiguration- Apify Proxy settings. Proxy use is recommended for larger runs.
Output
Each dataset item represents one public LinkedIn ad and can include:
adIdadUrlsearchUrladvertiserNameadvertiserUrlpayerNamecreativeTextheadlinecallToActioncreativeTypemediaUrlsactiveDatesTextimpressionsTexttargetingTextfirstSeenAtlastSeenAtchangeType
The Actor also writes a RUN-SUMMARY key-value-store record with saved counts and processed search URLs.
API Usage
Use scheduled Apify tasks for weekly monitoring, then export the dataset as JSON, CSV, Excel, or through the Apify API. The RUN-SUMMARY key-value-store record is useful for automations that need saved counts and processed source URLs.
Node.js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/linkedin-ad-library-scraper').call({
keyword: 'crm',
countries: ['US'],
dateOption: 'last-30-days',
maxAds: 20
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
Python
from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/linkedin-ad-library-scraper').call(run_input={
'keyword': 'crm',
'countries': ['US'],
'dateOption': 'last-30-days',
'maxAds': 20,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
cURL
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~linkedin-ad-library-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"keyword":"crm","countries":["US"],"dateOption":"last-30-days","maxAds":20}'
MCP
You can use this Actor from MCP-capable tools through Apify's Actor integration. Pass the same JSON input you would use in Console and read the default dataset items after the run succeeds.
Add the Apify MCP server to Claude Desktop or Claude Code:
claude mcp add apify -- npx -y @apify/actors-mcp-server --actors fetch_cat/linkedin-ad-library-scraper
Example MCP server JSON configuration:
{
"mcpServers": {
"apify": {
"command": "npx",
"args": ["-y", "@apify/actors-mcp-server", "--actors", "fetch_cat/linkedin-ad-library-scraper"],
"env": {
"APIFY_TOKEN": "your-apify-token"
}
}
}
}
Example prompts:
- "Run the LinkedIn Ad Library Scraper for keyword crm in the US and return the first 20 ad records."
- "Scrape this LinkedIn Ad Library search URL and summarize repeated CTA themes from the output dataset."
Legality and responsible use
This Actor collects information from public LinkedIn Ad Library pages. Use the results for lawful competitive research, transparency analysis, and reporting. Do not use the output to identify private individuals, bypass access controls, or violate LinkedIn terms that apply to your use case.
Support
If a run returns fewer ads than expected, try a broader keyword, a longer date range, or official search URLs copied from LinkedIn. For persistent failures, open an Apify issue with the run ID and input so the scraper can be adjusted to LinkedIn's current public HTML.
Notes and limits
LinkedIn may rate-limit or change public Ad Library HTML. The Actor retries transient 429/5xx responses, skips failed detail pages while preserving successful ads, and logs warnings for empty searches. For large monitoring jobs, use multiple specific search URLs and keep a moderate request delay.