LinkedIn Ad Library Scraper: No Login
Pricing
from $3.00 / 1,000 ads
LinkedIn Ad Library Scraper: No Login
LinkedIn Ad Library Scraper with no login or cookies. Every ad a company runs: copy, image or video and payer, plus run dates, impressions by country and targeting for EU-shown ads. $3 per 1,000 ads.
Pricing
from $3.00 / 1,000 ads
Rating
0.0
(0)
Developer
Agnes Maina
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
LinkedIn Ad Library Scraper: every ad a company runs, with impressions by country
This LinkedIn Ad Library Scraper returns every ad a company runs on LinkedIn: the copy, the picture or video, who paid for it, the run dates, and impressions by country plus targeting wherever LinkedIn publishes them. It costs $0.003 per ad delivered, so $3 per 1,000 ads, and rows export to JSON, CSV or Excel.
Limits before you run it: no LinkedIn account and no cookies are needed, and one search returns up to 5,000 ads, set with maxAdsPerSearch. Impressions, targeting and run dates exist only for ads LinkedIn showed in the European Union: 28 of 40 ads in a measured HubSpot run with no country filter, none for a US-only advertiser. Every ad still gets the advertiser, payer, copy and creative. LinkedIn does not publish spend, budgets or exact impression counts, and it names a targeting group without naming the values inside it. Ads LinkedIn has removed are not returned.
What you get
Search by company name, keyword, payer or a pasted Ad Library URL. Each ad is one row.
| Field | What it is |
|---|---|
adId, adUrl | The ad's ID and its page in the Ad Library |
advertiserName, advertiserId, advertiserType, advertiserUrl | The advertiser, its company ID or member slug, and its page |
payer | Who paid for the ad, as LinkedIn states it |
adFormat, creativeType | Single Image Ad, Video Ad, Message Ad, LinkedIn Article Ad and the other Sponsored Content formats, plus LinkedIn's creative type code |
text, headline, description | The ad copy |
imageUrl, images, videoUrl, videoPosterUrl | The picture, every picture on it, the MP4 of a video ad and its poster frame |
clickUrl | Where the ad links to, UTM parameters included |
messageSender, callToAction | Sender and button text of a Message Ad |
firstShown, lastShown | First and last day the ad ran |
totalImpressions, impressionsLow, impressionsHigh | LinkedIn's impressions range as text, for example 5k-10k, and as numbers |
impressionsByCountry | Each country with its share of impressions in percent |
targeting | Languages and locations with includes and excludes, and which parameter groups were targeted or excluded |
detailsRead | True when the ad's detail page was read |
search, isNew | The search that returned this ad, and in monitor mode whether it is new since your last run |
charged, reason | Whether the row was charged, and why |
scrapedAt | When the row was collected |
Never returned, because LinkedIn does not publish it: ad spend or budgets, exact impression counts, the specific companies or job titles targeted, clicks or engagement, and removed ads.
Try it in 30 seconds
- Open the Store page and click Try for free.
- Type a company name into Companies, for example
HubSpot. - Click Start, then open the Ads table or export JSON, CSV or Excel.
{ "companies": ["HubSpot"], "maxAdsPerSearch": 20 }
Apify's free plan includes monthly credit, enough for a full test run at this price. A measured 10-ad HubSpot run finished in 44 seconds, and a 40-ad run with detail pages in 117 seconds.
Example output
One full row from a real run on HubSpot.
{"adId": "1558773703","adUrl": "https://www.linkedin.com/ad-library/detail/1558773703","advertiserName": "HubSpot","advertiserId": "68529","advertiserType": "company","advertiserUrl": "https://www.linkedin.com/company/68529","payer": "HubSpot, Inc.","adFormat": "Single Image Ad","creativeType": "SPONSORED_STATUS_UPDATE","text": "$1M to $100M ARR in 18 months. Stuart Shingler, Legora, on how fast-growth companies build trust while they innovate. London, 17 November.","headline": "GROW Europe 2026 · London · Register Today","description": null,"imageUrl": "https://media.licdn.com/dms/image/v2/D4D10AQGshA0JBhq0cA/image-shrink_1280/B4DaDP9g74HMAc-/0/1790195405027/2png?e=2147483647&v=beta&t=uu-v3Wv8B56hQBJAD5VjRRV3DN-EoRbg-UMe2X3kaSk","images": ["https://media.licdn.com/dms/image/v2/D4D10AQGshA0JBhq0cA/image-shrink_1280/B4DaDP9g74HMAc-/0/1790195405027/2png?e=2147483647&v=beta&t=uu-v3Wv8B56hQBJAD5VjRRV3DN-EoRbg-UMe2X3kaSk"],"videoUrl": null,"videoPosterUrl": null,"clickUrl": "https://www.hubspot.com/grow-europe?utm_source=linkedin&utm_medium=paid&utm_campaign=Marketing_Registrations_EN_EMEA_VARIOUS_GROW-Europe-2026_prospecting_cm1013_ProgramBudget_v1a&utm_id=805100113&hsa_acc=517582366&hsa_cam=805100113&hsa_grp=891556833&hsa_ad=1558773703&hsa_net=linkedin&hsa_ver=3","messageSender": null,"callToAction": null,"firstShown": "2026-09-23","lastShown": "2026-09-25","totalImpressions": "5k-10k","impressionsLow": 5000,"impressionsHigh": 10000,"impressionsByCountry": [{ "country": "United Kingdom", "share": 91 },{ "country": "Ireland", "share": 9 }],"targeting": {"language": { "includes": ["English"], "excludes": [] },"location": { "includes": ["Ireland", "United Kingdom"], "excludes": [] },"parameters": [{ "parameter": "Audience", "targeted": false, "excluded": true },{ "parameter": "Demographic", "targeted": false, "excluded": false },{ "parameter": "Company", "targeted": true, "excluded": true },{ "parameter": "Education", "targeted": false, "excluded": false },{ "parameter": "Job", "targeted": true, "excluded": false },{ "parameter": "Member Interests and Traits", "targeted": false, "excluded": false }]},"detailsRead": true,"search": "accountOwner \"HubSpot\"","isNew": null,"charged": true,"reason": "ad with advertiser and content","scrapedAt": "2026-09-25T12:12:10.512Z"}
Pricing
Pay per event. No subscription.
| Event | Price | Charged when |
|---|---|---|
| Actor start | $0.00005 | once per run |
| Ad | $0.003 | an ad is delivered with its ID, its advertiser and its content |
Worked example: 500 ads cost 500 x $0.003 = $1.50, plus $0.00005 for the start. Rows without usable content are still delivered, with charged: false, their adUrl and a reason, and cost $0.
Monitor mode charges only for ads new since your last run, rows with no content are delivered free, and the price is the same whether or not you read detail pages. Turning withDetails off makes a run about five times faster.
Input
{"companies": ["HubSpot", "Salesforce"],"keywords": ["webinar"],"countries": ["DE", "FR"],"dateOption": "last-30-days","maxAdsPerSearch": 100,"withDetails": true,"onlyNewSinceLastRun": false}
| Field | Type | Default | What it does |
|---|---|---|---|
companies | array | Advertiser names as they appear on LinkedIn, for example HubSpot | |
keywords | array | Words that appear in the ad, for example webinar. Each keyword is its own search | |
payers | array | The entity that paid, when it differs from the advertiser | |
startUrls | array | Search URLs copied from linkedin.com/ad-library/search, filters already set | |
countries | array | all | ISO codes such as US, GB or DE. EU is not a code and matches nothing; list member states |
dateOption | string | last-30-days | last-30-days, current-month, current-year, last-year or custom-date-range |
startDate, endDate | string | For the custom range, YYYY-MM-DD | |
minImpressions, maxImpressions | integer | Impressions bounds. Only EU-shown ads have impressions, so every other ad is dropped | |
maxAdsPerSearch | integer | 100 | Stop after this many ads per company, keyword, payer or URL, up to 5,000 |
withDetails | boolean | true | Read each ad's detail page for payer, dates, impressions by country and targeting |
onlyNewSinceLastRun | boolean | false | Monitor mode: later runs of the same search return only new ads |
proxyConfiguration | object | Apify residential | The Ad Library blocks datacenter IPs |
Use cases
- Competitor ad monitoring. Put three to ten competitors in
companies, turn on monitor mode and schedule it weekly. Each run returns only ads that appeared since the last one. - Agency pitch decks. Open a pitch with the prospect's own ads, their run dates, and the countries the impressions went to.
- ABM messaging research. Read the copy and headlines a target account's vendors use, and which parameter groups they targeted.
- Creative benchmarking. Build a swipe file of a category from keyword searches, with the picture or MP4 of each ad.
Integrations
curl -X POST "https://api.apify.com/v2/acts/agnes.developer.queen~linkedin-ad-library-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"companies": ["HubSpot"], "maxAdsPerSearch": 20}'
The same call works from Python and Node.js with the Apify client, and from Make, n8n or Zapier with the Apify app or node. Pair it with a schedule and monitor mode to post new competitor ads to a sheet or a CRM.
Any MCP client can also call the Actor as a tool at https://mcp.apify.com/?tools=agnes.developer.queen/linkedin-ad-library-scraper. Ask your assistant what a competitor is advertising on LinkedIn this month.
FAQ
Is the LinkedIn Ad Library public?
Yes. LinkedIn publishes it at linkedin.com/ad-library for anyone, without signing in. This Actor reads those public pages in bulk.
Does it need my LinkedIn login or cookies?
No. It never signs in to LinkedIn and never asks for cookies, so your account is not involved.
How far back does it go?
As far as the Ad Library's own date filter: the last 30 days, this month, this year, last year, or a custom range with startDate and endDate. Removed ads are not returned.
Why do some ads have no impressions, dates or targeting?
LinkedIn publishes those only for ads shown in the EU, so set countries to member state codes such as DE or FR to get ads that carry them.
Why was an ad not charged?
LinkedIn showed no text, picture or video for it. The row is still delivered with charged: false, a reason and the adUrl, and costs nothing.
Can I track a competitor weekly?
Yes. Turn on onlyNewSinceLastRun and schedule the Actor weekly. The first run delivers current ads up to your limit, each later run delivers only the new ones marked isNew, and you pay only for those.
Can I filter by impressions?
Yes, with minImpressions and maxImpressions. Ads without published impressions are dropped by the filter, which in practice means non-EU ads.
Is scraping the LinkedIn Ad Library legal?
The Actor reads only public Ad Library pages, with no login. You are responsible for how you use the data and for complying with LinkedIn's terms and the laws that apply to you, including GDPR where personal data is involved.
Related Actors
- Meta Ad Library Scraper does the same job for Facebook and Instagram ads, with days running and EU reach.
- Google Ads Transparency Scraper does the same job for ads a brand runs on Google, by domain or name.
- LinkedIn Company Scraper turns a company name, slug or URL into company facts such as industry, size and headquarters.
Support
Found a bug or need a field? Open an issue on the Issues tab in the Apify Store or on GitHub. Docs and examples: github.com/agnesthedeveloper/linkedin-ad-library-scraper