LinkedIn Ad Library Scraper
Pricing
from $3.00 / 1,000 ad scrapeds
LinkedIn Ad Library Scraper
Scrape LinkedIn's public Ad Library: competitor ads by company or keyword — ad copy, headline, format, creative image/video URLs, run dates, impressions and country targeting. Supports bulk company lists for B2B competitor ad monitoring. No login required.
Pricing
from $3.00 / 1,000 ad scrapeds
Rating
0.0
(0)
Developer
Gal Gilboa
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
LinkedIn Ad Library Scraper — Competitor Ads, Creatives & Targeting
Extract structured data from the public LinkedIn Ad Library (linkedin.com/ad-library): every ad a company is running on LinkedIn — ad copy, headline, format, creative image/video URLs, run dates, impressions, country breakdown and targeting. No LinkedIn login, no cookies, public pages only.
Built for B2B marketers, demand-gen teams, and agencies doing competitor ad research: see your competitors' LinkedIn ads, which creatives they run, how long each ad has been live, and which countries they target.
Why this Actor?
- Bulk company lists — monitor 1 or 100 competitors in a single run (one query per company). Most LinkedIn ads scrapers only handle one company at a time.
- Creative URLs extracted — direct links to the ad's image/video files, ready for a swipe file or creative analysis.
- Date info — first/last impression dates per ad, so you can spot long-running (i.e. winning) ads and set up change monitoring on a schedule.
- Keyword mode — search all LinkedIn ads by topic (e.g.
crm) to map a whole category.
What data does it return?
One dataset item per ad:
- Advertiser name, LinkedIn company URL, logo URL, "Paid by" entity
- Ad copy and headline
- Ad format (
single_image,video,carousel,document,text) - Creative URLs — image URLs and/or video URL
- Landing page URL and CTA text
- First/last impression dates ("Ran from ... to ...") when LinkedIn shows them
- Total impressions range and impressions per country
- Targeting facets shown by LinkedIn (language, locations, company size, ...)
- Ad Library detail URL + which query found the ad
Sample output
{"type": "ad","adId": "9001111","adDetailUrl": "https://www.linkedin.com/ad-library/detail/9001111","advertiserName": "HubSpot","advertiserUrl": "https://www.linkedin.com/company/hubspot","paidBy": "HubSpot, Inc.","headline": "The CRM your whole team will actually use","adCopy": "Stop juggling spreadsheets. HubSpot's free CRM gives your team one place to track every deal, contact, and conversation.","ctaText": "Learn more","adFormat": "single_image","imageUrls": ["https://media.licdn.com/dms/image/v2/sponsored-creative-111.jpg"],"videoUrl": null,"landingPageUrl": "https://www.hubspot.com/crm?utm_source=linkedin","firstImpressionAt": "Jan 5, 2026","lastImpressionAt": "Jun 30, 2026","totalImpressions": "50k-100k","impressionsByCountry": [{ "country": "United States", "percentage": "45%" },{ "country": "United Kingdom", "percentage": "20%" }],"targeting": [{ "facet": "Language", "value": "English" },{ "facet": "Location", "value": "United States, United Kingdom, Israel" }],"targetedCountries": ["United States", "United Kingdom", "Israel"],"query": "company \"hubspot\"","scrapedAt": "2026-07-11T12:00:00.000Z"}
Fields the Ad Library doesn't show for a given ad come back as null / [] — the Actor never fails a run over a missing field.
How to use it
| Input | What it does |
|---|---|
companies | Bulk list of advertisers — company names, LinkedIn company URLs, or numeric LinkedIn company IDs (most reliable; visible as companyIds in the Ad Library URL) |
keyword | Free-text Ad Library search across all advertisers |
maxAdsPerQuery | Cap per company/keyword query (default 100) |
fetchAdDetails | Open each ad's detail page for dates, impressions, targeting and full creatives (default on) |
proxyConfiguration | Use Apify RESIDENTIAL proxy — LinkedIn blocks most datacenter traffic |
Use cases
- Competitor ad monitoring — schedule a weekly run over your competitor list and diff new/retired ads; long-running ads are the ones that work.
- Creative swipe file — pull creative URLs + copy for every ad in your category before briefing your next campaign.
- B2B messaging research — compare headlines and hooks across a keyword (e.g. every "crm" ad on LinkedIn).
- Geo strategy — see which countries competitors put impressions into and what they target.
- Agency reporting — attach a client-vs-competitor LinkedIn ads snapshot to monthly reports via the API.
Pricing (pay per event)
| Event | Price | Meaning |
|---|---|---|
ad-scraped | $0.003 | One ad record in the dataset |
Example: monitoring 20 competitors × 50 ads each = 1,000 ads = $3.00 per run. The Actor respects your maximum cost per run and stops cleanly when the limit is reached.
Fair use & limitations
- Only public, logged-out Ad Library pages are visited — the same transparency data LinkedIn shows any visitor. No login, no member data, low concurrency.
- LinkedIn shows impressions/targeting only for some ads (mainly EU-served ones); other ads return the creative + copy without those panels.
- LinkedIn actively rate-limits automated traffic. Residential proxy is strongly recommended; blocked responses are retried automatically on fresh sessions.
Integrations
Standard Apify platform features apply: export to JSON/CSV/Excel, API access, webhooks, and scheduled runs for continuous competitor monitoring.
Development
npm installnpm test # parses the saved fixtures, 40 assertionsapify run # local run (uses ./storage)