# LinkedIn Ads Library Scraper (`easyapi/linkedin-ads-library-scraper`) Actor

Effortlessly scrape LinkedIn's Ad Library for comprehensive ad data. Extract company names, ad content, images, and more from multiple search queries. Perfect for competitive analysis, market research, and advertising inspiration. Automate your LinkedIn ad intelligence gathering today!

- **URL**: https://apify.com/easyapi/linkedin-ads-library-scraper.md
- **Developed by:** [EasyApi](https://apify.com/easyapi) (community)
- **Categories:** Other
- **Stats:** 119 total users, 5 monthly users, 88.3% runs succeeded, 5 bookmarks
- **User rating**: 1.00 out of 5 stars

## Pricing

from $2.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## LinkedIn Ads Library Scraper 🕵️‍♂️💼

### 🚀 Effortlessly Extract LinkedIn Ad Data at Scale

Unlock valuable insights from LinkedIn's Ad Library with our powerful scraper! This Actor allows you to effortlessly collect detailed information about ads from multiple companies, giving you a competitive edge in your market research and advertising strategies.

#### 🌟 Key Features

- 📊 Scrape ads from multiple search URLs in one run
- 🔍 Extract comprehensive ad details including company name, ad type, description, and more
- 🖼️ Capture ad images and detail page URLs
- 📈 Set custom result limits to fit your needs
- 🚀 High-performance scraping with Puppeteer and Cheerio

#### 📋 Output Data

For each ad, you'll receive:

- 🔗 Source search URL
- 🏢 Company name
- 📝 Ad type
- 📄 Ad description
- 🏷️ Ad title
- 🖼️ Image URL
- 🔗 Ad detail page URL

#### 💡 Use Cases

- 🎯 Competitive analysis: Track your competitors' ad strategies
- 🧠 Market research: Understand industry trends and messaging
- 💼 Lead generation: Identify potential clients or partners
- 🎨 Creative inspiration: Get ideas for your own ad campaigns

### 📚 Getting Started

1. 📝 Enter one or more LinkedIn Ad Library search URLs
2. 🔢 Set your desired maximum number of results
3. 🚀 Run the Actor and watch the data roll in!

Start uncovering LinkedIn ad insights today and supercharge your marketing strategies! 💪🚀

#### Input Example

A full explanation of an input example in JSON.

```
{
    "searchUrls": [
        "https://www.linkedin.com/ad-library/search?accountOwner=nvidia&countries=US&dateOption=last-30-days", 
		"https://www.linkedin.com/ad-library/search?accountOwner=apple&countries=US&dateOption=last-30-days"
    ],
    "maxResults": 100
}
```

#### Output sample

The results will be wrapped into a dataset which you can always find in the **Storage** tab. Here's an excerpt from the data you'd get if you apply the input parameters above:

And here is the same data but in JSON. You can choose in which format to download your data: JSON, JSONL, Excel spreadsheet, HTML table, CSV, or XML.

```
[
	{
		"searchUrl": "https://www.linkedin.com/ad-library/search?accountOwner=nvidia&countries=US&dateOption=last-30-days",
		"adId": "1254087253",
		"creativeType": "SPONSORED_STATUS_UPDATE",
		"companyName": "NVIDIA",
		"senderName": null,
		"adType": "Promoted",
		"adDescription": "NVIDIA Nemotron 3 Nano Omni is an open multimodal model that unifies video, audio, image, and text reasoning within a si…",
		"adTitle": "NVIDIA Nemotron 3 Nano Omni: An Efficient Open Multimodal Model",
		"imageUrl": "https://media.licdn.com/dms/image/v2/D4D10AQHZU6Fm1G6Qzg/image_627_1200/B56Z3U1zPQIsAQ-/0/1777392366731/Copyofagentic-ai-social-nemotron-3-nano-omni-5145500-1200x628png?e=2147483647&v=beta&t=kTPMBdDnKTdfWIRnd_YPAM1HCQludw-SHwX_utN4JLQ",
		"advertiserLogo": "https://media.licdn.com/dms/image/v2/D560BAQGV36q2EowSyw/company-logo_100_100/company-logo_100_100/0/1724881581208/nvidia_logo?e=1781740800&v=beta&t=P0kZ97TlZru6rDJeMHPSHdEY3t3-FLETjmv0t1imNmg",
		"carouselItems": [
			{
				"title": "",
				"alt": "NVIDIA Nemotron 3 Nano Omni: An Efficient Open Multimodal Model",
				"imageUrl": "https://media.licdn.com/dms/image/v2/D4D10AQHZU6Fm1G6Qzg/image_627_1200/B56Z3U1zPQIsAQ-/0/1777392366731/Copyofagentic-ai-social-nemotron-3-nano-omni-5145500-1200x628png?e=2147483647&v=beta&t=kTPMBdDnKTdfWIRnd_YPAM1HCQludw-SHwX_utN4JLQ"
			}
		],
		"imageUrls": [
			"https://media.licdn.com/dms/image/v2/D4D10AQHZU6Fm1G6Qzg/image_627_1200/B56Z3U1zPQIsAQ-/0/1777392366731/Copyofagentic-ai-social-nemotron-3-nano-omni-5145500-1200x628png?e=2147483647&v=beta&t=kTPMBdDnKTdfWIRnd_YPAM1HCQludw-SHwX_utN4JLQ",
			"https://media.licdn.com/dms/image/v2/D560BAQGV36q2EowSyw/company-logo_100_100/company-logo_100_100/0/1724881581208/nvidia_logo?e=1781740800&v=beta&t=P0kZ97TlZru6rDJeMHPSHdEY3t3-FLETjmv0t1imNmg"
		],
		"adDetailUrl": "https://www.linkedin.com/ad-library/detail/1254087253"
	},
    ...
]
```

# Actor input Schema

## `searchUrls` (type: `array`):

List of LinkedIn Ad Library search URLs to scrape (e.g., \['https://www.linkedin.com/ad-library/search?accountOwner=nvidia\&countries=US\&dateOption=last-30-days'])

## `maxResults` (type: `integer`):

The maximum number of ads to scrape across all search URLs. The actor will stop when this limit is reached.

## `proxyConfiguration` (type: `object`):

Optionally, use Apify Proxy or custom HTTP proxy to avoid IP address-based blocking.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.linkedin.com/ad-library/search?accountOwner=nvidia&countries=US&dateOption=last-30-days"
  ],
  "maxResults": 20,
  "proxyConfiguration": {}
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("easyapi/linkedin-ads-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("easyapi/linkedin-ads-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 '{}' |
apify call easyapi/linkedin-ads-library-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,easyapi/linkedin-ads-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/OTP98aFdIGEqtPHtc/builds/9cniTVfwTVj9fckOh/openapi.json
