LinkedIn Ad Library Scraper - Ads, Impressions & Targeting avatar

LinkedIn Ad Library Scraper - Ads, Impressions & Targeting

Pricing

from $1.20 / 1,000 ad scrapes

Go to Apify Store
LinkedIn Ad Library Scraper - Ads, Impressions & Targeting

LinkedIn Ad Library Scraper - Ads, Impressions & Targeting

Scrape the LinkedIn Ad Library by company, keyword or payer. Every ad a brand runs on LinkedIn, with impression ranges by country, the targeting the advertiser selected, and the agency that paid for it. No login and no API key.

Pricing

from $1.20 / 1,000 ad scrapes

Rating

0.0

(0)

Developer

Eimantas V

Eimantas V

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

LinkedIn Ad Library Scraper — Ads, Impressions & Targeting

Every ad a company runs on LinkedIn, with the numbers LinkedIn is obliged to publish: impression ranges by country, the targeting the advertiser selected, and the agency that paid.

No login, no API key, no browser. Search by company, by keyword, or by payer.

What you get for every ad

FieldNotes
advertiserNameThe brand whose page the ad runs under
headlineThe ad's headline
bodyThe ad copy. LinkedIn shortens this to about 120 characters on a listing page — bodyTruncated tells you when you are holding the preview rather than the ad
imageUrlThe creative itself, or a video ad's cover frame
adType, creativeType"Video Ad", SPONSORED_VIDEO
urlThe ad's own page in the library

With Include impressions and targeting switched on, each ad also carries:

FieldNotes
impressionsLabelLinkedIn's own range, e.g. 10k-20k — it never publishes an exact number
impressionsMin, impressionsMaxThe range parsed, so you can sort on it
impressionsByCountryShare per country, e.g. {"France": 100}
targetingThe parameters the advertiser chose — language, location, audience, job, company
payerWho actually paid — usually a media agency, and often the more interesting half
destinationUrlThe advertiser's own landing page — the one link in the record that leaves LinkedIn. Only some ad formats expose it; link-card ads usually do, organic-style sponsored posts usually do not, and a URL written into the ad copy stays in body rather than being reported here
ctaTextThe button, e.g. "Learn more"
firstShownAt, lastShownAtISO 8601
bodyThe full copy, typically around five times the listing preview

Each target also gets a summary row: totalAdsReported is LinkedIn's own count for the whole query, adsFetched is what this run collected, and windowsSearched is how many date slices it took. The first two together tell you your coverage.

Use the residential proxy group

LinkedIn gates the ad library on the address a request comes from, and it refuses datacenter addresses heavily and unpredictably — measured on one morning at 25%, then 6%, then 100% within half an hour. This Actor retries on a fresh address automatically and reports the refusal rate at the end of every run, but retrying cannot help when the whole datacenter pool is being refused. The input defaults to RESIDENTIAL for that reason.

What LinkedIn does and does not publish

Measured across a real run of 15 Microsoft ads: all 15 returned the paying entity, and 12 of 15 returned impressions, per-country shares and targeting. LinkedIn does not publish that analytics block for every ad, so those fields are sometimes null on a row whose details were fetched successfully. You are not charged for a detail page that adds nothing at all, and the run log says when that happens.

headline and ctaText belong to link-card ad formats. Organic-style sponsored posts — SPONSORED_STATUS_UPDATE, the most common format — have neither, and the copy in body is the whole ad. Null there means the format has no such field, not that it was missed.

Why the payer field matters

Point this at a competitor and you learn more than their creative. A Microsoft ad comes back paid for by ZENITH UK (MEDIA) LIMITED — so you learn which agency runs their media, and you can then search by that payer to see every other brand it buys for.

Pricing

Pay per result.

EventPrice
Ad scraped$2.00 per 1,000
Ad details fetched$2.00 per 1,000 — only when impressions and targeting are on
Actor start$0.00005

Targets that cannot be reached are never charged, and an ad whose detail page fails is still delivered without it — and not charged for the detail.

Example input

{
"companies": ["https://www.linkedin.com/company/microsoft", "1441"],
"includeDetails": true,
"maxAdsPerTarget": 200,
"countries": ["US", "GB"]
}

Companies accept a page URL, a numeric ID, or a name — but the difference matters more than it looks. A numeric ID asks for one company. A URL or a name becomes LinkedIn's own name search, which returns every advertiser whose name contains the text: ask for microsoft and you also get "Devoteam | Microsoft Partner" and "ScriptRunner — The #1 Microsoft Automation Platform". Both are real ads, but only one of them is Microsoft's. The run log says which kind of match each target got, and the numeric ID is the companyIds value in the URL when you filter to that company in LinkedIn's own ad library.

How it reaches more than 24 ads

LinkedIn's search returns exactly 24 results and has no offset parameter — start, from, count, page and offset were each measured returning the identical 24, against a Microsoft library LinkedIn itself reports as 11,318 ads.

So this Actor pages by narrowing the question: it walks the date range in windows, and any window that comes back full gets split in half and searched again, down to single days. That is how it gets past 24, and it is why maxAdsPerTarget costs more requests than it would on a normal paged API.

Limits worth knowing

These are LinkedIn's, not this Actor's:

  • About one year of history. LinkedIn's own date picker refuses earlier dates.
  • Impressions are ranges, never numbers. 10k-20k is what LinkedIn publishes.
  • A single day that still holds 24+ ads is the floor. For the very largest advertisers a few ads on the busiest days are not reachable by any caller. The run says so when it happens rather than quietly returning less.
  • LinkedIn rate-limits by address. The Actor detects it, reports it plainly, and stops rather than burning further addresses. Raise Delay between requests or use the RESIDENTIAL proxy group.

Integrations

Results land in a standard Apify dataset — export to JSON, CSV or Excel, or push onward with Make, Zapier, Google Sheets, Slack, or the API.

The LinkedIn Ad Library is a public transparency service, and this Actor reads only what any logged-out visitor sees. It touches no private data and no account of yours. What you do with the data remains your responsibility.