๐Ÿ“ข LinkedIn Ads Library Scraper avatar

๐Ÿ“ข LinkedIn Ads Library Scraper

Pricing

from $4.00 / 1,000 results

Go to Apify Store
๐Ÿ“ข LinkedIn Ads Library Scraper

๐Ÿ“ข LinkedIn Ads Library Scraper

LinkedIn Ads Library Scraper extracts LinkedIn ad copy, creatives, headlines, CTAs, landing pages, impressions, targeting, advertisers, payers, and run dates. Built for competitor ad analysis, B2B research, creative intelligence, and AI pipelines.

Pricing

from $4.00 / 1,000 results

Rating

0.0

(0)

Developer

Data Minds

Data Minds

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

๐Ÿ“ข LinkedIn Ads Library Scraper โ€” Ad Copy, Creatives, Impressions & Targeting Extractor

LinkedIn Ads Library Scraper is a production-grade Apify Actor for LinkedIn Ad Library data extraction โ€” no login, no LinkedIn API access, no ad account required. Paste any ad library link (or just type a company name) and it returns ad copy, headlines, creatives, call-to-action buttons, landing pages, the advertiser and the payer, total impressions with a country-by-country split, targeting and exact run dates โ€” streamed to your Apify Dataset in real time.

๐Ÿ’ก Need a custom version, private integration, or a tailored pipeline? Email hello.dataminds@gmail.com.

Built for competitive intelligence teams, performance marketers, agencies, B2B market researchers, creative strategists and AI/LLM data pipelines โ€” anyone who needs clean, structured LinkedIn advertising data without scrolling the Ad Library by hand.


๐Ÿ“‘ Table of contents


๐Ÿ“ข What is LinkedIn Ads Library Scraper?

The LinkedIn Ad Library is a goldmine of competitor advertising data โ€” and a nightmare to use at scale. It paginates by infinite scroll, hides impressions and targeting behind a click into each individual ad, and gives you no export button at all.

This Actor turns the whole thing into clean rows:

  • Accepts any ad library link โ€” a company search, a keyword search, a payer search, or a filtered URL you built in the Ad Library UI. Every filter you set there is honoured exactly.
  • Or skip links entirely โ€” fill in a company, payer or keyword in the built-in search builder, add countries, dates, impressions range and targeting categories, and the Actor assembles the search for you.
  • Returns the complete ad record โ€” advertiser, logo, company page, who paid for it, headline, full ad copy, CTA button, landing page, ad format and the image / video / document creative URL.
  • Reads what the ad detail page hides โ€” total impressions, the country-by-country impression split, language and location targeting, and the exact dates the ad ran.
  • Works across every ad format โ€” single image, video, document/carousel, follow-company and more, each with the right creative URL for that format.
  • Streams every finished ad to your Dataset โ€” export to JSON, CSV, Excel, XML, or pull them through the Apify API.

If you have ever needed "every ad this competitor is running right now, with copy, creatives and impressions, as clean rows" โ€” this is the Actor.


โœจ Main features

  • ๐Ÿ”— Any ad library URL accepted โ€” company, payer, keyword or fully filtered search links, all in one bulk input field with file upload and remote list support.
  • ๐Ÿงฉ Built-in search builder โ€” no URL writing needed. Company, payer, keyword, 249 countries, date range, sort order, impressions range and targeting categories, all as form fields.
  • ๐Ÿข Full advertiser record โ€” name, logo, LinkedIn company page, and the legal entity that actually paid for the ad (often an agency, not the brand).
  • โœ๏ธ Complete ad copy โ€” headline, full untruncated body text, call-to-action button label and the real landing-page URL with its attribution parameters intact.
  • ๐ŸŽจ Every ad format handled โ€” single image, video (highest-bitrate source), document/carousel cover, follow-company and more.
  • ๐Ÿ“Š Impressions intelligence โ€” the total impressions band plus the per-country percentage split, with a sortable numeric column derived for you.
  • ๐ŸŽฏ Targeting disclosure โ€” the language and location targeting LinkedIn publishes for each ad.
  • ๐Ÿ“… Exact run dates โ€” when each ad started, when it stopped, and a derived ACTIVE / INACTIVE status.
  • ๐Ÿšฆ Automatic network fallback โ€” no proxy โžœ datacenter โžœ residential, sticky after the first switch, every change written to the log.
  • ๐Ÿ“ฆ Live dataset writes and nine prebuilt table views โ€” Overview, Advertiser, Creative, Ad copy & CTA, Impressions, Targeting, Schedule, Source, Errors.
  • ๐Ÿงพ Run summary stored in the key-value store, with per-run totals and the network route used.

๐Ÿ‘ฅ Who is this Actor for?

  • ๐Ÿ”ฌ Competitive intelligence teams โ€” see exactly what every competitor is running, and for how long.
  • ๐Ÿ“ˆ Performance marketers โ€” mine winning headlines, hooks and CTAs before writing your own.
  • ๐Ÿข Agencies โ€” build a live ad board for every client and every one of their rivals.
  • ๐ŸŽจ Creative strategists โ€” collect image and video creatives at scale for swipe files and inspiration decks.
  • ๐Ÿ“Š Market researchers โ€” track category-wide ad spend signals through impressions bands over time.
  • ๐Ÿค– AI / LLM data pipelines โ€” clean, structured ad copy and creative data for RAG, fine-tuning and generation.
  • ๐Ÿง‘โ€๐Ÿ’ป Developers โ€” a dependable LinkedIn advertising data source with no ad account or API approval to wait for.

โš™๏ธ What the scraper does

  1. Reads every link and search you provide โ€” mixed freely in a single run.
  2. Assembles a real ad library search for each entry, applying your run-wide date and country filters on top.
  3. Walks the whole result list page by page until it hits your limit or the end of the search.
  4. Opens each ad's own page for the full record โ€” impressions, targeting, run dates, CTA and landing page.
  5. Saves every finished ad straight to your Dataset โ€” you can watch results land in the Console in real time.
  6. Keeps going when something fails โ€” an unreachable ad becomes a clear error row instead of stopping the run.
  7. Reports a full run summary at the end โ€” totals by format, active count, advertisers, network route and duration.

๐Ÿ“ฅ Inputs it accepts

Input typeExampleNotes
Company search linkhttps://www.linkedin.com/ad-library/search?accountOwner=apifyThe most common starting point
Keyword search linkhttps://www.linkedin.com/ad-library/search?keyword=web+scrapingEvery ad whose copy mentions the phrase
Fully filtered linkโ€ฆ/search?accountOwner=apify&countries=US&dateOption=last-30-daysBuild it in the Ad Library UI and paste it โ€” all filters carry over
Company page linkhttps://www.linkedin.com/company/nvidia/Works, but gives no date or country control
Search builder entryCompany apify + Countries US + Last 30 daysNo URL needed โ€” fill in the form fields instead

All of the above can be mixed freely in a single run, and the URL field supports bulk paste, file upload and remote lists.


๐ŸŽฏ Filtering configuration

  • Company / advertiser โ€” the brand whose ads you want.
  • Payer โ€” the entity that paid, which is often the agency rather than the brand.
  • Keyword โ€” a word or phrase that must appear in the ad copy.
  • Countries โ€” any of 249 countries, or all of them.
  • Date range โ€” last 30 days, this month, this year, last year, or an exact YYYY-MM-DD window. โš ๏ธ A custom window's end date must be before today: LinkedIn returns nothing at all for a range ending today or later, so the Actor pulls a today/future end date back to yesterday and says so in the log.
  • Sort order โ€” newest first, or oldest first to start from an advertiser's earliest campaigns.
  • Impressions range โ€” a minimum and maximum with a exact / thousand / million unit each. Fill in one side and the other is opened up automatically.
  • Targeting categories โ€” include or exclude ads by the targeting they use (language, location, audience, demographic, company, education, job, interests & traits).
  • Run-wide overrides โ€” a date range and a country list that apply on top of every link and search in the run.

โš ๏ธ Filters narrow what the ad library has to give. If a search matches fewer ads than your limit, you get fewer rows โ€” that is the correct answer, not a bug.


๐Ÿ“ค Output format (Dataset)

Every ad streams to the dataset the moment it's ready, organized into nine ready-made Console views:

ViewWhat it shows
โœจ OverviewCreative, advertiser, headline, ad copy, format, status, CTA, ad link
๐Ÿข AdvertiserLogo, advertiser name, company page, who paid for the ad, ad ID
๐ŸŽจ CreativeFormat with the image, video or document creative URL
โœ๏ธ Ad copy & CTAHeadline, full body copy, CTA button, landing page, links found in the copy
๐Ÿ“Š ImpressionsTotal impressions, sortable numeric floor, top country, full country split
๐ŸŽฏ TargetingLanguage and location targeting, flattened into their own columns
๐Ÿ“… ScheduleStart date, end date, active/inactive status, collection timestamp
๐Ÿงญ SourceWhich of your searches each ad came from
โš ๏ธ ErrorsAnything that could not be collected, with a plain-language reason

๐Ÿงพ Example output (JSON)

{
"adId": "1467153524",
"adLibraryUrl": "https://www.linkedin.com/ad-library/detail/1467153524",
"advertiserLogo": "https://media.licdn.com/dms/image/v2/D4D0BAQF7OnC-r1njIA/company-logo_100_100/โ€ฆ",
"body": "Remember that $5 free credit? It's still waiting. ๐Ÿ‘€\n\n52,000+ Actors on Apify ready to pull real-time data from any website.",
"clickUrl": "https://console.apify.com/?utm_source=linkedin&utm_medium=paid&utm_campaign=โ€ฆ",
"ctas": ["Learn more"],
"advertiserName": "Apify",
"advertiserUrl": "https://www.linkedin.com/company/10608457",
"availability": { "start": "2026-07-31", "end": "2026-08-30" },
"format": "SINGLE_IMAGE",
"paidBy": "Apify Technologies s.r.o.",
"impressionsPerCountry": [
{ "country": "United States", "impressions": "30%" },
{ "country": "Australia", "impressions": "16%" },
{ "country": "Singapore", "impressions": "6%" }
],
"impressions": "10k-20k",
"targeting": { "language": "English", "location": "United States, France, Israel" },
"headline": "Time to spend your $5 credit.",
"imageUrl": "https://media.licdn.com/dms/image/v2/D4E10AQGkpPcgyQgxBA/image-shrink_1280/โ€ฆ",
"startUrl": "https://www.linkedin.com/ad-library/search?accountOwner=apify",
"adStatus": "ACTIVE",
"impressionsLow": 10000,
"topCountry": "United States",
"externalLinks": [],
"scrapedAt": "2026-08-30T12:00:22.339806+00:00"
}

Output fields reference

FieldTypeDescription
adIdstringLinkedIn's own identifier for the ad
adLibraryUrlstringDirect link to the ad's page in the Ad Library
advertiserLogostringAdvertiser's logo image URL
bodystringFull ad copy, untruncated
clickUrlstringThe landing page the ad sends people to, attribution parameters intact
ctasarrayCall-to-action button label(s), e.g. ["Learn more"]
advertiserNamestringAdvertiser as shown on the ad
advertiserUrlstringAdvertiser's LinkedIn company page
availabilityobject{ start, end } โ€” the exact dates the ad ran
formatstringSINGLE_IMAGE, VIDEO, DOCUMENT, FOLLOW_COMPANY, โ€ฆ
paidBystringLegal entity that paid for the ad
impressionsPerCountryarrayPer-country impression percentage split
impressionsstringTotal impressions band, e.g. "10k-20k"
targetingobject{ language, location } targeting disclosure
headlinestringAd headline (present when the ad's CTA is still live)
imageUrlstringImage creative, or a document ad's cover page
videoUrlstringHighest-bitrate video source, for video ads
startUrlstringWhich of your searches this ad came from
adStatusstringACTIVE / INACTIVE / UNKNOWN, derived from the run dates
impressionsLownumberSortable numeric floor of the impressions band
topCountrystringHighest-share country from the impression split
externalLinksarrayOutbound URLs found inside the ad copy
scrapedAtstringISO 8601 timestamp of collection

Fields the ad library does not publish for a given ad are omitted, not set to null โ€” an ad that stopped running long ago genuinely has no impressions or targeting block to read.


๐Ÿš€ Quick start

Apify Console

  1. Log in at console.apify.com โ†’ Actors โ†’ open LinkedIn Ads Library Scraper.
  2. Paste your ad library links, or fill in the Build a search section instead.
  3. Set Max ads per search, adjust filters if you want, then click Start.
  4. Watch the log and the Output tab fill up in real time.
  5. Export to JSON, CSV or Excel when it's done.

API

curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~linkedin-ads-library-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"urls": [{"url": "https://www.linkedin.com/ad-library/search?accountOwner=apify"}],
"resultsLimit": 50
}'

Python client

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("YOUR_USERNAME/linkedin-ads-library-scraper").call(run_input={
"searches": [
{"accountOwner": "apify", "countries": ["US"], "dateOption": "last-30-days"},
],
"resultsLimit": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["advertiserName"], "|", item.get("headline"), "|", item.get("impressions"))

More input examples

Track one competitor's US ads from the last 30 days

{
"searches": [{ "accountOwner": "nvidia", "countries": ["US"], "dateOption": "last-30-days" }],
"resultsLimit": 200
}

Category research by keyword, high-impression ads only

{
"searches": [{
"keyword": "sales automation",
"impressionsMinValue": 50, "impressionsMinUnit": "thousand",
"impressionsMaxValue": 10, "impressionsMaxUnit": "million"
}],
"resultsLimit": 500
}

Several competitors at once, one exact date window for all of them

{
"urls": [
{ "url": "https://www.linkedin.com/ad-library/search?accountOwner=apify" },
{ "url": "https://www.linkedin.com/ad-library/search?accountOwner=nvidia" }
],
"startDate": "2026-01-01",
"endDate": "2026-06-30",
"countryFilter": ["US", "GB", "DE"],
"resultsLimit": 100
}

Fast sweep โ€” list data only, no detail pages

{
"urls": [{ "url": "https://www.linkedin.com/ad-library/search?keyword=black+friday" }],
"resultsLimit": 1000,
"skipDetails": true
}

โš™๏ธ Input parameters reference

๐Ÿš€ Start here

FieldTypeDefaultDescription
urlsarray[]LinkedIn Ad Library links, bulk input (file upload and remote lists supported)
searchesarray[]Build searches from form fields instead of URLs โ€” one entry per search

๐Ÿ“ฌ How much to collect

FieldTypeDefaultDescription
resultsLimitinteger100Max ads per search; 0 means every match
skipDetailsbooleanfalseSkip each ad's own page โ€” much faster, but no impressions, targeting, run dates, CTA or landing page

๐Ÿงฉ Per-search fields (inside each searches entry)

FieldTypeDescription
accountOwnerstringCompany or advertiser name
payerstringEntity that paid for the ad
keywordstringWord or phrase in the ad copy
countriesarrayISO country codes, or ALL
dateOptionstringlast-30-days / current-month / current-year / last-year
startDate, endDatestringYYYY-MM-DD exact window (use both together; end date must be before today)
sortOrderstringDESCENDING (newest first) or ASCENDING
impressionsMinValue, impressionsMinUnitinteger, stringLower bound + none / thousand / million
impressionsMaxValue, impressionsMaxUnitinteger, stringUpper bound + none / thousand / million
includedTargetingFacetCategoriesarrayOnly ads using these targeting categories
excludedTargetingFacetCategoriesarraySkip ads using these targeting categories

โš ๏ธ Every searches entry needs at least one of Company, Payer or Keyword.

FieldTypeDefaultDescription
dateFilterstringโ€”Date range applied on top of every link and search
startDate, endDatestringโ€”Exact YYYY-MM-DD window applied to the whole run; end date must be before today
countryFilterarray[]Countries applied on top of every link and search

๐ŸŒ Network & โšก Speed

FieldTypeDefaultDescription
proxyConfigurationobjectno proxyAutomatic no-proxy โ†’ datacenter โ†’ residential fallback unless you pin your own
maxConcurrencyinteger1Ad pages read in parallel
requestDelaynumber1.5Seconds enforced between the start of any two requests
maxRequestRetriesinteger3Retries per request before stepping up to the next network route
maxScannedinteger20000Safety cap on result pages walked per search

Inputs saved for other LinkedIn ad scrapers work here unchanged: startUrls and searchUrls are accepted as aliases of urls, and maxResults / maxItems as aliases of resultsLimit.


๐Ÿ›ก๏ธ Reliability & anti-blocking

This Actor starts every run on a direct connection โ€” no proxy overhead unless it's actually needed. If the ad library pushes back, the run automatically and transparently escalates:

No proxy โžœ datacenter proxy โžœ residential proxy (3 retries)

Once the run escalates it stays on the new route for every remaining request, so a single hiccup can't leave you flapping between routes mid-run. Every fallback is written to the log with the reason. You can also pin your own proxy group in Proxy configuration to skip the automatic ladder entirely.

On top of the route ladder:

  • โฑ๏ธ Rate pacing โ€” a real gap is enforced between the start of any two requests, across the whole run. Capping parallelism alone does not cap the request rate, and the rate is what actually gets a run throttled.
  • ๐Ÿ” Per-request retries with exponential backoff, and Retry-After honoured when the server sends one.
  • ๐Ÿ’พ Nothing is lost โ€” every ad is written to your Dataset the moment it's parsed, so even a run that ends early keeps everything it collected.
  • ๐Ÿ›‘ Clean stops โ€” if you abort a run, it finishes writing what it has and exits tidily instead of dying mid-write.

๐Ÿ”Œ Integrations & automation

  • Schedules โ€” run this Actor daily or weekly to build a time series of a competitor's ad activity.
  • Webhooks โ€” fire ACTOR.RUN.SUCCEEDED to your own endpoint when a run finishes.
  • Zapier / Make / n8n โ€” feed dataset items straight into a spreadsheet, CRM, Slack alert or ad board.
  • Clay / Airtable / Google Sheets โ€” pull the dataset directly for enrichment workflows.
  • MCP / AI agents โ€” call this Actor as a tool from Claude, Cursor or any MCP-compatible client via mcp.apify.com.
  • REST API โ€” pull dataset items directly: GET https://api.apify.com/v2/datasets/{datasetId}/items?format=json.

๐Ÿ’ฐ Pricing & how to control cost

This Actor is billed per ad saved to your dataset, so you pay for results and nothing else โ€” a run that finds no ads costs you nothing beyond the platform's own start event.

To control cost:

  • Set resultsLimit to sample a competitor before committing to a full sweep.
  • Turn on skipDetails for a broad, cheap first pass, then re-run without it on the advertisers worth a closer look.
  • Narrow with countryFilter and a date range rather than collecting everything and filtering later.
  • Leave Proxy configuration on automatic โ€” it only escalates to a paid proxy route when the direct connection is actually refused.

โ“ Frequently asked questions (FAQ)

Do I need a LinkedIn account, cookies or an ad account? No. This Actor only reads pages any signed-out visitor can open. There is nothing to log in to and no session to supply.

Can I get every ad a company has ever run? Set resultsLimit to 0 and leave the date filter empty โ€” the Actor walks the whole search to the end. Note that the Ad Library itself only publishes what it retains.

Why did I get fewer ads than my limit? Your limit is a ceiling, not a target. Filters narrow what the library has to give: a search restricted to one country and 30 days simply has fewer ads in it. Widen the filters and the count goes up.

What does impressions actually mean? It's the band the Ad Library publishes, like "10k-20k" โ€” LinkedIn does not disclose exact figures. We also derive impressionsLow as a sortable number so you can rank and chart on it.

My custom date range returned nothing โ€” why? LinkedIn's custom range only matches ads up to yesterday; a range ending today or later matches nothing at all. The Actor detects this and pulls the end date back to yesterday for you, writing a line in the log so the shift is never silent.

Why is targeting or impressions missing on some ads? LinkedIn only publishes those blocks for ads it still holds analytics for. When the block isn't on the page, the field is omitted rather than guessed.

Can I search by keyword instead of by company? Yes โ€” either paste a keyword search link, or put the phrase in the keyword field of a search builder entry.

Does it get video and document ads too? Yes. Video ads return the highest-bitrate videoUrl, document/carousel ads return their cover page through imageUrl, and the format field always tells you which kind you're looking at.

Is the ad copy truncated like it is in the results list? No โ€” the full body text comes from each ad's own page. (It is truncated if you turn on skipDetails, which is exactly the tradeoff that option makes.)


๐Ÿ› ๏ธ Troubleshooting

SymptomFix
Fewer ads than resultsLimitThe search genuinely matches fewer ads โ€” widen the date range, add countries, or drop the impressions filter
A custom date range returns nothingThe end date must be before today โ€” the Actor corrects a today/future date to yesterday automatically and logs it, so check the log if your window looks shifted
An impressions filter returns nothingThe library needs a full range; fill in both sides (the Actor opens the missing side automatically, but an over-narrow band still matches nothing)
A search entry is skippedEvery searches entry needs at least one of Company, Payer or Keyword โ€” check the โš ๏ธ Errors view for the reason
A company URL gives thin resultsCompany pages have no filter control โ€” paste an ad library search link instead for full date and country control
Repeated slow-downs in the logRaise requestDelay to about 4 and set maxConcurrency to 1, or select a proxy in Proxy configuration
Run seems slowTurn on skipDetails for a fast first pass, or raise maxConcurrency if you're on a proxy

๐Ÿ†˜ Help, support & custom builds

Something not working, or need a custom field, private integration or a bespoke pipeline built on top of this Actor? Email hello.dataminds@gmail.com โ€” we read every message.


The LinkedIn Ad Library is a public transparency database โ€” LinkedIn publishes it deliberately so that anyone can see who is advertising and how. This Actor reads only those public pages, exactly as an anonymous visitor's browser would. It does not log in, does not bypass any paywall or authentication, and does not touch private profiles or content.

Ad copy and creatives remain the property of their advertisers, and you are responsible for how you use what you collect โ€” respect LinkedIn's Terms of Service, applicable copyright law, and privacy regulations (GDPR, CCPA, etc.) for your jurisdiction and use case. If you're unsure whether your use is legitimate, consult your lawyers; Apify's blog post on the legality of web scraping is a good starting point.


๐Ÿ”‘ SEO keywords targeted

linkedin ads scraper, linkedin ad library scraper, linkedin ad library api, linkedin ads api, scrape linkedin ads, linkedin advertising data, competitor ad analysis, ad intelligence tool, ad spy tool, linkedin ad spy, b2b ad research, competitive intelligence linkedin, linkedin ad creatives scraper, ad copy scraper, linkedin ad impressions data, ad targeting data, linkedin sponsored content scraper, linkedin ad monitoring, advertiser tracking tool, linkedin marketing intelligence, ad library data export, linkedin ads csv export, apify linkedin actor, scrape linkedin without login, linkedin ad transparency data.