# LinkedIn Ad Library Scraper: Ads, Impressions, Targeting (`themineworks/linkedin-ad-library-scraper`) Actor

Scrape LinkedIn Ad Library ads by advertiser, keyword or payer, with country and date filters. Get text, headline, CTA, images, video, documents, carousel cards, payer, run dates, impressions by country and targeting. No login, no cookies.

- **URL**: https://apify.com/themineworks/linkedin-ad-library-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Marketing, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.79 / 1,000 ads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## LinkedIn Ad Library Scraper: Ads, Impressions, Targeting

[![240 LinkedIn ads with full details in 104 seconds](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/linkedin-ad-library-scraper-hero.png)](https://console.apify.com/actors/Ebwjm0Af0zvd5eeCk/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

From **The Mine Works**, makers of [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) and [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), with over 140,000 runs across 170+ public actors.

### Why choose this actor?

- **Search the whole LinkedIn Ad Library the way the site does.** By advertiser, keyword or "Paid for by" name, filtered by country, date range and order. Our proof run returned **240 ads from 4 searches (HubSpot, Salesforce, SAP and the keyword "cybersecurity") in 104 seconds, every one with its detail page read**. No LinkedIn account, no cookies, no browser.
- **The transparency data, not just the creative.** With details on, each ad carries the advertiser's LinkedIn link, the legal entity that paid, the full text, the call to action, the landing page when LinkedIn shows it, the video file and document pages, and, where LinkedIn publishes them, the run dates, total impressions, impressions by country and the targeting the advertiser chose. Filtered to Germany and France, **60 of 60 ads came back with all of it**.
- **You pay for ads you receive, and details only when you ask for them.** One charge per ad saved to your dataset, one more when its detail page was read, plus a flat start fee. Searches with no results, refused pages, an ad found twice in the same run, ad links LinkedIn cannot show and ads an earlier run already gave you (when you switch that on) are never charged.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/Ebwjm0Af0zvd5eeCk/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Part of The Mine Works LinkedIn family:** [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [LinkedIn Email Finder](https://apify.com/themineworks/linkedin-email-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [LinkedIn Newsletter Scraper](https://apify.com/themineworks/linkedin-newsletter-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral).

### Try it in one minute

Paste this input and press Start. It returns HubSpot's 20 newest ads with their detail pages, 20 rows, in about 15 seconds:

```json
{
  "advertisers": ["HubSpot"],
  "maxAdsPerSearch": 20
}
```

You can tell the actor what to find in five ways, and mix them in one run:

- **Advertisers**: names as you would type them in the Ad Library's "Company or advertiser" box, such as `HubSpot` or `Siemens`. A company page link (`https://www.linkedin.com/company/hubspot/`) also works; its page name is searched.
- **Keywords**: a word or phrase from the ad text, such as `CRM` or `webinar`.
- **Payers**: the "Paid for by" name, such as `HubSpot, Inc.`, to find every ad a legal entity paid for, whichever page ran it.
- **Ad Library search links**: copy the address bar after searching on `https://www.linkedin.com/ad-library/`; the link runs with its own filters.
- **Ad links or ids**: `https://www.linkedin.com/ad-library/detail/1566665103` or just `1566665103`, to read single ads with their details.

Apify's free plan includes $5 of credit every month, which covers about 3,200 results at this actor's price.

#### Copy to your AI assistant

```text
themineworks/linkedin-ad-library-scraper on Apify. Searches LinkedIn's public Ad Library by advertiser, keyword or payer, with country, date range and sort filters, and returns one row per ad: advertiser name, LinkedIn link and id, payer, format, headline, full text, call to action, landing page, image, video and document links, carousel cards, run dates, total impressions, impressions by country and targeting. Call ApifyClient("TOKEN").actor("themineworks/linkedin-ad-library-scraper").call(run_input={"advertisers": ["HubSpot"], "keywords": ["CRM"], "countries": ["DE", "FR"], "maxAdsPerSearch": 50}), then client.dataset(run["defaultDatasetId"]).list_items().items. Give at least one of: advertisers, keywords, payers, adLibraryUrls (search links, ad links or ad ids). Optional: countries (two letter codes, default all), dateRange (all, last-30-days, current-month, current-year, last-year, custom; default all), startDate and endDate (YYYY-MM-DD, for custom), sortOrder (newest or oldest, default newest), maxAdsPerSearch (default 50, 20 to 1000), includeAdDetails (default true), onlyNewAds (default false). Skip rows that have "_type": "info". Full spec: GET https://api.apify.com/v2/acts/themineworks~linkedin-ad-library-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
```

### Key features

- **52 fields per ad**: ad id and link; advertiser name, LinkedIn link, id, type and logo; payer; the member behind a thought leader ad; format; headline, full text, description, call to action and landing page; images, video, document pages, carousel cards; run dates; impressions as a range and by country; targeted and excluded languages, locations and parameters; and which search found the ad, at what position, out of how many.
- **Every Ad Library filter**: advertiser, keyword and payer boxes; one or many countries (all 249 the site offers); last 30 days, current month, current year, last year or a custom range; newest or oldest first.
- **Up to 1,000 ads per search, 100 searches per run.** LinkedIn serves 24 ads per page; the actor asks for the next pages the same way the Ad Library page does when you scroll. Our deep run read 42 pages of one keyword search and delivered 1,000 distinct ads.
- **Every ad format we met**: single image, video, carousel, document, article, text, spotlight, message, event and job ads, each with the fields that format has.
- **Only new ads on repeat runs**: switch on `onlyNewAds` for a schedule and each run returns, and charges, only ads no earlier run in your account delivered. In our test the second run delivered 0 ads and stopped after one request.

### How to use it

#### Basic: one advertiser's latest ads

```json
{
  "advertisers": ["Salesforce"],
  "maxAdsPerSearch": 100
}
```

You get up to 100 rows, newest first. LinkedIn matches advertiser names loosely, the same as on its own site, so a search for Salesforce also returns ads from pages such as "Salesforce Data 360" and from Salesforce executives whose posts Salesforce promotes (thought leader ads, with the member in `posted_by_name`). Filter on `advertiser_id` or `paid_by` when you want one exact advertiser, or search by payer, the tightest way to find one legal entity's ads.

#### Several advertisers and keywords at once

```json
{
  "advertisers": ["HubSpot", "Salesforce", "SAP"],
  "keywords": ["cybersecurity"],
  "maxAdsPerSearch": 60
}
```

This is our proof run: 240 ads, 60 per search, all with details, in 104 seconds. Each line is its own search with its own `search_query` on every row. An ad that two searches both find is delivered and charged once.

#### Competitor ads in Europe with impressions and targeting

```json
{
  "advertisers": ["SAP"],
  "payers": ["HubSpot, Inc."],
  "countries": ["DE", "FR"],
  "maxAdsPerSearch": 30
}
```

LinkedIn publishes run dates, impressions, the country split and targeting for the ads it shows in the European Union. With a German and French filter, all 60 ads in our run carried them: total impressions such as `5k-10k`, the share of impressions per country, the languages and locations targeted, and which of Audience, Demographic, Company, Education, Job and Member Interests and Traits the advertiser used or excluded.

#### Weekly new ad alerts for a list of competitors

```json
{
  "advertisers": ["HubSpot", "Pipedrive", "Zoho"],
  "dateRange": "last-30-days",
  "maxAdsPerSearch": 100,
  "onlyNewAds": true
}
```

Schedule it weekly in Apify Console (Schedules, then Add schedule). Each later run returns, and charges, only ads you have not received before, and stops a search as soon as it reaches ads you already have.

#### Find the longest running ads in a niche

```json
{
  "keywords": ["webinar"],
  "dateRange": "custom",
  "startDate": "2026-09-01",
  "endDate": "2026-09-15",
  "sortOrder": "oldest",
  "maxAdsPerSearch": 50
}
```

The date filter keeps ads that ran during the window, and oldest first puts the ads that started earliest at the top. In our run this surfaced webinar ads that started in July 2023 and were still running in October 2026.

#### Read single ads you already know

```json
{
  "adLibraryUrls": [
    "https://www.linkedin.com/ad-library/detail/1566665103",
    "1630864966",
    "https://www.linkedin.com/ad-library/search?keyword=crm&countries=FI%2CSE"
  ]
}
```

Ad links and bare ids are read from their detail pages; search links run with the filters inside them. Our test of 10 ad links (9 formats, 1 missing id) returned 9 rows in 9 seconds, the missing one not charged.

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `advertisers` | array of strings | none (prefilled with `["HubSpot"]`) | Advertiser names as typed in the Ad Library's "Company or advertiser" box, one per line. A LinkedIn company page link is searched by its page name. |
| `keywords` | array of strings | none | Words or phrases matched against the ad text, one per line. |
| `payers` | array of strings | none | "Paid for by" names, one per line. |
| `adLibraryUrls` | array of strings | none | Ad Library search links (run with their own filters), ad detail links, or bare ad ids. |
| `countries` | array of strings | all countries | Two letter country codes (`US`, `GB`, `DE`...). Only ads shown in these countries. |
| `dateRange` | string | `all` | `all`, `last-30-days`, `current-month`, `current-year`, `last-year` or `custom`. |
| `startDate` | string | none | First day of a custom range, `YYYY-MM-DD`. LinkedIn's date filter covers the last 365 days; an older start is moved to the earliest day it accepts, with a warning. |
| `endDate` | string | none | Last day of a custom range, `YYYY-MM-DD`. |
| `sortOrder` | string | `newest` | `newest` or `oldest` first. |
| `maxAdsPerSearch` | integer | `50` | Ads to collect from each advertiser, keyword, payer or search link, 20 to 1,000. |
| `includeAdDetails` | boolean | `true` | Read each ad's detail page for the full text, CTA, landing page, payer, run dates, impressions and targeting. Charged as one extra event per ad. |
| `onlyNewAds` | boolean | `false` | Skip ads an earlier run of yours already delivered, so a scheduled run returns and charges only new ones. |

Give at least one advertiser, keyword, payer or link. A completely empty input searches HubSpot as an example, so a first run always returns real rows. Country, date and order settings apply to advertiser, keyword and payer searches; a pasted search link keeps the filters inside it. Repeated lines are searched once. There is no proxy setting: the actor reads through Apify's datacenter proxy, included in the price.

### What data do you get?

One row per ad. Fields marked "details" are filled when `includeAdDetails` is on (or for ad links), and some only where LinkedIn shows them.

**The ad**

- `ad_id`: LinkedIn's Ad Library id, stable, use it to dedupe. `ad_url`: the public Ad Library page of the ad.
- `ad_format`: `single_image`, `video`, `carousel`, `document`, `article`, `text`, `spotlight`, `message`, `event`, `job` and so on. `ad_format_label`: LinkedIn's own name, such as `Single Image Ad`. `creative_type`: LinkedIn's internal type, such as `SPONSORED_STATUS_UPDATE`.

**Advertiser and payer**

- `advertiser_name`: the page that ran the ad (for a thought leader ad, the company that promotes the member's post).
- `advertiser_url` (details): its LinkedIn link, `https://www.linkedin.com/company/<id>` for companies or a profile link for people. `advertiser_id`: the numeric company id.
- `advertiser_type`: `company` or `person` (also `showcase` or `school` when LinkedIn links one).
- `advertiser_logo_url`, and `advertiser_subtitle`, the headline line LinkedIn shows under a person advertiser's name.
- `paid_by` (details): the "Paid for by" entity, often the legal name (`HubSpot, Inc.`) or the agency that bought the media.
- `posted_by_name`, `posted_by_url`, `posted_by_headline`: on thought leader ads, the member whose post the company promotes.

**Creative**

- `headline`, `body` (the introductory text, or a message ad's message), `description` (the line under a headline, an article teaser or a text ad's second line), `cta` (Learn more, Register, Download, Sign Up...).
- `body_truncated`: true when the text comes from the result page, which cuts it at about 120 characters. With details, `body` is the full text with its line breaks.
- `destination_url`: where the ad sends people, when LinkedIn shows the link (carousel cards, text ads, job ads and many image ads, often with the advertiser's UTM tags).
- `image_urls`; `video_url` (details, the highest quality MP4 LinkedIn offers) and `video_thumbnail_url`; `document_title`, `document_page_count`, `document_page_image_urls`, `document_manifest_url` (details); `carousel_cards`, each with `title`, `image_url` and `url`; `message_sender` on message ads.

**Run dates and impressions** (details, where LinkedIn publishes them)

- `first_shown`, `last_shown`: the "Ran from ... to ..." dates, `YYYY-MM-DD`. A `last_shown` of yesterday or today usually means the ad is still running.
- `impressions_range` as LinkedIn shows it (`< 1k`, `1k-5k`, `10k-20k`...), with `impressions_min` and `impressions_max` as numbers.
- `impressions_by_country`: each country with `country`, `country_code`, `share_pct` and `share_text`. LinkedIn shows a share under 1% as `< 1%`; that comes back as `share_pct` 0 with the exact label in `share_text`.

**Targeting** (details, where LinkedIn publishes it)

- `targeting_languages`, `targeting_languages_excluded`, `targeting_locations`, `targeting_locations_excluded`: the lists LinkedIn prints, including the ones hidden behind "N others".
- `targeting_parameters`: Audience, Demographic, Company, Education, Job and Member Interests and Traits, each with `targeted` and `excluded` true or false. `targeted_parameters` and `excluded_parameters` list the names that are true.
- `targeting_other`: any further targeting section LinkedIn adds, by name.

**Search and run fields**

- `has_details` and `detail_status` (`ok`, `not_requested`, `unavailable` when LinkedIn cannot load the ad, `failed` when it refused every try).
- `search_type` (`advertiser`, `keyword`, `payer`, `search_url` or `ad_url`), `search_query`, `search_url`, `search_total_ads` (how many ads LinkedIn said matched), `position` (1 is the first result) and `scraped_at`.

See the FAQ for how often LinkedIn publishes run dates, impressions and targeting, and how to get them on every row.

Media links are LinkedIn's own signed CDN links. Save the files you need soon after the run.

#### Stable fields for automations

These fields were present in every one of the 269 rows of our final test runs (240 ads with details, 20 without, 9 from ad links):

| Field | What it holds |
|---|---|
| `ad_id` | LinkedIn Ad Library id of the ad |
| `ad_url` | Public Ad Library page of the ad |
| `advertiser_name` | Page that ran the ad |
| `advertiser_type` | `company` or `person` |
| `ad_format` | Format code such as `single_image` or `video` |
| `ad_format_label` | LinkedIn's name for the format |
| `creative_type` | LinkedIn's internal creative type |
| `image_urls` | Images of the creative (an empty list for video, document and message ads) |
| `body_truncated` | True when the text is the shortened result page text |
| `has_details` | Whether the detail page was read |
| `detail_status` | `ok`, `not_requested`, `unavailable` or `failed` |
| `search_type` | How the ad was found |
| `search_query` | The advertiser, keyword, payer or link that found it |
| `scraped_at` | When the row was collected |

These names will not change. Other fields appear only when the ad has them: a video ad has `video_url` and no `headline`, a message ad has `message_sender`, and the run dates, impressions and targeting appear only where LinkedIn publishes them.

#### Output examples

Real rows from our runs on 6 October 2026, trimmed: long texts are cut where marked, signed media links end in `?e=...`, logo links are left out.

##### Single image ad shown in Europe, with impressions and targeting (HubSpot)

```json
{
  "ad_id": "1558773703",
  "ad_url": "https://www.linkedin.com/ad-library/detail/1558773703",
  "advertiser_name": "HubSpot",
  "advertiser_url": "https://www.linkedin.com/company/68529",
  "advertiser_id": "68529",
  "advertiser_type": "company",
  "paid_by": "HubSpot, Inc.",
  "ad_format": "single_image",
  "ad_format_label": "Single Image Ad",
  "creative_type": "SPONSORED_STATUS_UPDATE",
  "headline": "GROW Europe 2026 · London · Register Today",
  "body": "$1M to $100M ARR in 18 months. Stuart Shingler, Legora, on how fast-growth companies build trust while they innovate. London, 17 November.",
  "body_truncated": false,
  "cta": "Register",
  "destination_url": "https://www.hubspot.com/grow-europe?utm_source=linkedin&utm_medium=paid&utm_campaign=Marketing_Registrations_E...",
  "image_urls": [
    "https://media.licdn.com/dms/image/v2/D4D10AQGshA0JBhq0cA/image-shrink_1280/B4DaDP9g74HMAc-/0/1790195405027/2png?e=..."
  ],
  "first_shown": "2026-09-23",
  "last_shown": "2026-10-05",
  "impressions_range": "5k-10k",
  "impressions_min": 5000,
  "impressions_max": 10000,
  "impressions_by_country": [
    {"country": "United Kingdom", "country_code": "GB", "share_pct": 89, "share_text": "89%"},
    {"country": "Ireland", "country_code": "IE", "share_pct": 11, "share_text": "11%"}
  ],
  "targeting_languages": ["English"],
  "targeting_locations": ["Ireland", "United Kingdom"],
  "targeting_parameters": [
    {"parameter": "Audience", "targeted": false, "excluded": true},
    {"parameter": "Demographic", "targeted": false, "excluded": false},
    {"parameter": "Company", "targeted": true, "excluded": true},
    {"parameter": "Education", "targeted": false, "excluded": false},
    {"parameter": "Job", "targeted": true, "excluded": false},
    {"parameter": "Member Interests and Traits", "targeted": false, "excluded": false}
  ],
  "targeted_parameters": ["Company", "Job"],
  "excluded_parameters": ["Audience", "Company"],
  "has_details": true,
  "detail_status": "ok",
  "search_type": "advertiser",
  "search_query": "HubSpot",
  "search_total_ads": 2533,
  "position": 49,
  "scraped_at": "2026-10-05T20:36:35.162Z"
}
```

##### Thought leader video ad (Salesforce)

```json
{
  "ad_id": "1567149503",
  "ad_url": "https://www.linkedin.com/ad-library/detail/1567149503",
  "advertiser_name": "Salesforce",
  "advertiser_url": "https://www.linkedin.com/company/3185",
  "advertiser_id": "3185",
  "advertiser_type": "company",
  "paid_by": "Iprospect.com Inc.",
  "posted_by_name": "Leandro Perez",
  "posted_by_url": "https://www.linkedin.com/in/leandroperez",
  "posted_by_headline": "SVP & CMO ANZ Salesforce | MAA Board | Marketing Academy Fellow | Mi3 Top 20 CMO",
  "ad_format": "video",
  "ad_format_label": "Video Ad",
  "creative_type": "SPONSORED_VIDEO",
  "body": "Formula 1 has one of the most passionate fanbases in the world, and that raises the bar for everything we make.\nFormula 1 and Salesforce giving fans a [trimmed]",
  "body_truncated": false,
  "image_urls": [],
  "video_url": "https://dms.licdn.com/playlist/vid/v2/D5605AQGcSR38YJeeRg/mp4-720p-30fp-crf28/B56aD063bnIACQ-/0/1790815475233?e=...",
  "video_thumbnail_url": "https://media.licdn.com/dms/image/v2/D5605AQGcSR38YJeeRg/videocover-high/B56aD063bnIABU-/0/1790815472500?e=...",
  "has_details": true,
  "detail_status": "ok",
  "search_type": "advertiser",
  "search_query": "Salesforce",
  "search_total_ads": 9298,
  "position": 4,
  "scraped_at": "2026-10-05T20:35:55.095Z"
}
```

##### Document ad with the country split (SAP Portugal)

```json
{
  "ad_id": "1585276764",
  "ad_url": "https://www.linkedin.com/ad-library/detail/1585276764",
  "advertiser_name": "SAP",
  "advertiser_url": "https://www.linkedin.com/company/1115",
  "advertiser_id": "1115",
  "advertiser_type": "company",
  "paid_by": "DSL Digital LLC",
  "ad_format": "document",
  "ad_format_label": "Document Ad",
  "creative_type": "SPONSORED_UPDATE_NATIVE_DOCUMENT",
  "body": "A IA ja esta a transformar as empresas portuguesas. Descubra por onde começar.",
  "body_truncated": false,
  "image_urls": [],
  "document_title": "Como a SAP está a usar a IA para transformar as empresas portuguesas",
  "document_page_count": 4,
  "document_page_image_urls": [
    "https://media.licdn.com/dms/image/v2/D4E10AQEhetwVcirdkQ/ads-document-cover-images_480/B4EaD5OD.lIYAw-/0/1790887610507?e=...",
    "https://media.licdn.com/dms/image/v2/D4E10AQEhetwVcirdkQ/ads-document-cover-images_480/B4EaD5OD.lIYAw-/1/1790887610507?e=..."
  ],
  "document_manifest_url": "https://media.licdn.com/dms/document/pl/v2/D4E10AQEhetwVcirdkQ/document-sliced-primary-manifest/B4EaD5OHGeJgAg-/0/1790887621490?e=...",
  "first_shown": "2026-10-01",
  "last_shown": "2026-10-05",
  "impressions_range": "5k-10k",
  "impressions_min": 5000,
  "impressions_max": 10000,
  "impressions_by_country": [
    {"country": "Portugal", "country_code": "PT", "share_pct": 100, "share_text": "100%"}
  ],
  "targeting_languages": ["Português"],
  "targeting_locations": ["Portugal"],
  "targeting_parameters": [
    {"parameter": "Audience", "targeted": false, "excluded": true},
    {"parameter": "Demographic", "targeted": false, "excluded": false},
    {"parameter": "Company", "targeted": false, "excluded": true},
    {"parameter": "Education", "targeted": false, "excluded": false},
    {"parameter": "Job", "targeted": true, "excluded": true},
    {"parameter": "Member Interests and Traits", "targeted": true, "excluded": false}
  ],
  "targeted_parameters": ["Job", "Member Interests and Traits"],
  "excluded_parameters": ["Audience", "Company", "Job"],
  "has_details": true,
  "detail_status": "ok",
  "search_type": "advertiser",
  "search_query": "SAP",
  "search_total_ads": 29826,
  "position": 15,
  "scraped_at": "2026-10-05T20:36:44.000Z"
}
```

##### Result page row without details (Bizowie)

```json
{
  "ad_id": "1585587284",
  "ad_url": "https://www.linkedin.com/ad-library/detail/1585587284",
  "advertiser_name": "Bizowie Cloud ERP",
  "advertiser_type": "company",
  "ad_format": "single_image",
  "ad_format_label": "Single Image Ad",
  "creative_type": "SPONSORED_STATUS_UPDATE",
  "headline": "Outgrown Your ERP? Discover Bizowie.",
  "body": "Your distribution business has evolved. Has your ERP kept up?\nMove beyond spreadsheets and workarounds. Bizowie connect…",
  "body_truncated": true,
  "description": "Still relying on legacy ERP? Explore a modern platform built to give distributors better visibility, simpler workflows,…",
  "image_urls": [
    "https://media.licdn.com/dms/image/v2/D4E10AQHcB0JlOpADmA/image-shrink_1280/B4EaD.TMeOI8Ac-/0/1790972840121/BizowieERPLearnMoreAdpng?e=..."
  ],
  "has_details": false,
  "detail_status": "not_requested",
  "search_type": "keyword",
  "search_query": "CRM",
  "search_total_ads": 75308,
  "position": 11,
  "scraped_at": "2026-10-05T20:38:19.250Z"
}
```

### Pricing

Pay per event: you pay for each ad delivered to your dataset, one more event for each ad whose detail page was read, plus a flat $0.005 per run, whatever memory you choose. Nothing else is billed: no proxy add-on, no charge per search or per page.

| Event | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) and above |
|---|---|---|---|---|
| Ad delivered, per 1,000 ads | $1.49 | $1.29 | $0.99 | $0.79 |
| Ad details read, per 1,000 ads (only with details on) | $1.49 | $1.29 | $0.99 | $0.79 |
| Run start, once per run | $0.005 | $0.005 | $0.005 | $0.005 |

**Never charged:** searches LinkedIn finds nothing for, pages LinkedIn refuses on every attempt, an ad that a second search in the same run finds again, ads an earlier run already delivered when `onlyNewAds` is on, ad links LinkedIn cannot load, the detail event on any row whose detail page failed (that row is charged as an ad only), and the information row at the end of a run. A run that delivers nothing costs only the start fee.

To cap a run's cost, set Maximum cost per run in the run options; the actor stops delivering, and charging, when that budget is used.

### FAQ

#### What is the LinkedIn Ad Library?

LinkedIn's public archive of ads that ran on LinkedIn, at `https://www.linkedin.com/ad-library/`. Anyone can search it by advertiser, keyword, payer, country and date, and open each ad's page. This actor runs those searches and reads those pages for you, then returns one clean row per ad.

#### How many ads can I get?

Up to 1,000 per search and up to 100 searches per run. LinkedIn serves 24 ads per page and keeps serving pages as you scroll; our deep run read 42 pages of one search for 1,000 distinct ads. A search with fewer matching ads returns what it has. The minimum is 20 per search, about one page, which keeps the start fee in proportion to what you receive.

#### Why do only some ads have run dates, impressions and targeting?

Because LinkedIn publishes that block only for some ads. In our proof run without a country filter 86 of 240 ads had it; filtered to Germany and France, 60 of 60 had it. LinkedIn shows it for ads served in the European Union, so add EU country codes to `countries` when you need these fields on every row. Ads without it still carry the creative, the advertiser and the payer.

#### What does "Include ad details" add, and is it worth it?

The result pages show the creative with the text cut at about 120 characters. The detail page adds the full text, call to action, landing page, advertiser link and id, payer, video file, document pages and the transparency block above. It is one extra request per ad; our 240 ad run with details took 104 seconds. Turn it off for a quick list of which ads exist.

#### How fresh is the data?

Live. Every run reads the Ad Library at that moment. `last_shown` is the latest day LinkedIn reports the ad ran, usually yesterday or today for ads still running.

#### Do I need a LinkedIn account, cookies or an API key?

No. The actor never logs in and never asks for your cookies. It uses only the pages LinkedIn's Ad Library shows to any visitor.

#### Do I need my own proxy?

No. Requests go through Apify's datacenter proxy, a new session for every request, and that is included in the price. LinkedIn's front door refuses a small share of requests (17 of 269 in our proof run); each refused page is tried again on a new session, up to 4 times for result pages and 3 for detail pages. All 240 ads in that run came back with their details.

#### What happens with a wrong name or a broken link?

A search with no results is reported in the run summary as `no_results` and costs nothing. A line in `adLibraryUrls` that is not an Ad Library link is skipped with a warning that says why, and an ad id LinkedIn cannot load is reported as unavailable and not charged. The rest of the run continues.

#### Can I monitor competitors for new ads?

Yes. Schedule the actor in Apify Console (Schedules, then Add schedule) with `onlyNewAds` on. Each run returns, and charges, only ads no earlier run of yours delivered. Keep the default newest first order so each search stops as soon as it reaches ads you already have.

#### In what formats can I export the data?

From the dataset: JSON, CSV, Excel, XML, HTML table or RSS, from Console or the API. In CSV and Excel the list fields (`image_urls`, `impressions_by_country`, `targeting_parameters` and the rest) are flattened into columns.

#### Can I use it from Claude, ChatGPT or another AI assistant?

Yes, through Apify's MCP server.

- Connector URL: https://mcp.apify.com/?tools=themineworks/linkedin-ad-library-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http linkedin-ad-library-scraper "https://mcp.apify.com/?tools=themineworks/linkedin-ad-library-scraper"`

#### Is it legal to scrape the LinkedIn Ad Library?

The actor collects only what LinkedIn publishes in its public Ad Library for anyone to see, and it does not log in or bypass any login. You are responsible for how you use the data: check LinkedIn's terms for your use case and the data protection laws that apply to you, such as GDPR and CCPA, especially for the names of people who appear as advertisers, thought leaders or message senders.

### Integrations

- **Google Sheets**: send each run's dataset to a sheet with Apify's Google Sheets integration, one row per ad.
- **Make, Zapier and n8n**: start a run and read its dataset with the Apify apps and nodes, for example to post new competitor ads to Slack.
- **Webhooks**: have Apify call your URL when a run finishes, then fetch the dataset.
- **API**: start runs and read results from any language with the Apify API or the Python and JavaScript clients (see "Copy to your AI assistant" above).
- **MCP clients**: Claude, ChatGPT, Cursor, VS Code and Claude Code, through the connector URL in the FAQ.

Related actors from us: [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) for Meta ads, [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) for an advertiser's Google ads, and [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) for the profile of any advertiser you find here.

### More from The Mine Works

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Email Finder](https://apify.com/themineworks/linkedin-email-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Newsletter Scraper](https://apify.com/themineworks/linkedin-newsletter-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Candidate Finder](https://apify.com/themineworks/linkedin-candidate-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google News Scraper](https://apify.com/themineworks/google-news?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Science, health and government data**

- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [OpenAlex Scraper](https://apify.com/themineworks/openalex-scholarly-works?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**More tools**

- [G2 Reviews Scraper](https://apify.com/themineworks/g2-reviews-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naver Blog Scraper](https://apify.com/themineworks/naver-blog-posts-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [WeChat Article Scraper 微信公众号文章](https://apify.com/themineworks/wechat-article-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Taobao Products Scraper 淘宝 天猫](https://apify.com/themineworks/taobao-products-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

### Support

Found an ad that does not come back right, or a field you need? Open an issue in the Issues tab and include the run link. For new sources or a custom build, email dmineworks@gmail.com.

*Every ad in LinkedIn's public Ad Library by advertiser, keyword or payer, with country and date filters, full creatives, payer, run dates, impressions by country and targeting, read logged out and charged only for ads you receive.*

# Actor input Schema

## `advertisers` (type: `array`):

One advertiser per line, as you would type it in the Ad Library's "Company or advertiser" box, for example HubSpot or Siemens. LinkedIn matches names loosely, so a search can also return partner pages and people whose posts the company promotes. A LinkedIn company page link also works; its page name is searched.

## `keywords` (type: `array`):

One word or phrase per line, matched against the ad text, for example "CRM" or "webinar".

## `payers` (type: `array`):

Optional. One "Paid for by" name per line, for example "HubSpot, Inc.". Finds ads paid for by that legal entity, whichever page ran them.

## `adLibraryUrls` (type: `array`):

Optional. Search links copied from https://www.linkedin.com/ad-library/ (run with their own filters) and ad links such as https://www.linkedin.com/ad-library/detail/1566665103 (or just the number) to read single ads with their details.

## `countries` (type: `array`):

Optional. Only ads shown in these countries. Leave empty for all countries.

## `dateRange` (type: `string`):

Only ads that ran in this period. Custom uses the start and end dates below; LinkedIn's date filter covers the last 365 days.

## `startDate` (type: `string`):

First day of a custom range, YYYY-MM-DD. Used only when Date range is Custom.

## `endDate` (type: `string`):

Last day of a custom range, YYYY-MM-DD. Used only when Date range is Custom.

## `sortOrder` (type: `string`):

Newest first is LinkedIn's default and what only-new mode expects.

## `maxAdsPerSearch` (type: `integer`):

How many ads to collect from each advertiser, keyword, payer or search link, 20 to 1,000. LinkedIn returns 24 ads per page. A search with fewer ads returns what it has.

## `includeAdDetails` (type: `boolean`):

Open each ad's detail page for the full text, call to action, landing page link, advertiser link, "Paid for by", run dates, total impressions, impressions by country and targeting. Rows with details are charged one extra event. Untick for a faster, cheaper list from the search pages only (text cut at about 120 characters).

## `onlyNewAds` (type: `boolean`):

Skip ads an earlier run of yours already delivered, so a scheduled run returns and charges only new ones.

## Actor input object example

```json
{
  "advertisers": [
    "HubSpot"
  ],
  "dateRange": "all",
  "sortOrder": "newest",
  "maxAdsPerSearch": 50,
  "includeAdDetails": true,
  "onlyNewAds": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "advertisers": [
        "HubSpot"
    ],
    "dateRange": "all",
    "sortOrder": "newest",
    "maxAdsPerSearch": 50,
    "includeAdDetails": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/linkedin-ad-library-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "advertisers": ["HubSpot"],
    "dateRange": "all",
    "sortOrder": "newest",
    "maxAdsPerSearch": 50,
    "includeAdDetails": True,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/linkedin-ad-library-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "advertisers": [
    "HubSpot"
  ],
  "dateRange": "all",
  "sortOrder": "newest",
  "maxAdsPerSearch": 50,
  "includeAdDetails": true
}' |
apify call themineworks/linkedin-ad-library-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/linkedin-ad-library-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Ebwjm0Af0zvd5eeCk/builds/NSfRCjK5iLxJX64H8/openapi.json
