๐ข LinkedIn Ads Library Scraper
Pricing
from $2.80 / 1,000 results
๐ข 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 $2.80 / 1,000 results
Rating
0.0
(0)
Developer
Data Minds
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
LinkedIn Ads Library Scraper is an Apify Actor that extracts ad copy, creatives, advertisers, payers, impressions, targeting and run dates from the LinkedIn Ad Library in bulk, with no LinkedIn login or cookies. Paste search links or build searches from simple fields, then export clean JSON, CSV or Excel for competitor research. Pay per ad: from $2.80 per 1,000 ads on the Gold plan. ๐ Try it free
What can LinkedIn Ads Library Scraper do?
- ๐ Search the ad library at scale - bulk-paste ad library links or use the search builder, a LinkedIn Ad Library API alternative with no code.
- ๐ข Identify advertiser and payer - every ad carries the advertiser name, logo, company page and LinkedIn ads payer data.
- ๐ Read impressions by country - LinkedIn Ad Library impressions by country, with a sortable numeric floor and the top country, for LinkedIn ads intelligence.
- ๐ฏ See targeting and run dates - LinkedIn ad targeting language and location plus start and end dates, with an ACTIVE, INACTIVE or UNKNOWN status.
- ๐จ Collect every creative type - LinkedIn video ads and document ads plus images, with the headline, full copy and LinkedIn ad call to action buttons.
- โก Stream results live - each ad is saved to the dataset the moment it is ready, and a fast mode skips ad detail pages for broad sweeps.
- ๐ฅ Export and automate - download JSON, CSV or Excel for LinkedIn ads monitoring, call the API, schedule runs or connect webhooks and integrations.
- ๐ต Competitor ad spy tool - a LinkedIn ads spy tool and competitor tool for B2B competitor ad research.
What data can I extract from LinkedIn?
| Field | Description |
|---|---|
๐ adId | The ad's numeric ID in the ad library. |
๐ adLibraryUrl | Link to the ad's own page in the ad library. |
๐ข advertiserName | Name of the company or advertiser running the ad, ready for a LinkedIn ads advertiser list. |
๐ผ advertiserLogo | Logo image URL of the advertiser. |
๐ advertiserUrl | The advertiser's LinkedIn company page. |
๐ณ paidBy | The payer entity that paid for the LinkedIn ad, often an agency (when shown). |
โ headline | The ad headline (can be missing when the library does not show it). |
๐ body | The full ad copy text. |
๐ ctas | The call-to-action button label, as a list. |
๐ฏ clickUrl | LinkedIn ad landing page URLs: the page the ad sends people to. |
๐ externalLinks | Every web link found inside the ad copy. |
๐จ format | LinkedIn ad format types, for example SINGLE_IMAGE, VIDEO or DOCUMENT. |
๐ผ imageUrl | Image creative URL, or the cover image for document ads. |
๐ฌ videoUrl | Video creative URL for video ads. |
๐ impressions | The published total impressions range, as text such as 10k-20k. |
๐ข impressionsLow | The low end of the impressions range as a number you can sort on. |
๐บ impressionsPerCountry | List of countries with their share of impressions. |
๐ topCountry | The country with the highest impressions share. |
๐ฃ targeting | Disclosed language and location targeting. |
๐
availability | LinkedIn active ads run dates: the start and end the ad ran, as YYYY-MM-DD. |
๐ข adStatus | ACTIVE, INACTIVE or UNKNOWN, derived from the run dates. |
๐ startUrl | The search link the ad came from. |
๐ scrapedAt | UTC timestamp of when the ad was collected. |
LinkedIn does not publish every section for every ad, so fields such as impressions, targeting, availability and paidBy are left out when the ad library does not show them. Data comes from the public ad library only.
Teams use it as a LinkedIn ads data extractor and ad library extractor for competitor research. It also works as a LinkedIn sponsored ads scraper and B2B ad library scraper.
What can you do with the data from the LinkedIn Ad Library?
๐ฏ How to see competitor LinkedIn ads: LinkedIn competitor ad analysis
- Add the competitor's company name in
searches(fieldaccountOwner) or paste its ad library link inurls. - Use the LinkedIn Ad Library date filter: set
dateFiltertolast-30-daysand leavecountryFilterempty for every country. - Review headlines, ad copy and call-to-action buttons in the Ad copy and CTA view.
๐ Impressions and country research
- Add a
keywordsearch and use the LinkedIn ad impressions range filter (Minimum and Maximum impressions) inside the search entry. - Filter LinkedIn ads by country with
countryFilter. - Sort the Impressions view by
impressionsLowto find the ads with the biggest reach.
๐ Monitor competitor LinkedIn campaigns on a schedule
- Create a saved Task with your competitor searches and a fixed
dateFilter. - Schedule it weekly on the Apify platform.
- Compare
adIdandadStatusbetween runs to spot new and stopped campaigns.
๐ง B2B creative and messaging research
- Use
keywordsearches such as a product category, andsortOrderto start from the oldest or newest ads. - Export
headline,bodyandformatto CSV to collect LinkedIn ad copy examples. - Feed LinkedIn ad data into AI pipelines or group the copy by theme in your own tools.
How do I use LinkedIn Ads Library Scraper?
- Open LinkedIn Ads Library Scraper on Apify and click Try for free.
- Paste one or more ad library links into LinkedIn Ad Library URLs, or add entries under Searches.
- Set Max ads per search (default 100,
0collects every match). - Choose the run-wide Date range and Countries, if you want to override your links.
- Click Start and wait for the run to finish.
- Open the Output tab to browse the ads by view, or the Dataset tab to download LinkedIn ads data as JSON, CSV or Excel.
How much does it cost to scrape the LinkedIn Ad Library?
LinkedIn Ads Library Scraper uses pay-per-event pricing: you pay for each ad saved to the dataset. Rows that only report an error are not charged. Apify platform usage is billed in addition to these event prices.
| Plan | Price per ad | Per 1,000 ads |
|---|---|---|
| ๐ Free | $0.004 | $4.00 |
| ๐ฅ Bronze | $0.0036 | $3.60 |
| ๐ฅ Silver | $0.0032 | $3.20 |
| ๐ฅ Gold, Platinum and Diamond | $0.0028 | $2.80 |
Each run also pays one start event of $0.00005 per GB of memory, with a minimum of one. The default memory is 1024 MB (1 GB), so one start event costs $0.00005 per run.
Example: collecting 500 ads on the Silver plan costs 500 x $0.0032 = $1.60 for the ads, plus the $0.00005 start event, before platform usage.
You can set a maximum spend per run in Apify. When the limit is reached, the run finishes with the ads already saved.
Is scraping the LinkedIn Ad Library free?
The ad library itself is public, and you can try the Actor on a Free Apify plan. Ads are billed per result at the plan price above, for example $0.004 per ad on the Free plan. Platform usage is billed in addition, so check your plan's credits in the Apify Console before large runs.
How much does LinkedIn Ads Library Scraper cost per 1,000 results?
It costs $4.00 per 1,000 ads on the Free plan, $3.60 on Bronze, $3.20 on Silver and $2.80 on Gold, Platinum and Diamond. The $0.00005 start event is charged once per run. Platform usage is billed in addition, and a run that finds fewer ads simply costs less.
Input
Give the Actor ad library links, built-in searches, or both. All fields are optional, but a run needs at least one link or one search entry to collect ads. The names startUrls and searchUrls (for links) and maxResults and maxItems (for the ad limit) are also accepted.
Mode 1: scrape by ad library links
Paste LinkedIn Ad Library search links into urls. A link with your own filters keeps them. A company page link such as https://www.linkedin.com/company/example/ also works, but it defaults to the last 30 days and all countries, so paste a search link when you need full filter control.
Mode 2: build a search from fields
Add entries to searches. Each entry runs its own LinkedIn Ad Library keyword search, company search or payer search, and needs at least one of accountOwner, payer or keyword.
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
accountOwner | string | One of three | Company or advertiser name as shown on LinkedIn. | apify |
payer | string | One of three | Entity that paid for the ad. | Example Agency |
keyword | string | One of three | Word or phrase to find in the ad copy. | web scraping |
countries | array | No | Country codes; empty means every country. | ["US", "GB"] |
dateOption | string | No | last-30-days, current-month, current-year or last-year. | last-30-days |
startDate | string | No | First day of a custom window, YYYY-MM-DD. Needs endDate. | 2026-01-01 |
endDate | string | No | Last day of a custom window, before today. Needs startDate. | 2026-06-30 |
sortOrder | string | No | DESCENDING (newest first) or ASCENDING. | DESCENDING |
impressionsMinValue | integer | No | Minimum impressions, combined with the unit. | 10 |
impressionsMinUnit | string | No | none, thousand or million. | thousand |
impressionsMaxValue | integer | No | Maximum impressions, combined with the unit. | 1 |
impressionsMaxUnit | string | No | none, thousand or million. | million |
includedTargetingFacetCategories | array | No | Keep ads using at least one category. | ["LANGUAGE"] |
excludedTargetingFacetCategories | array | No | Skip ads using any of these categories. | ["JOB"] |
Targeting categories are LANGUAGE, LOCATION, AUDIENCE, DEMOGRAPHIC, COMPANY, EDUCATION, JOB and INTERESTS_AND_TRAITS. If you fill only one side of the impressions range, the other side is opened up automatically.
Run-wide settings
| Field | Type | Required | Description | Default / example |
|---|---|---|---|---|
urls | array | No | Ad library search links (mode 1). | https://www.linkedin.com/ad-library/search?accountOwner=apify |
searches | array | No | Search entries (mode 2). | see above |
resultsLimit | integer | No | Max ads per search; 0 collects every match. | 100 |
skipDetails | boolean | No | Faster, thinner records without ad detail pages. | false |
dateFilter | string | No | Date preset applied to every link and search. | last-30-days |
startDate | string | No | Custom start date for every search; pair with endDate. | 2026-01-01 |
endDate | string | No | Custom end date for every search; must be before today. | 2026-06-30 |
countryFilter | array | No | Country codes applied to every link and search; ALL for all. | ["US"] |
proxyConfiguration | object | No | Optional connection settings. | {"useApifyProxy": false} |
maxConcurrency | integer | No | Ad pages read at the same time, 1 to 10. | 1 |
requestDelay | number | No | Seconds between request starts, 0 to 30. | 1.5 |
maxRequestRetries | integer | No | Retries per request, 1 to 10. | 3 |
maxScanned | integer | No | Safety cap on result pages per search. | 20000 |
With skipDetails on, you get the advertiser, ad copy preview, format and creative from the results list only, so impressions, targeting, run dates, call-to-action and landing page are missing. A custom date range needs both dates, and an end date of today or later is moved back to yesterday so the search still returns ads.
Example input:
{"urls": ["https://www.linkedin.com/ad-library/search?accountOwner=apify"],"searches": [{"keyword": "web scraping","countries": ["US", "GB"],"dateOption": "last-30-days","sortOrder": "DESCENDING"}],"resultsLimit": 100,"skipDetails": false,"countryFilter": ["US", "GB"],"maxConcurrency": 1,"requestDelay": 1.5}
Output
Results are saved to the Apify dataset as each ad is ready. The dataset has ready-made views: Overview, Advertiser, Creative, Ad copy and CTA, Impressions, Targeting, Schedule, Source and Errors. Export the dataset as JSON, CSV, Excel, XML or HTML from the Console or the API.
Ad record (trimmed sample with fake values):
{"adId": "123456789","adLibraryUrl": "https://www.example.com/ad-library/detail/123456789","advertiserLogo": "https://www.example.com/logo.png","body": "Example ad copy for a B2B product. Learn more at https://www.example.com/offer","clickUrl": "https://www.example.com/landing","ctas": ["Learn more"],"advertiserName": "Example Company","advertiserUrl": "https://www.example.com/company/example","availability": {"start": "2026-09-01", "end": "2026-10-15"},"format": "SINGLE_IMAGE","paidBy": "Example Agency","impressionsPerCountry": [{"country": "United States", "impressions": "60%"},{"country": "United Kingdom", "impressions": "<1%"}],"impressions": "10k-20k","targeting": {"language": "English", "location": "United States"},"headline": "Example headline","imageUrl": "https://www.example.com/creative.png","startUrl": "https://www.example.com/ad-library/search?accountOwner=example","adStatus": "INACTIVE","impressionsLow": 10000,"topCountry": "United States","externalLinks": ["https://www.example.com/offer"],"scrapedAt": "2026-10-17T10:00:00+00:00"}
Video ads return videoUrl instead of imageUrl.
Error row (shown in the Errors view):
{"url": "https://www.example.com/ad-library/search?accountOwner=example","input": "Example search","error": "NO_ADS_FOUND","note": "This search matched no ads"}
Each run also saves a summary to the key-value store under the key run-summary:
{"source": "linkedin-ad-library","scrapedAt": "2026-10-17T10:05:00+00:00","totalAds": 100,"activeAds": 12,"uniqueAdvertisers": 3,"formats": {"SINGLE_IMAGE": 80, "VIDEO": 20},"adsWithImpressions": 100,"adsWithTargeting": 98,"adsWithCreative": 100,"sourcesProcessed": 2,"errors": 0,"durationSeconds": 240.5}
The summary also includes the number of requests made.
Notes and limitations
- Fields that the ad library does not show for an ad are left out of its record instead of being filled with guesses.
adStatusisUNKNOWNwhen no run dates are published for the ad.- The
headlineis missing for ads that have stopped running, because the library does not show it for them. - In
skipDetailsmode only the results-list fields are filled, andimageUrlappears for single-image ads only. impressionsis a range published by LinkedIn, not an exact count.- Ads are de-duplicated by
adIdwithin a search, andresultsLimitapplies to each search separately. - Only public ad library data is collected.
FAQ
Is it legal to scrape the LinkedIn Ad Library?
The LinkedIn Ad Library is public, and this Actor collects only what any visitor can see. Legality still depends on your country, purpose and use of personal data under GDPR and CCPA. Read the Apify guide to web scraping legality. This is not legal advice, so consult a lawyer.
Do I need a LinkedIn account, cookies or an API key?
No. The input has no login, cookie or key fields, so you only provide ad library links or search fields. You do need an Apify account to run the Actor and to pay for results. Your own LinkedIn credentials are never requested, which keeps setup simple for marketers and analysts alike.
How many ads can I get per run and how fast?
Each search stops at Max ads per search, which defaults to 100, and 0 collects every match. Speed depends on your settings: by default the Actor reads one ad page at a time with a 1.5 second delay between requests. Raising Ads in parallel is faster but more likely to be throttled.
Why do the ad counts differ from what I see on LinkedIn?
Each run collects live data, so new or removed ads change the totals between runs. Your filters, the Max ads per search limit and de-duplication by ad ID also reduce the count. Ad detail fields such as impressions or targeting appear only when LinkedIn publishes them for that specific ad.
Can I export LinkedIn Ad Library data to CSV or Excel?
Yes. Open the Dataset tab after the run and download the ads as JSON, CSV, Excel, XML or HTML. The Output tab also has a ready CSV link and separate views for advertisers, creatives, ad copy, impressions, targeting and schedule, so you can export just the columns your report needs.
Can I schedule runs, use webhooks or integrations?
Yes. Save your searches as a Task, then schedule it on the Apify platform to monitor competitor ads weekly or daily. You can also trigger webhooks when a run finishes and connect the dataset to the integrations Apify offers, such as Make, Zapier or n8n, or send it to your own tools.
Can I use LinkedIn Ads Library Scraper with the Apify API or an MCP server?
Yes. You can start runs and fetch results through the Apify API, and Apify's MCP support lets AI assistants call Actors. The API tab on the Actor page shows ready-made request examples in several languages, so this README does not repeat them here. Your results stay in the same dataset.
Why am I getting fewer ads than expected?
Check that every search has a company, payer or keyword, and that the date range has both a start and an end date. Narrow country, impressions or targeting filters also reduce matches, as does a low Max ads per search. Open the Errors view to read a plain reason for any search that returned nothing.
LinkedIn Ads Library Scraper not working?
First open the Errors view and the run log, which explain refused requests and invalid searches in plain words. Try a longer delay between requests and a lower Ads in parallel value, then run again. If the problem continues, open the Issues tab on the Actor page and describe your input.
Related Actors
| Actor | Use it to |
|---|---|
| ๐ Facebook Pages Scraper | Collect public Facebook Page data in bulk, including ad status and an Ad Library link, to compare competitors beyond LinkedIn. |
| ๐ Website Lead Intelligence | Turn the advertiser websites you find into a scored outreach list with verified emails and named decision-makers. |
| ๐ Instagram Scraper | Collect public Instagram profiles, posts and reels to follow the same competitors on social media. |
Support and disclaimer
Found a bug or need a feature? Open an issue in the Issues tab. For custom solutions, integrations or questions, contact hello.dataminds@gmail.com. LinkedIn Ads Library Scraper is independent and not affiliated with LinkedIn; trademarks belong to their owners. It collects publicly available data only, and you are responsible for complying with applicable laws and the terms of the sites you use.
Last updated: 2026-10-17