LinkedIn Ad Library Scraper avatar

LinkedIn Ad Library Scraper

Pricing

from $2.00 / 1,000 ad scrapeds

Go to Apify Store
LinkedIn Ad Library Scraper

LinkedIn Ad Library Scraper

Extract every ad a company runs on LinkedIn from the public Ad Library: ad copy, creative, headline, destination URL, run dates, estimated impressions per country and the advertiser's targeting. Search by advertiser or keyword.

Pricing

from $2.00 / 1,000 ad scrapeds

Rating

0.0

(0)

Developer

PulseData

PulseData

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

3

Monthly active users

an hour ago

Last modified

Share

This actor extracts the ads a company runs on LinkedIn from the public LinkedIn Ad Library: ad copy, creative, headline, destination URL, run dates, estimated impressions per country and the targeting the advertiser selected. You search by advertiser, payer, keyword, Ad Library search URL or single ad ID, and get one JSON item per ad. It costs $2 per 1,000 ads, plus $3 per 1,000 ads for the detail page when includeDetails is on, plus $0.01 per run. Turn details off to pay only for the ads.

No LinkedIn account or cookies are needed. The Ad Library is public and the actor never logs in.

Features

  • Scrape all LinkedIn ads of a company by advertiser page name.
  • Find every LinkedIn ad paid for by a company group with matchBy: payer, which catches subsidiaries whose ads the parent pays for.
  • Search LinkedIn ads by keyword in the ad text.
  • See LinkedIn ad targeting and impressions per country for ads under the EU transparency rules.
  • Filter LinkedIn ads by country and date range: last 30 days, this month, this year, last year or a custom range.
  • Export LinkedIn Ad Library data to CSV, Excel or JSON through the Apify dataset.

Use cases

  • B2B competitor research: every creative a competitor runs, how long each ran, and which countries got the impressions.
  • Audience research: LinkedIn discloses whether the advertiser targeted by company, job, education, demographics or interests, plus the language and locations, including exclusions.
  • Ad copy and creative research: full ad text and image assets for swipe files or LLM analysis.
  • Agency pitches: bring the prospect's current LinkedIn ads, run dates and reach to the meeting.
  • Lead generation: check which companies advertise on LinkedIn at all. Pass a list of names and set maxAdsPerQuery to 1.
  • Brand monitoring: catch ads that mention your brand with matchBy: keyword.

Input

{
"queries": ["Salesforce"],
"matchBy": "payer",
"countryCode": "de",
"dateOption": "last-30-days",
"maxAdsPerQuery": 200,
"includeDetails": true
}
FieldTypeDefaultMeaning
queriesarray(required)Advertiser names, keywords, Ad Library search URLs, ad URLs or bare ad IDs, one per line
matchByselectadvertiseradvertiser (the LinkedIn page running the ad), payer (the entity that paid) or keyword (the ad text)
countryCodestringemptyISO code such as us, de, gb. Empty means all countries
dateOptionselectany timelast-30-days, current-month, current-year, last-year or custom-date-range
startDate, endDatedateemptyYYYY-MM-DD, used with the custom range
maxAdsPerQueryinteger1000 means no limit
includeDetailsbooleantrueOpens each ad's detail page for impressions, targeting, full copy and destination URL
proxyConfigurationobjectApify UnblockerLeave as is unless you know your proxies get through

An Ad Library search URL you built in the browser is used with its filters as given.

Output

One item per ad:

{
"query": "Zalando SE",
"adId": "1552638623",
"url": "https://www.linkedin.com/ad-library/detail/1552638623",
"advertiserName": "ZEOS",
"advertiserProfileUrl": "https://www.linkedin.com/company/112941442",
"advertiserCompanyId": "112941442",
"paidBy": "Zalando SE",
"adType": "Single Image Ad",
"commentary": "What future is business creating today? Join our live session on loyalty in the agentic era.",
"headline": "90 minutes, live online",
"destinationUrl": "https://zeos.eu/loyalty-in-the-agentic-era",
"imageUrls": ["https://media.licdn.com/dms/image/..."],
"availabilityText": "Ran from Jun 19, 2026 to Jul 6, 2026",
"firstShown": "2026-06-19",
"lastShown": "2026-07-06",
"totalImpressions": "5k-10k",
"impressionsLow": 5000,
"impressionsHigh": 10000,
"impressionsByCountry": [
{ "country": "United Kingdom", "sharePercent": 18 },
{ "country": "Germany", "sharePercent": 15 }
],
"topCountry": "United Kingdom",
"targeting": {
"language": "Targeting includes English",
"location": "Targeting includes European Union | Targeting excludes Kazakhstan, India, Russia",
"parameters": [
{ "parameter": "Company", "targeted": true, "excluded": false },
{ "parameter": "Job", "targeted": true, "excluded": false }
]
},
"hasTransparencyData": true,
"scrapedAt": "2026-09-25T08:00:00.000Z"
}

Items also include advertiserLogoUrl, creativeType and a detailed flag. The keys inside targeting follow the headings LinkedIn shows on the ad, so they can vary. Without includeDetails you get the card data only: advertiser, ad type, copy as shown on the card, headline and images.

What LinkedIn publishes

LinkedIn shows the ad itself for every ad in the library, but impressions, run dates and targeting only for ads that fall under the EU transparency rules. A US-only campaign usually has an "About the ad" box and nothing else. hasTransparencyData tells you which case you have. If you mainly want impressions and targeting, set a European countryCode.

Pricing

EventPrice
ad-scraped, per ad returned$0.002
ad-detail-scraped, per ad detail page loaded (only with includeDetails on)$0.003
apify-actor-start, per run$0.01 (charged again per GB of memory above 1 GB)

The detail event is charged once for every ad whose detail page loads, whether or not LinkedIn publishes impressions and targeting for it, because the page has to be fetched either way. Detail pages that time out or are blocked are not charged. With includeDetails off there is no detail charge at all.

Worked example: 200 ads of one advertiser with includeDetails on cost 200 × $0.002 + 200 × $0.003 + $0.01 = $1.01. The same run without details costs $0.41.

Pricing change on 2026-10-13: until 2026-10-12 the detail event is charged only for ads that carry impressions, run dates or targeting. From 2026-10-13 it is charged for every detail page that loads, as described above. The prices per event do not change.

FAQ

Why does an advertiser search return unrelated companies? LinkedIn matches advertiser names loosely. Use matchBy: payer for the legal entity, or paste an Ad Library search URL.

Can I get all ads of a company, not just 100? Set maxAdsPerQuery to 0. The actor follows LinkedIn's own pagination (24 ads per page) until the last page. Large advertisers have thousands of ads and the run charges per ad, so set a maximum charge on the run.

Which proxies does it need? LinkedIn answers datacenter and residential proxies with a challenge page, so the actor uses the Apify Unblocker by default. If the configured proxy is not available on your account, it falls back to the Unblocker. A run of 100 ads with details makes roughly 105 requests.

How fast is it? Detail pages are fetched four at a time. Expect roughly 2 to 4 minutes per 100 ads with details and a few seconds per 100 without.

How current is the data? Each run reads the Ad Library live at that moment.

Can I schedule it or use it via API? Yes. Save a task with your queries, add an Apify schedule, and pull the dataset as JSON, CSV or Excel through the API, or send it to Google Sheets, Make, Zapier or n8n.

What can it not do? It does not return spend or clicks, and it cannot see impressions or targeting for ads outside the EU transparency rules.

Example pages