LinkedIn Ad Library Scraper - Ads, Impressions & Targeting
Pricing
from $1.20 / 1,000 ad scrapes
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
Maintained by CommunityActor 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
| Field | Notes |
|---|---|
advertiserName | The brand whose page the ad runs under |
headline | The ad's headline |
body | The 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 |
imageUrl | The creative itself, or a video ad's cover frame |
adType, creativeType | "Video Ad", SPONSORED_VIDEO |
url | The ad's own page in the library |
With Include impressions and targeting switched on, each ad also carries:
| Field | Notes |
|---|---|
impressionsLabel | LinkedIn's own range, e.g. 10k-20k — it never publishes an exact number |
impressionsMin, impressionsMax | The range parsed, so you can sort on it |
impressionsByCountry | Share per country, e.g. {"France": 100} |
targeting | The parameters the advertiser chose — language, location, audience, job, company |
payer | Who actually paid — usually a media agency, and often the more interesting half |
destinationUrl | The 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 |
ctaText | The button, e.g. "Learn more" |
firstShownAt, lastShownAt | ISO 8601 |
body | The 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.
| Event | Price |
|---|---|
| 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-20kis 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.
Is this legal?
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.