LinkedIn Ads Scraper avatar

LinkedIn Ads Scraper

Pricing

Pay per event

Go to Apify Store
LinkedIn Ads Scraper

LinkedIn Ads Scraper

πŸ” Extract comprehensive LinkedIn ads data from the Ad Library. Get ad creatives, headlines, copy, advertiser info, and targeting details. Perfect for competitive intelligence, πŸ“ˆ market research, and ad campaign analysis. Supports keyword search, date filtering, and multi-country targeting.

Pricing

Pay per event

Rating

5.0

(3)

Developer

FlowExtract API

FlowExtract API

Maintained by Community

Actor stats

8

Bookmarked

42

Total users

17

Monthly active users

9 days ago

Last modified

Share

πŸ“’ LinkedIn Ad Library Scraper

Extract comprehensive advertising data from LinkedIn's Ad Library with automatic pagination, advanced filtering, URL-based search, and optional ad detail enrichment.

This Apify actor extracts detailed ad information from LinkedIn's public Ad Library, delivering structured data about ad campaigns including creatives, headlines, advertiser details, impressions, targeting parameters, and more.


Key Features

Comprehensive Ad Data Extraction

  • Ad Creatives Images, videos (all quality variants), and carousel content
  • Ad Copy Headlines, body text, descriptions, and full untruncated ad text
  • Advertiser Information Company names, logos, bio/subtitle text, profile URLs
  • Call-to-Action CTA button text and destination links
  • External Links URLs mentioned in ad text
  • Ad Detail Enrichment Optional deep-fetch of impressions, targeting, dates, payer info, and video URLs per ad
  • Metadata Ad IDs, creative types, run dates, status (active/inactive), and timestamps

Performance & Reliability

  • Smart Pagination Automatically handles multi-page results with token tracking and stall detection
  • Retry Logic Configurable exponential backoff for both search pages and ad detail pages
  • Concurrent Detail Fetching Fetch multiple ad detail pages in parallel with configurable concurrency
  • Rate Limit Handling Automatic detection and wait on HTTP 429 responses
  • Proxy Support Optional Apify Proxy integration with residential proxy groups

Two Search Modes

  • URL Mode Paste LinkedIn Ad Library URLs directly (with all filters pre-applied)
  • Filter Mode Search by keyword, account owner, payer, country, date range, impressions, targeting facets, and sort order

🀝 ZIP Job Logic

When providing multiple keywords, account owners, and payers, they are paired by index position (not cross-product). This gives you precise control over which combinations run.


Quick Start

{
"keyword": ["apify"],
"maxResults": 50
}

Search by URL

{
"urls": [
{ "url": "https://www.linkedin.com/ad-library/search?keyword=sony&countries=DZ" }
],
"maxResults": 20
}

Advanced Configuration

{
"keyword": ["saas", "marketing automation"],
"accountOwner": ["Apify", "HubSpot"],
"payer": ["Apify Technologies s.r.o.", "HubSpot Inc."],
"countries": ["US", "GB", "CA"],
"dateOption": "last-30-days",
"sortOrder": "ASCENDING",
"fetchAdDetail": true,
"maxResults": 100,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

🀝 How ZIP Job Logic Works

The scraper pairs keyword, accountOwner, and payer arrays by index position, not as a cross-product. Each index creates one search job, and all shared filters (countries, date, impressions, targeting, sort order) are applied to every job.

Example 1: Simple Pairing

{
"keyword": ["Keyword1", "", "Keyword3", ""],
"accountOwner": ["Company0", "Advertiser1", "Company3", "Advertiser4"],
"payer": ["Payer1", "Payer2", "", ""],
"maxResults": 11
}

This creates 4 jobs (paired by index):

JobkeywordaccountOwnerpayermaxResults
1Keyword1Company0Payer111
2(empty)Advertiser1Payer211
3Keyword3Company3(empty)11
4(empty)Advertiser4(empty)11

Total expected results: 4 jobs Γ— 11 = 44

Empty strings ("") are treated as "no filter" for that field in that job.

Example 2: Unequal Array Lengths

{
"keyword": ["sony"],
"accountOwner": ["Company1", "Company2"],
"payer": ["Payer1"],
"maxResults": 10
}

The number of jobs = max(keyword.length, accountOwner.length, payer.length) = 2 jobs. Missing entries are treated as empty:

JobkeywordaccountOwnerpayer
1sonyCompany1Payer1
2(empty)Company2(empty)

Example 3: URLs + Filters Combined

{
"urls": [
{ "url": "https://www.linkedin.com/ad-library/search?keyword=sony&countries=DZ" }
],
"keyword": ["apify"],
"payer": ["Apify Technologies s.r.o."],
"maxResults": 10
}

Phase 1 runs 1 URL job (with full pagination, respecting maxResults). Phase 2 runs 1 filter job (keyword=apify + payer=Apify Technologies s.r.o.).

Total: 2 jobs Γ— 10 = 20 max results.

Example 4: Only One Field Provided

{
"accountOwner": ["Company5"],
"maxResults": 9
}

This creates 1 job: accountOwner=Company5, keyword and payer are empty.

Total: 1 job Γ— 9 = 9 max results.


πŸ“‹ Input Configuration

Input Parameters

ParameterTypeRequiredDefaultDescription
Search by URL
urlsarray❌-LinkedIn Ad Library URLs (requestListSources)
Search by Filters
keywordarray❌-Keywords to search (zipped with accountOwner/payer)
accountOwnerarray❌-Advertiser account names (zipped)
payerarray❌-Who paid for the ad (zipped)
countriesarray❌AllCountry codes (e.g., US, GB, DZ)
sortOrderstring❌DESCENDINGSort order: ASCENDING or DESCENDING
Date Range
dateOptionstring❌-Predefined date filter
startDatestring❌-Custom start date (YYYY-MM-DD)
endDatestring❌-Custom end date (YYYY-MM-DD)
Impressions & Targeting
impressionsMinValueinteger❌-Minimum impressions value
impressionsMinUnitstring❌-Unit: none, thousand, or million
impressionsMaxValueinteger❌-Maximum impressions value
impressionsMaxUnitstring❌-Unit: none, thousand, or million
includedTargetingFacetCategoriesarray❌-Targeting categories to include
excludedTargetingFacetCategoriesarray❌-Targeting categories to exclude
Run Settings
maxResultsinteger❌100Max ads per job (0 = unlimited)
fetchAdDetailboolean❌falseFetch full ad detail page per ad
proxyConfigurationobject❌-Apify proxy settings

Impressions Units

The impressionsMinUnit and impressionsMaxUnit fields support three values:

ValueMeaningExample
noneExact number (no multiplier)impressionsMinValue: 5, impressionsMinUnit: none β†’ min 5 impressions
thousandMultiply by 1,000impressionsMinValue: 5, impressionsMinUnit: thousand β†’ min 5,000 impressions
millionMultiply by 1,000,000impressionsMaxValue: 2, impressionsMaxUnit: million β†’ max 2,000,000 impressions

Targeting Facet Categories

Available values for includedTargetingFacetCategories and excludedTargetingFacetCategories:

LANGUAGE, LOCATION, AUDIENCE, DEMOGRAPHIC, COMPANY, EDUCATION, JOB, INTERESTS_AND_TRAITS

A category can appear in both included and excluded arrays simultaneously this corresponds to LinkedIn's "Both" filter option.

Date Filter Options

ValueDescription
last-30-daysLast 30 days
current-monthCurrent month
current-yearCurrent year
last-yearPrevious year
custom-date-rangeCustom range (requires startDate + endDate)

If startDate and endDate are both provided, they take priority over dateOption.


πŸ“€ Output Structure

Standard Output (fetchAdDetail: false)

{
"adId": "894398854",
"advertiserName": "Apify",
"advertiserBio": "Promoted",
"isPromoted": true,
"creativeType": "SPONSORED_STATUS_UPDATE",
"headline": "$1M in prizes for tools AI needs.",
"adText": "Companies deploying AI hit walls. Tools don't exist yet...",
"detailPageUrl": "https://www.linkedin.com/ad-library/detail/894398854",
"imageUrl": "https://media.licdn.com/dms/image/...",
"logoUrl": "https://media.licdn.com/dms/image/...",
"ctaText": "View details",
"externalLinksInText": [],
"scrapedAt": "2026-03-21T00:55:56.066Z"
}

Enriched Output (fetchAdDetail: true)

When fetchAdDetail is enabled, each ad includes a detail object with deep data from the ad's detail page:

{
"adId": "1230248844",
"advertiserName": "Nivide",
"advertiserBio": "Promoted",
"isPromoted": true,
"creativeType": "SPONSORED_STATUS_UPDATE",
"headline": "Professionellt stΓΆd kring digital annonsering och SEO",
"adText": "Γ„r det dags fΓΆr ett omtag kring fΓΆretagets digitala annonsering eller SEO?...",
"detailPageUrl": "https://www.linkedin.com/ad-library/detail/1230248844",
"imageUrl": "https://media.licdn.com/dms/image/...",
"logoUrl": "https://media.licdn.com/dms/image/...",
"ctaText": "View details",
"externalLinksInText": [],
"scrapedAt": "2026-03-21T20:21:24.677Z",
"detail": {
"adType": "Single Image Ad",
"advertiserName": "Nivide",
"advertiserProfileUrl": "https://www.linkedin.com/company/5275721",
"paidForBy": "Nivide AB",
"adRunDatesRaw": "Ran from Mar 15, 2026 to Mar 21, 2026",
"adStartDate": "Mar 15, 2026",
"adEndDate": "Mar 21, 2026",
"adStatus": "INACTIVE",
"totalImpressions": "< 1k",
"impressionsByCountry": [
{
"country": "Sweden",
"impressionPercent": "100%",
"progressValue": 100
}
],
"targetingLanguage": "Targeting includes svenska",
"targetingLocation": "Targeting includes Sverige",
"targetingParameters": [
{ "category": "Audience", "hasInclusion": false, "hasExclusion": false, "targetingType": "NONE" },
{ "category": "Demographic", "hasInclusion": false, "hasExclusion": false, "targetingType": "NONE" },
{ "category": "Company", "hasInclusion": true, "hasExclusion": true, "targetingType": "BOTH" },
{ "category": "Education", "hasInclusion": false, "hasExclusion": false, "targetingType": "NONE" },
{ "category": "Job", "hasInclusion": true, "hasExclusion": true, "targetingType": "BOTH" },
{ "category": "Member Interests and Traits", "hasInclusion": false, "hasExclusion": false, "targetingType": "NONE" }
],
"creativeType": "SPONSORED_STATUS_UPDATE",
"fullAdText": "Γ„r det dags fΓΆr ett omtag kring fΓΆretagets digitala annonsering eller SEO?...",
"headlineText": "Professionellt stΓΆd kring digital annonsering och SEO",
"destinationUrl": "https://nivide.se?trk=ad_library_ad_preview_headline_content",
"ctaButtonText": "LΓ€s mer",
"advertiserLogoUrl": "https://media.licdn.com/dms/image/...",
"imageUrl": "https://media.licdn.com/dms/image/...",
"videoUrls": [],
"videoPosterUrl": null
}
}

Output Fields Reference

Standard Fields (always present)

FieldDescription
adIdUnique LinkedIn ad identifier
advertiserNameCompany/advertiser name
advertiserBioAdvertiser bio/subtitle text
isPromotedWhether ad is marked as promoted
creativeTypeType: SPONSORED_STATUS_UPDATE, SPONSORED_VIDEO, etc.
headlineAd headline text
adTextMain ad body text (may be truncated)
detailPageUrlLinkedIn URL to ad detail page
imageUrlAd creative image URL
logoUrlAdvertiser logo URL
ctaTextCall-to-action text
externalLinksInTextExternal URLs found in ad text
scrapedAtISO 8601 timestamp

Detail Fields (when fetchAdDetail: true)

FieldDescription
detail.adType"Video Ad", "Single Image Ad", etc.
detail.advertiserNameAdvertiser name from detail page
detail.advertiserProfileUrlLinkedIn company page URL
detail.paidForByLegal entity that paid for the ad
detail.adStartDateWhen the ad started running
detail.adEndDateWhen the ad stopped (null if still active)
detail.adStatusACTIVE, INACTIVE, or UNKNOWN
detail.adRunDatesRawRaw date string from the page
detail.totalImpressionsImpression range string (e.g., "100k-150k")
detail.impressionsByCountryArray of { country, impressionPercent, progressValue }
detail.targetingLanguageLanguage targeting text
detail.targetingLocationLocation targeting text
detail.targetingParametersArray of { category, hasInclusion, hasExclusion, targetingType }
detail.fullAdTextFull untruncated ad text
detail.headlineTextHeadline from card
detail.destinationUrlFull destination URL with UTM params
detail.ctaButtonTextCTA button label (e.g., "Learn more")
detail.videoUrlsArray of { src, type, bitrate } for all quality variants
detail.videoPosterUrlVideo thumbnail URL
detail.advertiserLogoUrlLogo image URL
detail.imageUrlAd image URL
detail.creativeTypeCreative type from data attribute

πŸ“Š Pre-Configured Data Views

1. πŸ“’ Overview

Quick summary of all ads with essential information.

Fields: Ad image, ID, advertiser, bio, creative type, headline, ad text, CTA, LinkedIn URL

2. πŸ“‹ Detailed View

Complete ad information including external links, timestamps, and enriched detail data.

Fields: All standard fields + detail fields (impressions, targeting, dates, video URLs)

3. 🏒 Advertisers

Ads grouped by advertiser/company.

Fields: Logo, company name, bio, ad ID, headline, creative type, URL

4. 🎨 Creative Analysis

Focus on ad creatives and content.

Fields: Creative image, ID, advertiser, bio, type, headline, body text, CTA


βš™οΈ Advanced Configuration Examples

Full Filters with Impressions and Targeting

{
"keyword": ["sony"],
"countries": ["DZ"],
"impressionsMinValue": 5,
"impressionsMinUnit": "none",
"impressionsMaxValue": 123456789,
"impressionsMaxUnit": "none",
"includedTargetingFacetCategories": ["LANGUAGE", "AUDIENCE", "JOB"],
"excludedTargetingFacetCategories": ["LOCATION", "COMPANY"],
"sortOrder": "ASCENDING",
"maxResults": 50
}

URL Mode with Detail Enrichment

{
"urls": [
{ "url": "https://www.linkedin.com/ad-library/search?keyword=apify&countries=US%2CGB" },
{ "url": "https://www.linkedin.com/ad-library/search?accountOwner=nivide&payer=nivide" }
],
"fetchAdDetail": true,
"maxResults": 20,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Zipped Multi-Keyword Competitor Research

{
"keyword": ["web scraping", "data extraction", "automation"],
"accountOwner": ["ParseHub", "Octoparse", "Apify"],
"payer": ["", "", "Apify Technologies s.r.o."],
"countries": ["US", "GB", "CA"],
"dateOption": "last-30-days",
"fetchAdDetail": true,
"maxResults": 50
}

This creates 3 zipped jobs:

  1. keyword="web scraping" + account="ParseHub" + payer=(none)
  2. keyword="data extraction" + account="Octoparse" + payer=(none)
  3. keyword="automation" + account="Apify" + payer="Apify Technologies s.r.o."

Each with the same country, date, and detail settings. Total: 3 Γ— 50 = 150 max results.

Seasonal Campaign Analysis

{
"keyword": ["black friday", "holiday sale"],
"dateOption": "custom-date-range",
"startDate": "2025-11-01",
"endDate": "2025-11-30",
"maxResults": 0
}

πŸ“ˆ Performance Metrics

Scraping Speed (without fetchAdDetail)

  • Single Ad ~0.2 seconds
  • Page (10 ads) ~2–3 seconds (including delay)
  • 100 Ads ~30–40 seconds
  • 1000 Ads ~5–7 minutes

With fetchAdDetail Enabled

  • Per ad detail page ~0.5–1 second
  • With concurrency 3 ~3 ads per second per batch
  • 100 ads with detail ~2–4 minutes (depending on retry rate)

Resource Usage

  • Memory 256MB minimum, 512MB recommended
  • CPU Low to moderate
  • Network Moderate bandwidth (higher with fetchAdDetail)

⚠️ Important Notes

This actor extracts publicly available data from LinkedIn's Ad Library. Users must:

  • Comply with LinkedIn's Terms of Service
  • Respect robots.txt directives
  • Follow applicable data protection laws (GDPR, CCPA, etc.)
  • Use data responsibly and ethically

The actor creator is not responsible for how users utilize the extracted data.

Data Accuracy

  • Data is extracted as-is from LinkedIn Ad Library
  • Ad availability may change between scraping sessions
  • Some fields may be null if not present in the ad
  • The detail object depends on the detail page structure if LinkedIn changes it, fields may return null
  • Video URLs include all quality variants with bitrate info

Rate Limiting

  • Built-in configurable delays between pages (default 2s)
  • Retry logic with exponential backoff handles temporary failures
  • HTTP 429 responses trigger automatic wait (default 5s)
  • Proxy usage strongly recommended for large-scale operations or when fetchAdDetail is enabled

πŸ’¬ Support & Contact

Get Help

Social Media

🎬 Video & Media Tools

YouTube Transcript & Metadata Extractor Extract complete video transcripts with timestamps and comprehensive metadata.

YouTube Full Channel, Playlists, Shorts, Live Extract complete playlist information with all video details from any YouTube playlist.

Zoom Scraper | πŸŽ₯ Downloader & πŸ“„ Transcript Extract Zoom meeting recordings, transcripts, and metadata.

Loom Scraper | πŸŽ₯ Downloader & πŸ“„ Transcript Download Loom videos and extract transcripts.

🏠 Real Estate Data

PropertyFinder Scraper Extract real estate property listings from PropertyFinder across UAE, Saudi Arabia, Bahrain, Egypt, and Qatar.

Idealista Scraper API Advanced Idealista property data extraction with API access.

Idealista Scraper Extract Spanish real estate listings from Idealista.

πŸ› οΈ Developer & Security Tools

Screenshot Fast, reliable webpage screenshots with customizable options.

Ultimate Screenshot Advanced screenshot tool with full-page capture, custom viewports, and quality controls.

Network Security Scanner Scan websites for security vulnerabilities and get comprehensive security reports.

πŸ“± Social Media Tools

Facebook Ads Scraper Pro Extract Facebook ads data for competitor analysis and market research.

AI Contact Intelligence Extractor Extract emails, phones, contacts & custom data using AI.


Ready to extract LinkedIn ad data? Start using LinkedIn Ad Library Scraper now!