LinkedIn Ad Library Scraper - Competitor B2B Ads & Creatives
Pricing
from $1.40 / 1,000 ad scrapeds
LinkedIn Ad Library Scraper - Competitor B2B Ads & Creatives
Scrape the LinkedIn Ad Library with no login: competitor ads, creatives, headlines, ad copy and advertisers by keyword, advertiser name, company or payer. Detail mode adds paying entity, CTA, landing page, plus run dates, impressions and targeting for EU ads. Monitoring mode returns only new ads.
Pricing
from $1.40 / 1,000 ad scrapeds
Rating
0.0
(0)
Developer
Scrape Sage
Maintained by CommunityActor stats
8
Bookmarked
123
Total users
41
Monthly active users
an hour ago
Last modified
Categories
Share
LinkedIn Ad Library Scraper - Competitor B2B Ads, Creatives & Impressions
Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation or any of its subsidiaries. All trademarks mentioned are the property of their respective owners. "LinkedIn Ad Library" is referenced only to describe the publicly available website this Actor collects data from.
Extract every ad your competitors are running on LinkedIn: the advertiser, the ad format, the headline, the ad copy and the creative itself (image, video, carousel slides, document pages), searched by keyword, advertiser name, company or payer. Turn on Enrich ad details and every ad also carries the legal paying entity, the advertiser's LinkedIn company ID, the full ad copy, the CTA button and the landing page with its UTMs, plus run dates, total impressions, impressions by country and the advertiser's targeting wherever LinkedIn publishes them, which is mainly for ads served in the EU. Turn on Monitoring mode to receive only newly launched ads on a schedule.
No login, no cookies and nothing to configure on your side. The LinkedIn Ad Library is protected by bot detection that blocks ordinary proxies, so this Actor handles the unblocking for you and returns clean, structured JSON - you do not need to bring your own proxies or solve anything.
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 can open every ad's detail page and ships the richest dataset in the category - the fields that drive competitive and B2B intelligence:
| Data | Typical scrapers | This Actor |
|---|---|---|
| Advertiser name, logo and LinkedIn company ID | partial | ✅ |
| Paying entity ("Paid for by…") | ❌ | ✅ with Enrich ad details |
| Headline, description line and ad copy | partial | ✅ (full copy with Enrich ad details) |
| CTA button and destination / landing URL with the advertiser's own UTMs | ❌ | ✅ with Enrich ad details |
| Ad format: single image, video, carousel, document, article, event, job, message, spotlight | ❌ | ✅ |
| Image, video, carousel-slide and document-page creatives | partial | ✅ |
| Format extras: event date and place, job location, document title and page count, message sender and reply buttons | ❌ | ✅ |
| Exact first/last shown dates | ❌ | ✅ when LinkedIn publishes them (EU-served ads) |
| Total impressions and impressions by country | ❌ | ✅ when LinkedIn publishes them (EU-served ads) |
| Targeting: languages, locations, and which audience, company, job, education, demographic and interest facets were used | ❌ | ✅ when LinkedIn publishes it (EU-served ads) |
| Search by keyword, advertiser name, company ID / URL and payer | partial | ✅ |
| Country and date-range filters | partial | ✅ |
| Monitoring mode - only new ads each run | ❌ | ✅ |
What you get
| Field | What it holds | Search cards (default) | With Enrich ad details |
|---|---|---|---|
advertiserName, advertiserLogoUrl | The advertiser as LinkedIn names it, and its logo | ✅ | ✅ |
advertiserCompanyId, advertiserCompanyUrl | The advertiser's LinkedIn company ID and page | ✅ on company searches | ✅ for company pages |
creativeType, creativeTypeLabel | LinkedIn's format code and a readable label | ✅ | ✅ |
headline, description | The headline and the line printed under it | ✅ when the format has one | ✅ when the format has one |
bodyText | The ad copy | the first ~120 characters | the full text |
imageUrls, videoUrl | Creative files | ✅ images | ✅ images, video, document pages |
ctaText, destinationUrl | The CTA button and the landing page | - | ✅ when the ad has them |
payingEntity | The "Paid for by" entity | - | ✅ |
firstShownDate, lastShownDate | When the ad ran | - | ✅ EU-served ads |
totalImpressions, impressionsByCountry, impressionsByCountryText | Impressions band and each country's share (as a list and as text) | - | ✅ EU-served ads |
targeting, targetingSummary, targetingFacets, targetingFacetsText, targetingParameters | The targeting the advertiser chose | - | ✅ EU-served ads |
formatDetails | Event time and place, job location, document title and pages, carousel slides, message sender and buttons, article series | ✅ | ✅ |
adId, adUrl, searchType, searchTerm, scrapedAt | The ad's identity and which search found it | ✅ | ✅ |
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 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 on LinkedIn, a strong buying and 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
- Sign up for Apify - the free plan is enough to try this Actor.
- Open the LinkedIn Ad Library Scraper, enter keywords, advertiser names, company IDs/URLs or payer names (or paste Ad Library URLs), and click Start.
- Turn on Enrich ad details when you need the paying entity, full copy, CTA, landing page, impressions and targeting.
- Watch results stream into the dataset table, then export as JSON, CSV, Excel, XML or RSS - or pull them through the Apify API.
Input
{"keywords": ["marketing automation"],"advertiserNames": ["HubSpot"],"companyIds": ["68529"],"companyUrls": ["https://www.linkedin.com/company/salesforce"],"payers": ["HubSpot, Inc."],"countries": ["DE", "FR"],"dateFrom": "3 months","enrichAdDetails": true,"maxAds": 200,"monitorMode": false}
- keywords - words or phrases in the ads. Each keyword is one search. A keyword also matches every ad that merely mentions it, so use advertiser names or company IDs for one company's own ads.
- advertiserNames - search by advertiser name, exactly like the Ad Library's "company/advertiser name" box (e.g.
HubSpot). - companyIds - numeric LinkedIn company IDs, for every ad that exact company is running (e.g.
68529= HubSpot). - companyUrls - LinkedIn company URLs or Ad Library URLs.
/company/<id>and?companyIds=links search that exact company; name URLs like/company/salesforcesearch by advertiser name. - 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>). An individual ad URL is always read in full, so it is billed as Ad Scraped + Ad Details Enriched. - countries / dateFrom / dateTo - optional filters applied to every search. Either date can be used on its own, as a calendar date (
2026-06-01) or a period such as3 monthsor30 days, counted back from the day of the run, so a saved task or schedule always covers the latest period. - enrichAdDetails (default off) - open each ad's detail page for the full record. Leave it off for a fast, cards-only run.
- maxAds (default 100, up to 1,000 per run) and maxAdsPerQuery - how many ads to take in total and from each search.
- monitorMode (default off) - output only ads not delivered by earlier runs; pair it with Schedules.
Output
One record per ad (type: "ad"). An EU-served ad with Enrich ad details on looks like this (URLs shortened):
{"type": "ad","adId": "1560106944","adUrl": "https://www.linkedin.com/ad-library/detail/1560106944","creativeType": "SPONSORED_STATUS_UPDATE","creativeTypeLabel": "Single image","advertiserName": "HubSpot","advertiserCompanyId": "68529","advertiserCompanyUrl": "https://www.linkedin.com/company/68529","advertiserLogoUrl": "https://media.licdn.com/dms/image/v2/.../hubspot_logo","headline": "Sell from anywhere, close everywhere.","bodyText": "Remote-first and built on trust. Sell from wherever you're sharpest, on your own rhythm. The results are what matter here.","ctaText": "Learn more","destinationUrl": null,"imageUrls": ["https://media.licdn.com/dms/image/v2/.../image-shrink_1280/..."],"videoUrl": null,"searchType": "companyId","searchTerm": "68529","payingEntity": "HubSpot, Inc.","availabilityText": "Ran from Sep 14, 2026 to Oct 1, 2026","firstShownDate": "Sep 14, 2026","lastShownDate": "Oct 1, 2026","totalImpressions": "100k-150k","impressionsByCountry": [{ "country": "United Kingdom", "impressions": "43%" },{ "country": "Ireland", "impressions": "19%" },{ "country": "Germany", "impressions": "18%" }],"targeting": {"language": { "included": ["English"], "excluded": [] },"location": { "included": ["Dallas, TX", "Germany", "England"], "excluded": ["India"] }},"targetingSummary": "Language: English · Location: Dallas, TX / Germany / England (excludes India) · Company: targeted + excluded · Job: targeted + excluded","variantCount": 1,"mediaUrn": null,"videoPosterUrl": null,"targetingFacets": ["language", "location", "company", "job"],"scrapedAt": "2026-10-01T03:13:02.000Z","description": null,"formatDetails": null,"targetingParameters": [{ "parameter": "Audience", "targeted": false, "excluded": false },{ "parameter": "Company", "targeted": true, "excluded": true },{ "parameter": "Job", "targeted": true, "excluded": true }],"impressionsByCountryText": "United Kingdom 43%, Ireland 19%, Germany 18%","targetingFacetsText": "language, location, company, job"}
impressionsByCountryText and targetingFacetsText repeat the two lists as text, for the Console's Transparency table and for spreadsheets. A cards-only run returns the same record without the other detail-page fields; the columns the Details and Transparency views show (payingEntity, firstShownDate, lastShownDate, totalImpressions, targetingSummary and the two text fields) are present and empty. formatDetails carries what only some formats have, for example { "eventTime": "November 4, 2026, 11:00 PM - …", "eventLocation": "Westlock, CA" } for an event ad, { "documentTitle": "Spotlight", "documentPageCount": 14 } for a document ad, or { "senderName": "…", "buttons": ["Marketing does", "HR does"] } for a message ad.
Good to know
- Run dates, impressions and targeting are published by LinkedIn mainly for ads served in the EU (under the EU Digital Services Act). For other ads those fields are empty because LinkedIn does not show them. Add EU countries to
countries(e.g.DE,FR) when they matter to you. - Impressions by country are shares of the ad's total (e.g. Germany 85%), and the total is a band such as
5k-10k, exactly as LinkedIn publishes them. - Search cards carry the first ~120 characters of the ad copy. Enrich ad details returns the full text, the paying entity, the CTA and the landing page.
- Some formats have no headline, CTA or landing page (message, document and article ads, for example). A blank field means LinkedIn did not publish that value for that ad - never that scraping failed.
- LinkedIn's Ad Library keeps the last 12 months of ads, so a date before that window is moved to its start. Its newest day is yesterday, so a range that ends today or later ends yesterday.
- A keyword matches every ad that mentions it. For one company's own ads, search by advertiser name or company ID.
- Each run returns up to 1,000 ads. Split a larger job across several runs.
- Monitoring mode reads the newest results first and stops at the first page that holds only ads it already delivered, so a scheduled monitor is quick.
How much does it cost to scrape LinkedIn Ad Library?
This Actor uses Apify's pay-per-event pricing: you are charged only for the results it delivers, with no monthly rental and no start fee. The events it can charge are:
- Ad Scraped - one ad from the search results: advertiser, format, headline, ad copy, creative and ad URL.
- Ad Details Enriched - the ad's detail page: paying entity, company ID, full ad copy, CTA, landing page and creatives, plus run dates, impressions and targeting where LinkedIn publishes them. Charged only when Enrich ad details is on, or for an individual ad URL you paste.
The current price of each event is shown on the Pricing tab of this page. Set a maximum total charge on the run if you want a hard cap on spend, and use the input limits to control how much the Actor fetches.
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 or weekly to watch competitors for new ads. Turn on Monitoring mode and each scheduled run returns only ads it hasn't delivered 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:
- Google Ads Transparency Scraper - every ad an advertiser runs on Google Search, Display & YouTube.
- Facebook Ad Library Scraper - competitor ad intelligence across Meta & Instagram.
- LinkedIn Jobs Scraper - job postings as hiring-intent and growth signals.
- Eventbrite Scraper - events plus organizer leads (ticket prices, emails, socials).
- Sched Conference Scraper - speakers, sessions and sponsors from conference sites.
- Whova Event Scraper - attendees, sessions, speakers and sponsors from Whova event apps.
- Bark Listing Scraper - service-provider leads from Bark.
Tips
- Whole-competitor sweep: pass a company ID (or a
/company/<id>URL) to pull every ad an advertiser is running, and turn on Enrich ad details for the paying entity, landing pages, 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 returns only ads launched since the last one - perfect for a "new competitor ads" Slack feed.
- Cost control: run cards-only first (advertiser, format, headline, copy, creative, ad URL), then paste the ad URLs you care about into Start URLs to read just those in full.
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), or type the company's name in advertiserNames. You'll get the ads that advertiser is 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 or 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 its public pages - 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 delivered before - 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 run dates, impressions and targeting mainly for EU-served ads, and some formats simply have no headline, CTA or landing page. Search cards also stop at the first lines of the copy - turn on Enrich ad details for the full record. 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.
Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.
"LinkedIn Ad Library" and any related marks are the property of their respective owners and are used here only in a descriptive, nominative sense - to identify the publicly accessible website from which this Actor collects data. This Actor is not an official LinkedIn Ad Library product, is not authorised or certified by LinkedIn Corporation, and does not distribute LinkedIn Ad Library software. It collects only publicly available information; you are responsible for ensuring your use of that data complies with applicable laws, regulations and the terms of the source website.
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.