LinkedIn Ad Library Scraper

Scrape public LinkedIn Ad Library ads by keyword, advertiser, country, and official search URLs.

Data fields

FieldTypeDescription
adIdtextAd ID exported in the dataset view.
adUrllinkAd URL exported in the dataset view.
advertiserNametextAdvertiser exported in the dataset view.
payerNametextPaid by exported in the dataset view.
creativeTexttextCreative text exported in the dataset view.
headlinetextHeadline exported in the dataset view.
callToActiontextCTA exported in the dataset view.
creativeTypetextCreative type exported in the dataset view.

Input preview

startUrlsOfficial Ad Library search URLs
keywordKeyword
advertiserAdvertiser / account owner
payerPayer name
countriesCountries
dateOptionDate range

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

Ready-to-run examples

Open a saved Apify example, adjust the input, and run the actor in your own Apify account.

View all examples

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

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:

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 example US, GB, CA, AU.
  • dateOption - last-30-days, last-6-months, last-year, or any-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:

  • adId
  • adUrl
  • searchUrl
  • advertiserName
  • advertiserUrl
  • payerName
  • creativeText
  • headline
  • callToAction
  • creativeType
  • mediaUrls
  • activeDatesText
  • impressionsText
  • targetingText
  • firstSeenAt
  • lastSeenAt
  • changeType

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.

Common questions

Questions and answers reused from the canonical actor README.

How can I scrape LinkedIn Ad Library ads by keyword?

Set keyword, choose one or more countries, select dateOption, and set maxAds. You can also paste official LinkedIn Ad Library search URLs into startUrls for exact searches.

Can I export competitor LinkedIn ad creatives and payer data?

Yes. Each output row includes the public ad URL, advertiser fields, payer name when LinkedIn exposes it, creative text, media URLs, creative type, and available transparency text.