LinkedIn Ad Library Scraper avatar

LinkedIn Ad Library Scraper

Pricing

from $3.00 / 1,000 ad scrapeds

Go to Apify Store
LinkedIn Ad Library Scraper

LinkedIn Ad Library Scraper

Scrape the LinkedIn Ad Library with no login. Extract ads, advertiser names, creatives, headlines, CTAs, formats and detail URLs as JSON/CSV. Built for B2B competitor research, media buyers and ad intelligence teams. Filter by advertiser or keyword. Pay per result or run via API.

Pricing

from $3.00 / 1,000 ad scrapeds

Rating

0.0

(0)

Developer

Gal Gilboa

Gal Gilboa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

20 days ago

Last modified

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

InputWhat it does
companiesBulk list of advertisers — company names, LinkedIn company URLs, or numeric LinkedIn company IDs (most reliable; visible as companyIds in the Ad Library URL)
keywordFree-text Ad Library search across all advertisers
maxAdsPerQueryCap per company/keyword query (default 100)
fetchAdDetailsOpen each ad's detail page for dates, impressions, targeting and full creatives (default on)
proxyConfigurationUse 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)

EventPriceMeaning
ad-scraped$0.003One 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 install
npm test # parses the saved fixtures, 40 assertions
apify run # local run (uses ./storage)