LinkedIn Ad Library Scraper — Competitor B2B Ads & Creatives avatar

LinkedIn Ad Library Scraper — Competitor B2B Ads & Creatives

Pricing

from $1.10 / 1,000 ad scrapeds

Go to Apify Store
LinkedIn Ad Library Scraper — Competitor B2B Ads & Creatives

LinkedIn Ad Library Scraper — Competitor B2B Ads & Creatives

Scrape the LinkedIn Ad Library with no login: competitor ads, creatives, headlines, CTAs, advertiser & paying entity, run dates, total impressions, impressions by country and full targeting. Search by keyword, company or payer. Monitoring mode returns only new ads. Export JSON, CSV, Excel.

Pricing

from $1.10 / 1,000 ad scrapeds

Rating

0.0

(0)

Developer

Scrape Sage

Scrape Sage

Maintained by Community

Actor stats

8

Bookmarked

35

Total users

10

Monthly active users

3 days ago

Last modified

Share

LinkedIn Ad Library Scraper — Competitor B2B Ads, Creatives & Impressions

Extract every ad your competitors are running on LinkedIn — full creatives, headlines, ad copy and CTAs, plus the data other scrapers miss: the advertiser's company ID and the legal paying entity on virtually every ad, and exact run dates, total impressions, impressions by country and complete targeting (language, locations, audience, company, job and interest facets) wherever LinkedIn publishes them — which is primarily for EU-served ads (see the measured coverage table). Search by keyword, company, or payer, and turn on Monitoring mode to capture only newly-launched ads on a schedule.

No login, no cookies, no browser — fast JSON extraction straight from LinkedIn's public Ad Library.

Why this LinkedIn Ad Library scraper?

Most LinkedIn ad scrapers only read the search cards and return a name, a headline, and an image. This actor opens every ad's detail page and ships the richest dataset in the category — the fields that actually drive competitive and B2B intelligence:

DataTypical scrapersThis actor
Advertiser name + LinkedIn company IDpartial
Paying entity ("Paid for by…")
Headline, full ad copy, CTA buttonpartial
Destination / landing URL (with the advertiser's own UTMs)
Creative type (single image, video, carousel, document, event…)
Image & video creative URLspartial
Exact first/last shown dates
Total impressions range✅ when LinkedIn publishes it (EU-served ads)
Impressions by country✅ when LinkedIn publishes it (EU-served ads)
Full targeting (language, locations, audience, company, job, interests)✅ when LinkedIn publishes it (EU-served ads)
Search by keyword and company and payerpartial
Monitoring mode — only new ads each run

Use cases

  • Competitor ad intelligence — see exactly which ads a competitor is running, the creative, the offer, the CTA, and where the click goes. Track their messaging and campaign cadence over time.
  • B2B creative & messaging research — build a swipe file of the best-performing B2B ads by topic or industry; learn the hooks, formats, and CTAs that work in your space.
  • Demand-gen & paid-social benchmarking — compare impressions, run lengths, and targeting across competitors to size their spend and reach.
  • Agency competitive decks — pull a client's whole category in minutes: every advertiser, every live ad, with impressions and targeting.
  • Lead & partner signals — discover which companies are actively advertising (and at what scale) on LinkedIn — a strong buying/growth signal for sales and BD.
  • DSA / ad-transparency research — the LinkedIn Ad Library is published for transparency; this actor structures it for analysis at scale.

How to use

  1. Sign up for Apify — the free plan is enough to try this actor.
  2. Open the LinkedIn Ad Library Scraper, enter keywords, company IDs/URLs, or payer names (or paste Ad Library URLs), and click Start.
  3. Watch results stream into the dataset table.
  4. Export as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the Apify API.

Input

{
"keywords": ["marketing automation"],
"companyIds": ["68529"],
"companyUrls": ["https://www.linkedin.com/company/1337"],
"payers": ["HubSpot, Inc."],
"countries": ["US", "GB"],
"enrichAdDetails": true,
"maxAds": 200,
"monitorMode": false
}
  • keywords — search the Ad Library by keyword (matches advertiser names and ad copy). Each keyword is one search.
  • companyIds — numeric LinkedIn company IDs to pull every ad an advertiser is running (e.g. 68529 = HubSpot).
  • companyUrls — LinkedIn company URLs or Ad Library URLs; numeric /company/<id> and ?companyIds= links resolve automatically.
  • payers — search by the "Paid for by" entity, useful when an advertiser pays under a different legal name.
  • startUrls — paste Ad Library search URLs (/ad-library/search?…) or individual ad URLs (/ad-library/detail/<id>).
  • countries / dateFrom / dateTo — optional filters applied to every search.
  • enrichAdDetails (default true) — open each ad's detail page for the full record: advertiser company ID, paying entity, destination URL and creatives on essentially every ad, plus run dates, impressions, impressions by country and targeting where LinkedIn publishes them (EU-served ads — see coverage below). Turn off for a cheaper, cards-only run.
  • maxAds / maxAdsPerQuery — caps (0 = no limit).
  • monitorMode (default false) — output only ads not seen in previous runs; pair with Schedules to track new ads automatically.
  • proxyConfiguration — proxy settings (Apify Proxy by default).

Output

One record per ad (type: "ad"):

{
"type": "ad",
"adId": "1439476536",
"adUrl": "https://www.linkedin.com/ad-library/detail/1439476536",
"advertiserName": "HubSpot",
"advertiserCompanyId": "68529",
"advertiserCompanyUrl": "https://www.linkedin.com/company/68529",
"advertiserLogoUrl": "https://media.licdn.com/.../hubspot_logo",
"creativeType": "SPONSORED_STATUS_UPDATE",
"creativeTypeLabel": "Single image",
"headline": "Register for the webinar",
"bodyText": "Using AI in sales but seeing little impact? It's the missing context…",
"ctaText": "Learn more",
"destinationUrl": "https://hubs.la/Q04ktvQ90?utm_source=linkedin&utm_medium=paid",
"imageUrls": ["https://media.licdn.com/.../image-shrink_1280/..."],
"videoUrl": null,
"payingEntity": "HubSpot, Inc.",
"firstShownDate": "Jun 11, 2026",
"lastShownDate": "Jun 13, 2026",
"totalImpressions": "5k-10k",
"impressionsByCountry": [{ "country": "United States", "impressions": "2k-3k" }],
"targeting": {
"language": { "included": ["English"], "excluded": [] },
"location": { "included": ["United States", "United Kingdom"], "excluded": [] }
},
"targetingSummary": "Language: English · Location: United States, United Kingdom · …",
"searchType": "companyId",
"searchTerm": "68529",
"scrapedAt": "2026-06-13T12:00:00.000Z"
}

What to expect (field coverage)

The LinkedIn Ad Library is advertiser- and platform-populated, so many fields appear only when LinkedIn publishes them. The single biggest factor: impressions, run dates and targeting are disclosed mainly for ads served in the EU (they are published under the EU Digital Services Act). For a typical US/global advertiser those fields are simply not on the page.

Measured over 203 ads across three real runs (keyword marketing automation n=123, keyword cybersecurity n=40, company ID 68529 n=40):

FieldTypical coverageNotes
ad URL, ad ID, creative type, paying entity100%always present
ad copy (bodyText)99–100%
advertiser name85–100%
advertiser company ID73–100%some ads don't link a company page
CTA50–88%varies by ad format
creatives (imageUrls)45–74%InMail/text/video formats often carry no static image
headline45–78%many formats have no separate headline; the copy is the ad
destination URL38–50%only when the ad links off-platform
total impressions20–45%EU-served ads only
first / last shown dates20–45%EU-served ads only
targeting (language, location, audience…)20–45%EU-served ads only
impressions by country0–40%EU-served ads, and LinkedIn notes it can take up to 48h for new ads
video URLrareLinkedIn serves video behind a player, not as a direct file

A blank field means LinkedIn didn't publish that value for that ad — never that scraping failed. Every value present on the page is captured; nothing is dropped. If you specifically need impressions and targeting, filter to EU countries with the countries input for a much higher hit rate.

Automate & schedule

Run this actor on autopilot and pull results into your own stack:

  • Apify API — start runs, fetch datasets, and manage schedules over REST.
  • apify-client for JavaScript and apify-client for Python — official SDKs.
  • Schedules — run it daily/weekly to watch competitors for new ads. Turn on Monitoring mode and each scheduled run returns only ads it hasn't seen before — the scheduler triggers the run, the actor handles the de-duplication, no conflict between the two.
  • Webhooks — trigger downstream actions (Slack alert, CRM update, creative dashboard) the moment a new ad appears.
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });
const run = await client.actor('scrapesage/linkedin-ad-library-scraper').call({
companyIds: ['68529'],
enrichAdDetails: true,
monitorMode: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} new LinkedIn ads`);

Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

  • Make — multi-step automation scenarios.
  • Zapier — push new competitor ads straight into Slack, Notion, or your CRM.
  • Slack — get notified when a monitored competitor launches a new ad.
  • Google Drive / Sheets — auto-export every run to a spreadsheet.
  • Airbyte — pipe results into your data warehouse.
  • GitHub — trigger runs from commits or releases.

Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "list every LinkedIn ad HubSpot is running, with the offer, CTA and targeting" and let it run the scraper for you.

Agent-ready: autonomous payments (x402 & Skyfire)

This actor is agent-ready — AI agents can discover it, run it, and pay for it autonomously, with no Apify account and no human in the loop. It uses pay-per-event pricing and limited permissions, so it qualifies for Apify's agentic-payment standards:

  • x402 — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the Apify MCP server — no account, no API key.
  • Skyfire — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

More scrapers from scrapesage

Build a complete competitor ad-intelligence stack — see what your rivals run across every major ad platform, then go wider on B2B intel:

Tips

  • Whole-competitor sweep: pass a company ID (or a /company/<id> URL) to pull every live ad an advertiser is running, then keep enrichAdDetails on for impressions and targeting.
  • Category research: use a keyword (e.g. cybersecurity) to map every advertiser and ad in a topic. LinkedIn returns ads newest-first.
  • Recurring monitoring: combine Monitoring mode with a Schedule so each run only returns ads launched since the last one — perfect for a "new competitor ads" Slack feed.
  • Cost control: turn off enrichAdDetails for a fast, cards-only pass (advertiser, creative type, headline, copy, ad URL), then re-run with enrichment on only the ads you care about.

FAQ

How do I scrape all the ads from one company? Put its numeric LinkedIn company ID in companyIds (or paste the /company/<id> URL in companyUrls). You'll get every ad that advertiser is currently running.

Where do I find a company's ID? It's the number in the company's LinkedIn URL, or in the Ad Library URL when you filter by an advertiser. You can also paste the company/Ad Library URL and the actor resolves it.

Does it need a LinkedIn login or cookies? No. The LinkedIn Ad Library is public for ad-transparency, and this actor reads it directly — no account, cookies, or API key.

Can I monitor competitors for new ads? Yes. Turn on Monitoring mode and schedule the actor. The first run captures everything as a baseline; every run after returns only ads it hasn't seen — and it does not interfere with the Apify scheduler.

Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.

A field is empty — why? LinkedIn publishes impressions-by-country and targeting only for some ads (and notes country data can take up to 48 hours to appear). Empty means LinkedIn didn't publish it for that ad — the scraper never drops data it can see.

Is scraping the LinkedIn Ad Library legal? This actor collects publicly available, transparency-mandated data only. You're responsible for using the data in compliance with applicable laws (e.g. GDPR/CCPA for personal data) and LinkedIn's terms.

Need help?

Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests are welcome — this actor is actively maintained.