LinkedIn Ad Library Scraper — Competitor B2B Ads & Creatives avatar

LinkedIn Ad Library Scraper — Competitor B2B Ads & Creatives

Pricing

from $2.00 / 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 $2.00 / 1,000 ad scrapeds

Rating

0.0

(0)

Developer

Scrape Sage

Scrape Sage

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 B2B Ads, Creatives & Impressions

Extract every ad your competitors are running on LinkedIn — full creatives, headlines, ad copy, CTAs, and the data other scrapers miss: advertiser company ID, the legal paying entity, exact run dates, total impressions, impressions by country, and complete targeting (language, locations, audience, company, job and interest facets). 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
Impressions by country✅ when published
Full targeting (language, locations, audience, company, job, interests)
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 (company ID, paying entity, run dates, impressions, impressions by country, targeting, destination URL, creatives). 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 some fields appear only when LinkedIn publishes them. Verified across many advertisers, you can typically expect:

FieldCoverage
advertiserName, company ID, creative type, ad URL~100%
headline / body copy, CTA, creatives~95% (varies by ad format)
paying entity, first/last shown dates~98%
total impressions~95%
impressions by countrywhen published (LinkedIn notes it can take up to 48h for new ads)
targeting (language, location, audience…)when the advertiser's targeting is disclosed
destination URLwhen the ad links off-platform

A blank field means LinkedIn didn't publish that value for that ad — never that scraping failed. Nothing is dropped, so you always get the richest record available.

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.

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.