Ultimate LinkedIn Ad Scraper avatar

Ultimate LinkedIn Ad Scraper

Pricing

from $2.50 / 1,000 ad scrapeds

Go to Apify Store
Ultimate LinkedIn Ad Scraper

Ultimate LinkedIn Ad Scraper

Extract LinkedIn ads at scale: search the Ad Library by keyword, advertiser or country, or scrape specific ad URLs. Export ad creatives, copy, impressions by country, run dates and audience targeting to JSON or CSV. No login required.

Pricing

from $2.50 / 1,000 ad scrapeds

Rating

0.0

(0)

Developer

Hamza

Hamza

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Ultimate LinkedIn Ad Scraper πŸ”ŽπŸ“£

Everything LinkedIn's public Ad Library knows β€” in one actor. Search over 2 million ads by keyword, company, payer, country and date, and/or paste specific ad URLs or ids to pull the complete record of any ad. See exactly what competitors run on LinkedIn: their creatives, their copy, their CTAs, who actually paid for each ad, and (for ads shown in the EU) how long each ad ran, impression counts, per-country reach and full targeting parameters β€” including exclusions. No login or cookies required.

The LinkedIn equivalent of a Facebook Ad Library scraper β€” built for competitive ad intelligence, with a deep-dive mode built in.

🧭 Two modes, one output

  • Search mode β€” the Ad Library's own search: keyword, companies, payer, account owner, plus country/date/impressions filters. Fast card-level records; switch on Scrape full ad details to add the deep detail fields to every result.
  • Ad-URLs mode β€” paste Ad Library detail URLs (or bare numeric ids) and get the complete detail record of each ad, always in full depth.

Use either mode alone or both in the same run: direct ad URLs are scraped first, then the search runs, and any ad that appears in both is deduplicated automatically (the URL-mode record wins). Every record carries sourceMode ("adUrls" or "search") so you always know where a row came from.

✨ What you get

One unified record shape for both modes:

FieldDescription
adId / adUrlThe ad and its canonical Ad Library detail URL
advertiserName / advertiserUrl / advertiserLogoUrl†Who is advertising (company or person)
advertiserSubtitleFor personal ads, the person's headline (e.g. "CEO at …")
promotedLabel"Promoted" or "Promoted by ⟨company⟩" (thought-leader ads)
adText / fullAdTextThe ad copy β€” card version and full untruncated version*
headline / ctaTextSponsored headline and call-to-action ("Learn more", …)
mediaType / mediaUrl / creativeType†video / image / text + the creative asset URL (URL mode extracts the actual MP4 for video ads)
adFormat"Video Ad", "Image Ad", "Document Ad", …*
paidByThe "Paid for by" entity β€” who actually paid*
ranFrom / ranToExact run dates (ISO), open-ended when still running β€” EU transparency data*
totalImpressionsRangee.g. "30k-50k" β€” EU transparency data*
impressionsByCountryPer-country impression share, e.g. France 100%*
targetingLanguages, locations included/excluded, and the full targeting parameter table (Audience, Demographic, Company, Education, Job, Member Interests)*
isEuTransparencytrue when the ad carries the EU transparency disclosure*
sourceMode"search" or "adUrls" β€” which mode produced the record
position / searchQuery / searchUrl / totalMatchingAds / scrapedAtProvenance (search-mode fields are null for URL-mode records)

* Fields marked with an asterisk come from each ad's detail page β€” they are always present for URL-mode records, and for search results when Scrape full ad details is on (otherwise they are null).

† advertiserLogoUrl and creativeType come from the search result card β€” they are always null for URL-mode records.

πŸ‡ͺπŸ‡Ί EU transparency data, explained

Under the EU Digital Services Act, LinkedIn publicly discloses extra data for every ad that was shown in the European Union: exact run dates, a total impressions range (e.g. 30k-50k), the impression share per country, and the targeting setup β€” languages, locations (including exclusions), and whether Audience / Demographic / Company / Education / Job / Interests targeting was used. This actor extracts that disclosure in full and flags it with isEuTransparency: true. Ads never shown in the EU legitimately return these fields as null β€” that is LinkedIn's data policy, not a scraper gap.

βš™οΈ Search options

  • Keyword β€” free-text search across ad content.
  • Companies β€” company names, numeric LinkedIn company IDs, or linkedin.com/company/... URLs; names are resolved to the official company automatically and each company gets its own search.
  • Paid by (payer) β€” find every ad a given entity paid for, even across different advertiser pages.
  • Account owner β€” filter by the ad account's owner.
  • Countries β€” one or more ISO codes (US, FR, DE, …) or ALL for worldwide.
  • Date shown β€” last 30 days, current month, current year, last year, or a custom date range.
  • Impressions β€” minimum / maximum impressions (in thousands).
  • Max ads per search + the Scrape full ad details toggle.

πŸš€ Examples

Search input:

{
"keyword": "crm software",
"countries": ["FR"],
"dateOption": "last-30-days",
"maxAds": 50,
"scrapeAdDetails": true
}

Direct ad URLs input (mix full URLs and bare ids freely):

{
"adUrls": [
"https://www.linkedin.com/ad-library/detail/1513233886",
"1468985674"
]
}

One record from the output:

{
"adId": "1497599253",
"adUrl": "https://www.linkedin.com/ad-library/detail/1497599253",
"advertiserName": "Cegid pour les entreprises",
"advertiserUrl": "https://www.linkedin.com/company/12650121",
"advertiserLogoUrl": "https://media.licdn.com/dms/image/v2/company-logo_100_100.png",
"advertiserSubtitle": null,
"promotedLabel": "Promoted",
"adText": "Les Γ©quipes finance attendent aujourd'hui bien plus qu'un simple logiciel fiscal…",
"fullAdText": "Les Γ©quipes finance attendent aujourd'hui bien plus qu'un simple logiciel fiscal.\n\nElles recherchent des solutions capables de simplifier le quotidien…",
"headline": "Cegid Tax Flex",
"ctaText": "Learn more",
"mediaType": "video",
"mediaUrl": "https://media.licdn.com/dms/image/v2/videocover-high.jpg",
"creativeType": "SPONSORED_VIDEO",
"adFormat": "Video Ad",
"paidBy": "OnlySo",
"ranFrom": "2026-07-22",
"ranTo": "2026-07-24",
"totalImpressionsRange": "30k-50k",
"impressionsByCountry": [
{ "country": "France", "percentage": "100%" },
{ "country": "Luxembourg", "percentage": "< 1%" }
],
"targeting": {
"languages": ["FranΓ§ais"],
"locationsIncluded": ["France"],
"locationsExcluded": [],
"parameters": [
{ "category": "Audience", "targeted": false, "excluded": false },
{ "category": "Job", "targeted": true, "excluded": false }
]
},
"isEuTransparency": true,
"sourceMode": "search",
"position": 1,
"searchQuery": "keyword: crm software; countries: FR; dates: last-30-days",
"searchUrl": "https://www.linkedin.com/ad-library/search?keyword=crm+software&countries=FR&dateOption=last-30-days",
"totalMatchingAds": 11802,
"scrapedAt": "2026-07-24T18:40:11.000Z"
}

πŸ’‘ Use cases

  • Competitive ad intelligence β€” monitor exactly what competitors run, which creatives they iterate on, and how long each ad stays live.
  • Creative research β€” build swipe files of headlines, hooks, CTAs and video creatives that companies in your space keep paying for.
  • EU DSA transparency research β€” impressions, reach by country and targeting choices for any EU-served ad, in clean JSON instead of screenshots.
  • Compliance & brand safety β€” verify who paid for an ad and how it was targeted (including exclusion targeting); audit ads mentioning your brand or category.
  • Agency prospecting & reporting β€” find companies actively spending on LinkedIn ads, or archive your clients' ads with the full disclosure record attached.

πŸ’³ Pricing β€” two simple events

  • Per ad scraped (base event) β€” every ad record pushed to your dataset bills one base event. That's it for plain search results.
  • Per full ad detail (full-ad-details event) β€” when an ad's detail page is fetched and parsed in full, that ad additionally bills one full-ad-details event. This happens for every ad in your Ad URLs list (those are always full-depth), and for every search result when Scrape full ad details is switched on.

So: a plain search bills only the base event per ad. A detailed search or a URL-mode run bills the base event plus one full-ad-details event per ad. Removed or unreachable ads are never billed, and if your run's budget for details runs out mid-run, search results keep flowing without the detail fields (you are only ever billed for details actually delivered). The Ad-URLs mode is different: since every Ad-URLs record includes full details, that mode stops early once the full-ad-details budget is exhausted β€” the remaining URLs are not scraped and not billed (raise the run's maximum charge to scrape them).

❓ FAQ

Do I need a LinkedIn account or cookies? No. No login, password or session cookie is involved.

Where do impressions and targeting data come from? LinkedIn publishes them (under the EU Digital Services Act) for every ad that was shown in the EU. Ads never shown in the EU legitimately have ranFrom, ranTo, totalImpressionsRange, impressionsByCountry and targeting as null.

Do both modes produce the same fields? Yes β€” one unified record shape. URL-mode records set the search-card-only fields (position, searchQuery, searchUrl, totalMatchingAds, promotedLabel, advertiserSubtitle, advertiserLogoUrl, creativeType, card adText) to null, and search-mode records without Scrape full ad details leave the detail fields null. Check sourceMode to tell rows apart.

Where do I find ad URLs? On the LinkedIn Ad Library website (every ad card links to a detail page) β€” or simply from this actor's own search output: the adUrl field feeds straight back into the adUrls input.

What does "impressions in thousands" mean? LinkedIn's impression filter works in units of a thousand: minImpressions: 50 means "at least 50,000 impressions".

Can I search several companies at once? Yes β€” each company becomes its own search (combined with your other filters), and maxAds applies per search.

Why is adText truncated but fullAdText complete? The search results page truncates long copy with an ellipsis; the full text lives on each ad's detail page. URL-mode records never saw a search card, so their copy is in fullAdText and adText is null.

Are the impression numbers exact? No β€” LinkedIn discloses ranges (e.g. 30k-50k) and per-country percentages (small shares appear as < 1%). The scraper preserves them exactly as disclosed.

How fresh is the data? Ads are fetched live from the Ad Library at run time; scrapedAt stamps every record.

⚠️ Honest limitations

  • EU-only transparency: run dates, impressions and targeting are only published for ads shown in the EU β€” that's a LinkedIn/DSA rule, not a scraper limitation. Non-EU ads still return format, payer, copy and creative.
  • Detail fields need the detail page: adFormat, paidBy, fullAdText, run dates, impressions and targeting come from each ad's detail page β€” always included in URL mode, and in search mode only with Scrape full ad details on.
  • Targeting is disclosed at category level. The parameter table says whether Audience/Demographic/Company/Education/Job/Interests targeting was used (and whether exclusions were applied); languages and locations are disclosed as values. LinkedIn does not publish, for example, the exact company list an advertiser targeted.
  • Location lists are disclosed as comma-separated text. Multi-part place names (e.g. Melbourne, VIC) can therefore split into two entries β€” an ambiguity in the source disclosure itself. Country names containing "and" (Trinidad and Tobago, Bosnia and Herzegovina, …) are recognized and kept whole.
  • Expired or removed ads can't be scraped β€” they leave the Ad Library once a campaign ends or its retention window lapses. They are skipped with a warning and never billed.
  • Very large searches: a single search combination paginates up to ~2,000 ads; use filters (countries, dates, companies) to slice bigger result sets.
  • Payer/account-owner filters match LinkedIn's own filter semantics β€” an exact-entity text match, not fuzzy search.
  • Media URLs are time-limited: LinkedIn signs its CDN URLs, so download creatives soon after scraping.