LinkedIn Ad Library Scraper — Competitor B2B Ads & Creatives
Pricing
from $2.00 / 1,000 ad scrapeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
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:
| Data | Typical scrapers | This actor |
|---|---|---|
| Advertiser name + LinkedIn company ID | partial | ✅ |
| Paying entity ("Paid for by…") | ❌ | ✅ |
| Headline, full ad copy, CTA button | partial | ✅ |
| Destination / landing URL (with the advertiser's own UTMs) | ❌ | ✅ |
| Creative type (single image, video, carousel, document, event…) | ❌ | ✅ |
| Image & video creative URLs | partial | ✅ |
| 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 payer | partial | ✅ |
| 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
- Sign up for Apify — the free plan is enough to try this actor.
- Open the LinkedIn Ad Library Scraper, enter keywords, company IDs/URLs, or payer names (or paste Ad Library URLs), and click Start.
- Watch results stream into the dataset table.
- 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:
| Field | Coverage |
|---|---|
| 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 country | when published (LinkedIn notes it can take up to 48h for new ads) |
| targeting (language, location, audience…) | when the advertiser's targeting is disclosed |
| destination URL | when 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:
- 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 live ad an advertiser is running, then keepenrichAdDetailson 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
enrichAdDetailsfor 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.