LinkedIn Ad Library Scraper avatar

LinkedIn Ad Library Scraper

Pricing

from $3.00 / 1,000 ads

Go to Apify Store
LinkedIn Ad Library Scraper

LinkedIn Ad Library Scraper

LinkedIn Ad Library Scraper pulls the ads any company runs on LinkedIn, by company, keyword or payer. Returns ad text, headline, image or video, advertiser and payer, plus run dates, impressions by country and targeting for ads shown in the EU. Monitor mode returns only new ads.

Pricing

from $3.00 / 1,000 ads

Rating

0.0

(0)

Developer

Agnes Maina

Agnes Maina

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

LinkedIn Ad Library Scraper: competitor ads with copy, pictures, videos, impressions and targeting

LinkedIn Ad Library Scraper is an Apify Actor that pulls the ads a company runs on LinkedIn from the public Ad Library, by company name, keyword or payer, and returns the ad itself, who paid for it, and, where LinkedIn publishes them, its run dates, impressions by country and targeting. No LinkedIn account or cookies.

Pricing

EventPriceYou pay when
Actor start$0.00005once per run
Ad$0.003an ad is delivered with its ID, its advertiser and its content (text, headline, picture or video)

That is $3 per 1,000 ads. Ads with no text, picture or video are delivered free, with their link.

The ad itself, with what LinkedIn knows about it

  • Every ad gives the advertiser, the payer, the ad text, the headline, the picture or the video, and where the ad links to.
  • Video ads give the MP4 LinkedIn serves, highest quality, and the poster frame.
  • Message ads give the sender, the full message and the button text.
  • Ads shown in the European Union also give the first and last day they ran, the impressions range, the share of impressions per country, and the targeting: languages, locations, and which of audience, demographic, company, education, job and interests were targeted or excluded. LinkedIn publishes this for EU-shown ads only; a company that advertises in Europe has it on most ads, a US-only advertiser on none.
{
"advertiserName": "HubSpot",
"payer": "HubSpot, Inc.",
"adFormat": "Single Image Ad",
"text": "$1M to $100M ARR in 18 months. Stuart Shingler, Legora, on how fast-growth companies build trust while they innovate. London, 17 November.",
"headline": "GROW Europe 2026 · London · Register Today",
"imageUrl": "https://media.licdn.com/dms/image/v2/D4D10AQGshA0JBhq0cA/image-shrink_1280/...",
"clickUrl": "https://www.hubspot.com/grow-europe?utm_source=linkedin&utm_medium=paid&...",
"firstShown": "2026-09-23",
"lastShown": "2026-09-25",
"totalImpressions": "5k-10k",
"impressionsByCountry": [
{ "country": "United Kingdom", "share": 91 },
{ "country": "Ireland", "share": 9 }
],
"targeting": {
"language": { "includes": ["English"], "excludes": [] },
"location": { "includes": ["Ireland", "United Kingdom"], "excludes": [] },
"parameters": [
{ "parameter": "Company", "targeted": true, "excluded": true },
{ "parameter": "Job", "targeted": true, "excluded": false }
]
}
}

How it works

company names, keywords, payers or Ad Library URLs
|
v
Ad Library search, 24 ads per page, newest first
|
v
for each ad, read its detail page: advertiser link, payer, dates,
impressions and targeting where LinkedIn publishes them
|
+--> ID, advertiser and content --> Ad (charged)
|
+--> no content --> delivered free with the link

The Ad Library answers browsers only, so pages load in a headless browser on residential proxy, with pictures, fonts and scripts blocked to keep it fast. Turn off withDetails to skip the detail pages; the run is then about five times faster and returns what the search results show.

What data does it extract

FieldWhat it is
adId, adUrlThe ad's ID and page in the Ad Library
advertiserName, advertiserId, advertiserType, advertiserUrlThe advertiser, its LinkedIn company ID or member slug, and its page
payerWho paid for the ad, as LinkedIn states it
adFormat, creativeTypeSingle Image Ad, Video Ad, Message Ad, LinkedIn Article Ad, Job Ad, and LinkedIn's creative type code
text, headline, descriptionThe ad copy
imageUrl, imagesThe ad's picture, and every picture on it
videoUrl, videoPosterUrlThe MP4 and poster frame of a video ad
clickUrlWhere the ad links to
messageSender, callToActionSender and button text of a Message Ad
firstShown, lastShownWhen the ad ran, for ads shown in the EU
totalImpressions, impressionsLow, impressionsHighLinkedIn's impressions range, as text and as numbers
impressionsByCountryEach country with its share of impressions in percent
targetingLanguages, locations and other facets with includes and excludes, and which parameter groups were targeted or excluded
detailsReadTrue when the detail page was read
searchThe search that returned this ad
isNewIn monitor mode, true when the ad is new since your last run
charged, reasonWhether the row was charged, and why

What is NOT returned

  • Ad spend or budgets. LinkedIn does not publish them.
  • Run dates, impressions or targeting for ads that were not shown in the European Union. LinkedIn publishes these for EU-shown ads only.
  • Exact impression counts. LinkedIn gives a range such as 5k-10k.
  • The specific companies, job titles or audiences targeted. LinkedIn shows which parameter groups were used, not their values.
  • Clicks, engagement or landing page performance.
  • Ads LinkedIn has removed from the Ad Library.

Quick start

  1. Open the Actor and enter a competitor's name, for example HubSpot.
  2. Optionally choose countries and a date range.
  3. Run it and open the Ads table, or download JSON, CSV or Excel.
{ "companies": ["HubSpot"], "maxAdsPerSearch": 20 }

Monitor mode

Set onlyNewSinceLastRun to true and schedule the run daily or weekly. The first run delivers current ads up to your limit and remembers every ad it saw. Each later run delivers only ads that appeared since, marked isNew, and you pay only for those.

Input

{
"companies": ["HubSpot", "Salesforce"],
"keywords": ["webinar"],
"countries": ["DE", "FR"],
"dateOption": "last-30-days",
"maxAdsPerSearch": 100,
"withDetails": true,
"onlyNewSinceLastRun": false
}
FieldTypeDefaultDescription
companiesarrayAdvertiser names as they appear on LinkedIn
keywordsarrayWords that appear in the ad. Each keyword is its own search
payersarrayThe entity that paid for the ads
startUrlsarraySearch URLs copied from the Ad Library, with filters already set
countriesarrayallISO two-letter country codes such as DE or FR. Only ads shown in those countries. EU is not a code and matches nothing; list the member states instead
dateOptionstringlast-30-dayslast-30-days, current-month, current-year, last-year or custom-date-range with startDate and endDate
minImpressions, maxImpressionsintegerImpressions bounds. LinkedIn applies them to EU-shown ads only, so every other ad is dropped
maxAdsPerSearchinteger100Stop after this many ads per company, keyword, payer or URL, up to 5,000
withDetailsbooleantrueRead each ad's detail page for the payer, dates, impressions and targeting
onlyNewSinceLastRunbooleanfalseMonitor mode, deliver only ads new since the last run of the same search
proxyConfigurationobjectApify residentialThe Ad Library blocks datacenter IPs

Output

One full record from a real run.

{
"adId": "1558773703",
"adUrl": "https://www.linkedin.com/ad-library/detail/1558773703",
"advertiserName": "HubSpot",
"advertiserId": "68529",
"advertiserType": "company",
"advertiserUrl": "https://www.linkedin.com/company/68529",
"payer": "HubSpot, Inc.",
"adFormat": "Single Image Ad",
"creativeType": "SPONSORED_STATUS_UPDATE",
"text": "$1M to $100M ARR in 18 months. Stuart Shingler, Legora, on how fast-growth companies build trust while they innovate. London, 17 November.",
"headline": "GROW Europe 2026 · London · Register Today",
"description": null,
"imageUrl": "https://media.licdn.com/dms/image/v2/D4D10AQGshA0JBhq0cA/image-shrink_1280/B4DaDP9g74HMAc-/0/1790195405027/2png?e=2147483647&v=beta&t=uu-v3Wv8B56hQBJAD5VjRRV3DN-EoRbg-UMe2X3kaSk",
"images": [
"https://media.licdn.com/dms/image/v2/D4D10AQGshA0JBhq0cA/image-shrink_1280/B4DaDP9g74HMAc-/0/1790195405027/2png?e=2147483647&v=beta&t=uu-v3Wv8B56hQBJAD5VjRRV3DN-EoRbg-UMe2X3kaSk"
],
"videoUrl": null,
"videoPosterUrl": null,
"clickUrl": "https://www.hubspot.com/grow-europe?utm_source=linkedin&utm_medium=paid&utm_campaign=Marketing_Registrations_EN_EMEA_VARIOUS_GROW-Europe-2026_prospecting_cm1013_ProgramBudget_v1a&utm_id=805100113&hsa_acc=517582366&hsa_cam=805100113&hsa_grp=891556833&hsa_ad=1558773703&hsa_net=linkedin&hsa_ver=3",
"messageSender": null,
"callToAction": null,
"firstShown": "2026-09-23",
"lastShown": "2026-09-25",
"totalImpressions": "5k-10k",
"impressionsLow": 5000,
"impressionsHigh": 10000,
"impressionsByCountry": [
{ "country": "United Kingdom", "share": 91 },
{ "country": "Ireland", "share": 9 }
],
"targeting": {
"language": { "includes": ["English"], "excludes": [] },
"location": { "includes": ["Ireland", "United Kingdom"], "excludes": [] },
"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 }
]
},
"detailsRead": true,
"search": "accountOwner \"HubSpot\"",
"isNew": null,
"charged": true,
"reason": "ad with advertiser and content",
"scrapedAt": "2026-09-25T12:12:10.512Z"
}

Use from any MCP agent

https://mcp.apify.com/?tools=agnes.developer.queen/linkedin-ad-library-scraper

Ask the agent what a competitor is advertising on LinkedIn this month. It should read text, headline, imageUrl or videoUrl, clickUrl, and totalImpressions and targeting where present.

Integrations

Call it once per row from Clay, n8n, Make or your own code. This returns the dataset in the same request.

POST https://api.apify.com/v2/acts/agnes.developer.queen~linkedin-ad-library-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN
Content-Type: application/json
{ "companies": ["HubSpot"], "maxAdsPerSearch": 20 }

It also works with apify-client, schedules and webhooks.

Use cases

  • B2B marketing teams. Pull every ad three competitors ran in Europe this month, with impressions and the countries they went to.
  • Agencies pitching LinkedIn ads. Open the pitch with the prospect's own ads, their run dates and what they targeted.
  • Competitive intelligence. Schedule monitor mode weekly on ten companies and get only the new ads.
  • Copywriters. Build a swipe file of a category's ads from keyword searches, with the picture or video of each.
  • Sales teams. Search a keyword in a country to find companies that advertise there, then see what they say.

FAQ

Does it return ad spend?

No. LinkedIn does not publish spend. You get the impressions range for ads shown in the EU.

Why do some ads have no dates, impressions or targeting?

LinkedIn publishes those only for ads shown in the European Union. Ads shown elsewhere come with the advertiser, the payer and the ad itself. Set countries to EU codes to get ads that carry them.

Why was an ad delivered free?

LinkedIn showed no text, picture or video for it. The reason field says so, and adUrl still opens it.

Do I need a LinkedIn account or cookies?

No. The Actor reads the public Ad Library.

Can I filter by impressions?

Yes, with minImpressions and maxImpressions. LinkedIn applies the filter to EU-shown ads, so ads without published impressions are dropped.

How often should I run monitor mode?

Weekly is enough for most advertisers. Daily suits companies that launch campaigns often. Each run charges only for new ads.