LinkedIn Ad Library Scraper — Ads, Targeting & Reach | $1.75/1k avatar

LinkedIn Ad Library Scraper — Ads, Targeting & Reach | $1.75/1k

Pricing

from $1.40 / 1,000 ads

Go to Apify Store
LinkedIn Ad Library Scraper — Ads, Targeting & Reach | $1.75/1k

LinkedIn Ad Library Scraper — Ads, Targeting & Reach | $1.75/1k

Scrape the public LinkedIn Ad Library without an account: company advertiser, ad format, ad text, headline and creative, plus optional details: company page, CTA, landing URL, first/last shown dates, impressions by country and targeting. Search by keyword, advertiser, country and date.

Pricing

from $1.40 / 1,000 ads

Rating

0.0

(0)

Developer

Raffy

Raffy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

What does LinkedIn Ad Library Scraper do?

Get the ads companies run on LinkedIn as clean spreadsheet rows. The fast basic row comes straight from the search results: ad id, advertiser, ad format, ad text, headline, image or video poster and carousel cards. Switch on Include ad details and every ad also gets its advertiser's company page, the "Paid for by" entity, ad format (single image, video, carousel, document, text...), the full ad copy, headline, call-to-action button, landing URL, image and video links, the first and last day the ad was shown, the impressions range with the share per country, and the targeting the advertiser chose (language, locations, and which audience, company, job, education and demographic criteria were used).

Search the LinkedIn Ad Library by keyword, by advertiser (company) name or by payer, narrow it by country and date range, or paste Ad Library URLs and ad ids, and scrape LinkedIn ads into JSON, CSV or Excel, or read them from the Apify API. It works as a practical LinkedIn Ad Library API for marketers, agencies, analysts and AI agents: no LinkedIn account, no login, no cookies, nothing to install.

It reads only the public LinkedIn Ad Library, the pages LinkedIn shows to anyone who is not signed in. Only ads run by company pages are returned. Ads posted by individual members (including "thought-leader" ads, where a company promotes an employee's post) are skipped and never saved, so no member names, headlines, photos or profile links ever reach your dataset.

$1.75 per 1,000 ads (basic rows), $2.95 per 1,000 with details, plus $0.005 per run. Platform compute and residential proxy included.

Use cases for this LinkedIn ads scraper

  • Competitor ad monitoring. Enter a competitor's name in Advertiser and schedule a weekly run: see every new creative, its CTA, landing page and how long it ran (firstShown, lastShown).
  • Creative research and swipe files. Collect adText, headline, callToAction and imageUrl/videoUrl for a keyword like cybersecurity or payroll and see which hooks and formats B2B advertisers use.
  • Targeting insights. targetingLocationsIncluded, targetingLanguage and targetingParameters show where and how a company aims its LinkedIn budget; impressionsByCountry shows where the ads were actually seen.
  • Lead generation for agencies. Companies advertising on LinkedIn have a B2B marketing budget. Search your niche, group rows by advertiserName and advertiserUrl, and build a prospect list of active advertisers.
  • Market and campaign research. Track how many ads a category runs per month with the date range filter, and which landing pages (landingUrl) they send traffic to.
  • AI agents and automations. Call it with {"advertiser": "HubSpot", "maxItems": 50} from an MCP client, n8n, Make or Zapier and get structured rows back.

What data can LinkedIn Ad Library Scraper extract?

One row per ad. Fields marked D are filled only with Include ad details on (or when you give ad URLs/ids); detailsIncluded tells you which kind of row you have. The Overview table shows advertiserName, adFormat, adText, callToAction, landingUrl, firstShown, lastShown, impressionsRange, advertiserUrl, url, status and error.

Ad and advertiser

FieldTypeDescription
adIdstringLinkedIn's numeric ad id, e.g. 1601068074.
urlstringThe ad's Ad Library page, https://www.linkedin.com/ad-library/detail/<adId>.
advertiserNamestringCompany page that ran the ad.
advertiserUrlstringD The company's LinkedIn page.
advertiserCompanyIdstringD Numeric LinkedIn company id.
advertiserLogoUrlstringCompany logo image URL.
paidBystringD The entity in the "Paid for by" line.

Creative

FieldTypeDescription
adFormatstringSingle Image Ad, Video Ad, Carousel Ad, Document Ad, Text Ad, Event Ad, ...
creativeTypestringLinkedIn's internal code, e.g. SPONSORED_STATUS_UPDATE, SPONSORED_VIDEO, SPONSORED_UPDATE_CAROUSEL.
adTextstringAd copy (introductory text), line breaks kept. Basic rows carry LinkedIn's preview, which is cut after about 150 characters (ends with …); with details it is the full text.
headlinestringHeadline under the image or video.
callToActionstringD Button text, e.g. Learn more, Download, Sign Up, Register.
landingUrlstringD Where the ad sends people (LinkedIn's own tracking parameter removed). Empty for ads without a link, e.g. lead-gen form ads.
imageUrlstringMain image, or the poster frame of a video.
videoUrlstringD Highest-quality MP4 of a video ad.
carouselCardsarrayCarousel cards: title, imageUrl, and with details landingUrl.
detailsIncludedbooleantrue when the row was built from the ad's detail page (billed with the extra Ad details event), false for a basic row.

Dates, reach and targeting

FieldTypeDescription
firstShownstringD First day the ad was shown, YYYY-MM-DD.
lastShownstringD Last day the ad was shown, YYYY-MM-DD.
impressionsRangestringD Total impressions as LinkedIn reports them, e.g. < 1k, 1k-5k, 100k-250k.
impressionsByCountryarrayD Share of impressions per country: country, share (e.g. 28%).
targetingLanguagestringD Targeted language(s).
targetingLocationsIncludedarrayD Targeted countries, regions and cities.
targetingLocationsExcludedarrayD Excluded locations.
targetingParametersarrayD Each targeting category (Audience, Demographic, Company, Education, Job, Member Interests and Traits) with targeted and excluded flags.

LinkedIn publishes dates, impressions and targeting for ads that were shown in the EU (Digital Services Act transparency). For ads shown only outside the EU those fields are empty.

Row status

FieldTypeDescription
statusstringok, not_found or error (below).
errorstringReason when status is not ok.
scrapedAtstringISO 8601 time the row was written.
statusMeaningBilled?
okAn ad run by a company page.Yes
not_foundLinkedIn answered, but there is nothing to return: an unknown ad id, a search with no ads, or an ad posted by an individual member (skipped for privacy).No
errorLinkedIn could not be read after retries. error says why.No

How to scrape the LinkedIn Ad Library

  1. Open the Actor and click Try for free.
  2. Type a Keyword and/or an Advertiser (company) name - or paste LinkedIn Ad Library URLs or ad ids into Ad Library URLs or ad ids.
  3. Optional: add Countries (two-letter codes such as US, DE, GB) and a Date range (last 30 days, current month, current or last year, or your own start and end date).
  4. Set Maximum results (the default 20 shows you the output in about a minute).
  5. Click Start, then open the Output tab or export the dataset as JSON, CSV, Excel, XML or HTML.

To automate it, use the API tab (Node.js, Python, curl) or add a Schedule.

Input

FieldTypeDefaultDescription
querystring-Keyword or phrase from the ad copy, e.g. cybersecurity.
advertiserstring-Company/advertiser name, e.g. Microsoft. Works alone or with a keyword.
payerstring-The "Paid for by" entity.
countriesarray of stringsallISO two-letter codes of the countries where the ads were shown.
dateRangestringalllast-30-days, current-month, current-year, last-year or custom-date-range.
startDate / endDatestring-YYYY-MM-DD for a custom range (LinkedIn keeps the last 12 months).
startUrlsarray of stringsone example searchAd Library search URLs (all filters kept), ad URLs or bare ad ids. The example is skipped as soon as you fill in Keyword, Advertiser or Paid for by.
maxItemsinteger20Stop after this many ads.
includeDetailsbooleanfalseOpen every ad's detail page for the D fields (company page, landing URL, CTA, full text, dates, impressions, targeting). Billed as an extra Ad details event per ad.
datacenterProxybooleanfalseUse Apify's datacenter proxy instead of residential. LinkedIn blocks most datacenter IPs on the Ad Library; leave it off.
proxyConfigurationobjectApify Proxy, RESIDENTIALResidential proxy, included in the price. Leave the proxy country empty: the Actor picks the exit countries LinkedIn serves best (the ads you get depend on Countries, not on the proxy).

Example input:

{
"advertiser": "HubSpot",
"countries": ["US", "GB"],
"dateRange": "last-30-days",
"maxItems": 200,
"includeDetails": true
}

Output

A basic row (default, from the search results):

{
"url": "https://www.linkedin.com/ad-library/detail/1648309166",
"status": "ok",
"adId": "1648309166",
"advertiserName": "Ronin Advisory",
"adFormat": "Video Ad",
"advertiserLogoUrl": "https://media.licdn.com/dms/image/v2/D560BAQGOcZYU-wShwA/company-logo_100_100/...",
"creativeType": "SPONSORED_VIDEO",
"adText": "We took AI for a spin. Things escalated quickly. ...",
"headline": "The Chase Is Fictional. The Strategy Is Real.",
"imageUrl": "https://media.licdn.com/dms/image/v2/D5610AQFLKgWOj7niZQ/videocover-high/...",
"detailsIncluded": false,
"scrapedAt": "2026-10-19T09:53:54.568Z"
}

A row with Include ad details on (ad text shortened):

{
"url": "https://www.linkedin.com/ad-library/detail/1601068074",
"status": "ok",
"adId": "1601068074",
"advertiserName": "Quantum Security Defence",
"advertiserUrl": "https://www.linkedin.com/company/101691424",
"advertiserCompanyId": "101691424",
"paidBy": "Quantum Security and Defense Working Group lts",
"adFormat": "Video Ad",
"creativeType": "SPONSORED_VIDEO",
"adText": "You don't need to be a physicist to understand why quantum technology matters. ...",
"headline": "Quantum Business Bootcamp For Executives",
"callToAction": "Learn more",
"landingUrl": "https://quantumsecuritydefence.com/business-bootcamp/",
"imageUrl": "https://media.licdn.com/dms/image/v2/D4E10AQF15zCAsTRFng/videocover-high/...",
"videoUrl": "https://dms.licdn.com/playlist/vid/v2/D4E10AQF15zCAsTRFng/progressive-servable-video/...",
"firstShown": "2026-10-17",
"lastShown": "2026-10-18",
"impressionsRange": "< 1k",
"targetingLanguage": "English",
"targetingLocationsIncluded": ["Ireland", "United Kingdom"],
"targetingParameters": [
{ "parameter": "Audience", "targeted": false, "excluded": false },
{ "parameter": "Company", "targeted": true, "excluded": false },
{ "parameter": "Job", "targeted": true, "excluded": false }
],
"detailsIncluded": true,
"scrapedAt": "2026-10-19T08:49:17.920Z"
}

An ad posted by an individual member is never returned. Basic rows simply skip it; when a detail page reveals one, its row is free and carries no member data:

{
"url": "https://www.linkedin.com/ad-library/detail/1595579694",
"status": "not_found",
"error": "Ad posted by an individual LinkedIn member (member or thought-leader ad), not by a company page; skipped for privacy.",
"scrapedAt": "2026-10-19T08:47:21.862Z"
}

How much does it cost to scrape LinkedIn ads?

Pay per event, platform compute and residential proxy included:

EventPrice
Actor start$0.005 per run
Ad (status: ok company ad)$0.00175 per ad ($1.75 per 1,000)
Ad details (extra, only rows with detailsIncluded: true)$0.0012 per ad ($1.20 per 1,000)

Examples: the default 20-ad run costs $0.04; 1,000 basic ads cost $1.755; 1,000 ads with details $2.955; 10,000 ads with details $29.505. Ad URLs or ids you paste are always read from the detail page, so they bill both events. Rows with status not_found or error are never billed. Cap spending with Maximum results and the run's Max total charge; the Actor stops cleanly when either is reached.

Speed and reliability

LinkedIn answers requests from most server and many residential IP addresses with "blocked". The Actor uses Apify's residential proxy, checks every proxy session with one tiny request before using it, and prefers the exit countries LinkedIn currently serves best, so blocked addresses never cost you rows. A session that gets blocked or throttled later is dropped and the request is retried at once on the next checked session. Basic rows come 24 ads per search page, at about 200 ads per minute (500 ads in about 2.5 minutes); with details expect about 60 ads per minute. The default 20-ad run takes well under a minute.

Tips

  • One search shows ads in LinkedIn's order (newest first). For large advertisers, split by Countries or Date range to get more distinct ads.
  • Keyword searches for broad words (leadership, career) return many member posts, which are skipped; an Advertiser search or a business keyword gives more company ads per page.
  • Paste a search URL from the Ad Library in your browser to keep exactly the filters you set there.

Limitations

  • Only ads by company pages are returned; member and thought-leader ads are skipped by design.
  • Dates, impressions and targeting exist only for ads LinkedIn reports under EU transparency rules (ads shown in the EU); other ads have the creative and advertiser fields only.
  • LinkedIn keeps about 12 months of ads; custom date ranges outside that return nothing.
  • Impressions are ranges (e.g. 1k-5k), not exact numbers; spend is not published by LinkedIn.
  • Ads without a destination link (lead-gen forms, some video ads) have no landingUrl.
  • The run needs Apify Proxy: residential is on by default and included in the price.
  • Basic rows include only ads whose advertiser shows a company logo; a company without a logo appears only with Include ad details on.

FAQ

Do I need a LinkedIn account or cookies? No. The Actor reads the public LinkedIn Ad Library without logging in.

Is it legal to scrape the LinkedIn Ad Library? The Ad Library is a public transparency tool, and the Actor collects only ads run by companies, no member data. You are responsible for how you use the data; read the notice below and LinkedIn's terms.

Basic rows or details? Basic rows answer "who advertises what": advertiser, format, text preview, headline, creative. Turn on details when you need landing pages, CTAs, run dates, impressions or targeting.

Why did I get fewer rows than Maximum results? The search had fewer company ads, some results were member ads (skipped, free), or the run's charge limit was reached. The run log says which.

Can I get the ad spend? No. LinkedIn does not publish spend, only impression ranges.

Can an AI agent call it? Yes. With no input at all it returns 20 recent cybersecurity ads. Agents can pass query, advertiser, countries and dateRange as plain values, and every row says whether it is data (ok), an empty answer (not_found) or a failure (error).

How fresh is the data? Every run reads LinkedIn live; nothing is cached.

This Actor extracts only ads that LinkedIn publishes in its public Ad Library to visitors who are not signed in. It does not log in, does not solve challenges, and does not extract member data: ads posted by individual members are skipped, and no names, headlines, photos or profile links of members are returned. Ad copy is written by advertisers and can still mention a person; personal data is protected by the GDPR in the European Union and by other laws worldwide, so do not use such data without a legitimate reason. You are responsible for complying with LinkedIn's terms of service and applicable law when you use the extracted data.

This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by LinkedIn Corporation. LinkedIn is a trademark of LinkedIn Corporation; all trademarks belong to their respective owners.