LinkedIn Ads Library Scraper: Any Advertiser's Ads · Apify
LinkedIn Ad Library Scraper (LinkedIn Ads Library) avatar

LinkedIn Ad Library Scraper (LinkedIn Ads Library)

Pricing

from $2.00 / 1,000 ad scrapeds

Go to Apify Store
LinkedIn Ad Library Scraper (LinkedIn Ads Library)

LinkedIn Ad Library Scraper (LinkedIn Ads Library)

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

16

Total users

5

Monthly active users

an hour ago

Last modified

Features

Limited permissions

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. No LinkedIn account or cookies are needed.

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.
  • Track new LinkedIn ads of a competitor with a scheduled run that returns only ads not delivered before.
  • Export LinkedIn Ad Library data to CSV, Excel or JSON through the Apify dataset.

Use cases

  • B2B competitor and creative research: every creative a competitor runs, how long each ran, which countries got the impressions, and the full ad text for swipe files or LLM analysis.
  • Audience research: whether the advertiser targeted by company, job, education, demographics or interests, plus language and locations, including exclusions.
  • Agency pitches: a prospect's current LinkedIn ads, run dates and reach.
  • 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; a country name such as Germany is converted. 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
onlyNewAdsbooleanfalseMonitor mode: output and charge only ads not delivered on an earlier run
monitorStoreNamestringemptyKey-value store that remembers delivered ads. Empty means a name derived from the queries and filters

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

Track new LinkedIn ads of a competitor

Turn on onlyNewAds to get only the ads an advertiser launched since your last run:

{ "queries": ["Salesforce"], "matchBy": "payer", "maxAdsPerQuery": 0, "onlyNewAds": true }

The actor stores the ID of every delivered ad in a key-value store in your Apify account. On later runs those ads are skipped before their detail page is fetched, so they are neither output nor charged. The first run returns every ad up to maxAdsPerQuery and fills the store. Save the input as a task, add an Apify schedule and an integration (email, Slack, Google Sheets, Make, Zapier or a webhook).

  • maxAdsPerQuery sets how far down the list a run looks, and ads seen before count towards it. Use 0 to watch every ad.
  • Without monitorStoreName each different input keeps its own history; the run log names the store.
  • An ad cut off by the run timeout or the maximum cost per run is not remembered and comes on the next run.
  • Schedule one run per store; two parallel runs can both deliver the same new ad.

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 impressions, run dates and targeting only for ads 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. For impressions and targeting, set a European countryCode. Spend and clicks are not published.

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 for every ad whose detail page loads, whether or not LinkedIn publishes impressions and targeting for it. Detail pages that time out or are blocked are not charged.

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.

In monitor mode (onlyNewAds) only new ads are charged. A daily run with includeDetails on that finds 10 new ads costs 10 × $0.002 + 10 × $0.003 + $0.01 = $0.06, and a run with nothing new costs only the $0.01 start.

Until 2026-10-12 the detail event was charged only for ads that carry impressions, run dates or targeting; the prices per event did 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. 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 and falls back to it if the configured proxy is not available on your account.

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.

Use it from Claude, ChatGPT or Cursor (Apify MCP server)

Any AI assistant that speaks the Model Context Protocol can call this actor. Add the Apify MCP server with this URL:

https://mcp.apify.com?tools=pulsedata/linkedin-ad-library-scraper

Then ask in plain language, for example "show the LinkedIn ads HubSpot ran in Germany in the last 30 days", and the assistant fills the input, runs the actor and reads the ads back. Billing is the same as a normal run.

Paying from an AI agent without an Apify account (x402 and Skyfire)

An agent can buy a prepaid, spend-capped Apify token at Apify AGI, paid in USDC through x402 or from a Skyfire wallet, and use it for both the API and the MCP server. This actor runs with limited permissions, so it works with these tokens. The smallest token is $1, tokens expire 14 days after purchase, and Apify marks agentic payments as experimental.

Example pages