LinkedIn Ads Library Scraper avatar

LinkedIn Ads Library Scraper

Pricing

from $0.45 / 1,000 ads

Go to Apify Store
LinkedIn Ads Library Scraper

LinkedIn Ads Library Scraper

Search public LinkedIn Ads Library ads by advertiser, keyword, URL, or source filters. Get structured ad records with creative, publication, impressions, targeting, payer, and source-link fields, or return a source-backed match count.

Pricing

from $0.45 / 1,000 ads

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

🔎 Search the LinkedIn Ads Library for focused ad research

For marketers, competitor researchers, agencies, and analysts, this Actor searches public LinkedIn Ads Library ads and saves structured ad records or a source-backed match count. Review ad copy, creative formats, source links, publication dates, impressions, targeting, and payer details when LinkedIn publishes them.

Use it to:

📦 Structured LinkedIn ad records and match counts

Use resultType to save one row for each matching ad or one source-backed count row. Ad rows can include advertiser and payer data, creative copy and media, destination links, publication dates, impression ranges, country breakdowns, targeting categories, and the source result count. Optional fields stay absent when LinkedIn does not publish them.

Choose one result type and one way to find ads for each run. Fields for other search choices are ignored. Use advertiser or keyword searches, start from a public search URL, or provide public ad-detail URLs. Add country, date, impression, targeting, payer, order, and ad-count settings when needed.

Run steps

  1. Choose ads to save ad rows or count to save one source-backed count.
  2. Choose advertiser, keyword, searchUrl, or adUrls in findAdsBy.
  3. Add the matching search value, then add any filters for the source-published fields you need.
  4. Open the results link to review the default dataset.

⚙️ Input

The form runs one focused search at a time. Keyword and ad URL inputs accept lists of the same kind, and each run uses the selected findAdsBy choice.

Input fields

FieldTypeWhat it does
resultTypestring: ads or countChooses ad rows or one source-backed match count.
findAdsBystring: advertiser, keyword, searchUrl, or adUrlsChooses how this run finds public LinkedIn ads.
advertiserstringSearches for ads associated with this advertiser or company name.
keywordsarray of stringsSearches ad copy for one or more keywords or phrases. Ads matching any value are included.
searchUrlURL stringStarts the search from one public LinkedIn Ads Library search URL.
adUrlsarray of objectsAdds one or more public LinkedIn Ads Library ad-detail URLs.
adUrls[].urlURL stringGives one public ad-detail URL to retrieve.
targetCountriesarray of stringsLimits matches to ads that target one or more country names or codes.
publicationDateRangeobjectLimits matches to the source-published publication date range.
publicationDateRange.fromdate stringIncludes ads published on or after this date. Use YYYY-MM-DD.
publicationDateRange.todate stringIncludes ads published on or before this date. Use YYYY-MM-DD.
impressionRangeobjectLimits matches to the source-published impression range.
impressionRange.minintegerIncludes ads whose published impression range reaches this value.
impressionRange.maxintegerIncludes ads whose published impression range does not exceed this value.
targetingobjectFilters by categories published in the ad targeting details.
targeting.includearray of stringsIncludes ads with these targeting categories.
targeting.excludearray of stringsExcludes ads with these targeting categories.
payerstringLimits matches to ads where the published payer matches this text.
maxItemsintegerFor ads, stops after this many matching ads. count ignores this setting.
sortOrderstring: newest or oldestOrders ad rows newest first or oldest first. count ignores this setting.

Work limit

For ads, leaving maxItems empty returns all available results until the source is exhausted. The schema has no fixed upper bound for this field. When maxItems is set, it is a limit on saved ad rows. count ignores it.

Public input example

This example is copied from a successful current-beta default-input run.

{
"resultType": "ads",
"findAdsBy": "keyword",
"keywords": [
"demo"
],
"maxItems": 1,
"sortOrder": "newest"
}

🧾 Output

The run output exposes the default dataset through one link.

Dataset link

FieldTypeWhat it does
resultsURL stringOpens the default dataset overview for the run.

Ad record shape

Each ad row has resultType: "ad". Optional fields appear only when the source publishes them.

FieldTypeWhat it does
resultTypestring: adIdentifies this row as an ad record.
adIdstringGives the identifier published for the ad.
adUrlURL stringLinks to the public LinkedIn Ads Library ad-detail page.
advertiserobjectHolds the advertiser name and available branding.
advertiser.namestringGives the advertiser name published for the ad.
advertiser.logoUrlURL stringLinks to the advertiser logo when published.
payerobjectHolds the paying advertiser when the source publishes it.
payer.namestringGives the published payer name.
payer.logoUrlURL stringLinks to the payer logo when published.
creativeobjectHolds the source-published ad format, copy, and media.
creative.formatstringGives the ad format published by the source.
creative.bodystringGives the ad body copy when published.
creative.headlinestringGives the ad headline when published.
creative.mediaarray of objectsLists published image, video, document, carousel, or other media.
creative.media[].typestringGives the type of one media item.
creative.media[].urlURL stringLinks to one source media item when published.
creative.media[].thumbnailUrlURL stringLinks to one media thumbnail when published.
destinationUrlURL stringLinks to the ad destination or landing page when published.
publicationobjectHolds the source-published ad run dates.
publication.startDatedate stringGives the date when the source shows that the ad started.
publication.endDatedate stringGives the date when the source shows that the ad stopped, when available.
impressionsobjectHolds the source-published impression range.
impressions.minintegerGives the lower bound of the impression range.
impressions.maxintegerGives the upper bound of the impression range when available.
countryBreakdownsarray of objectsLists source-published impression or reach ranges by country.
countryBreakdowns[].countrystringGives the country named by the source.
countryBreakdowns[].impressionsobjectHolds the impression range for one country when published.
countryBreakdowns[].impressions.minintegerGives the lower bound of one country's impression range.
countryBreakdowns[].impressions.maxintegerGives the upper bound of one country's impression range when available.
countryBreakdowns[].reachobjectHolds the reach range for one country when published.
countryBreakdowns[].reach.minintegerGives the lower bound of one country's reach range.
countryBreakdowns[].reach.maxintegerGives the upper bound of one country's reach range when available.
targetingobjectHolds the source-published included and excluded targeting categories.
targeting.includedarray of stringsLists categories included by the source.
targeting.excludedarray of stringsLists categories excluded by the source.
sourceResultCountintegerGives the number of matching ads reported by the source when available.

This genuine, unshortened ad row comes from a successful current-beta run.

{
"resultType": "ad",
"adId": "1558614953",
"adUrl": "https://www.linkedin.com/ad-library/detail/1558614953",
"advertiser": {
"name": "Patryk Bandurski",
"logoUrl": "https://media.licdn.com/dms/image/v2/D4E03AQHNN5rKH2ds0w/profile-displayphoto-scale_100_100/B4EZrvOOFWHgAc-/0/1764950074209?e=1792022400&v=beta&t=gL1Eg9mbP_fAXxmZmp3NwXwNAcbGMnuS2D9geRVD-ZI"
},
"payer": {
"name": "Integration Trails"
},
"creative": {
"format": "SPONSORED_STATUS_UPDATE",
"body": "I'm inviting you to build agents with me for 5 weeks. 𝗠𝘂𝗹𝗲 𝗔𝗜 𝗙𝗼𝗿𝗴𝗲 𝘀𝘁𝗮𝗿𝘁𝘀 𝗢𝗰𝘁𝗼𝗯𝗲𝗿 𝟭𝟵𝘁𝗵. At Dreamforce, one thing was clear. Customers no longer ask \"what is an agent?\" They ask how to run agents safely and get real value from them. Honestly, this feels familiar. We went through digital transformation 10 years ago. 𝗔𝗴𝗲𝗻𝘁𝗶𝗰 𝘁𝗿𝗮𝗻𝘀𝗳𝗼𝗿𝗺𝗮𝘁𝗶𝗼𝗻 𝗵𝗮𝘀 𝗮 𝗹𝗼𝘁 𝗶𝗻 𝗰𝗼𝗺𝗺𝗼𝗻 𝘄𝗶𝘁𝗵 𝗶𝘁. Same questions, new layer. However, most AI training stops at the demo. In real projects, 𝗴𝗼𝘃𝗲𝗿𝗻𝗮𝗻𝗰𝗲 𝗮𝗻𝗱 𝗰𝗼𝘀𝘁 𝗰𝗼𝗻𝘁𝗿𝗼𝗹 𝗱𝗲𝗰𝗶𝗱𝗲 𝗶𝗳 𝗮𝗴𝗲𝗻𝘁𝘀 𝗯𝗿𝗶𝗻𝗴 𝗥𝗢𝗜 or a surprise invoice. So Forge covers the full path: → Build: agents, MCP servers, A2A → Govern: Omni Gateway, policies, identity, PII masking → Control cost: token usage, model routing, budgets → Ship: CLI, CI/CD 𝟮𝟱 𝗱𝗮𝘆𝘀, 𝟮𝟱 𝗰𝗵𝗮𝗹𝗹𝗲𝗻𝗴𝗲𝘀, You also learn when to tell a client: \"no, an agent is the wrong tool here.\" Why it matters for you: clients need people who can build agents and keep them under control. There are not many yet. 𝗧𝗵𝗮𝘁 𝗶𝘀 𝗮 𝗿𝗲𝗮𝗹 𝗰𝗮𝗿𝗲𝗲𝗿 𝗼𝗽𝗽𝗼𝗿𝘁𝘂𝗻𝗶𝘁𝘆 𝗳𝗼𝗿 𝗠𝘂𝗹𝗲𝗦𝗼𝗳𝘁 𝗮𝗻𝗱 𝗦𝗮𝗹𝗲𝘀𝗳𝗼𝗿𝗰𝗲 𝗰𝗼𝗻𝘀𝘂𝗹𝘁𝗮𝗻𝘁𝘀. It's 100% online, about 2 hours a day, at a time you pick. You get the cohort rhythm and a live session every week. Busy week? The materials stay with you. 𝗘𝗮𝗿𝗹𝘆 𝗯𝗶𝗿𝗱: $𝟵𝟵𝟳 Join → https://lnkd.in/dfmxxg_s What is harder at your clients right now: building agents or governing them? #AgentFabric #Salesforce #AIAgents #MuleSoftCommunity #MuleSoft",
"media": [
{
"type": "image",
"url": "https://media.licdn.com/dms/image/v2/D4D22AQG2HKhvETKcrw/feedshare-image-high-res/B4DaDOt3jPJoAU-/0/1790174526195?e=1792022400&v=beta&t=7idPqhc4TpADENc0Jbydd3Au-MHqGmgsPm6d_JzRaTk"
},
{
"type": "image",
"url": "https://media.licdn.com/dms/image/v2/D4D22AQEb3e98VEcFiQ/feedshare-shrink_1280/B4DaDOt3cOIcAQ-/0/1790174525424?e=1792022400&v=beta&t=PohWnlgrwKupplafC5f2YS9kmsJdIOJsrtjBOaxbZ4I"
},
{
"type": "image",
"url": "https://media.licdn.com/dms/image/v2/D4D22AQFMIzra4gQ5zg/feedshare-shrink_1280/B4DaDOt3bvKUAM-/0/1790174525417?e=1792022400&v=beta&t=DvR9VEkSo1-uHMELoQDynHQ6wP8oCH8pbXCmFQlR5Lk"
}
]
},
"destinationUrl": "https://lnkd.in/dfmxxg_s",
"publication": {
"startDate": "2026-09-23",
"endDate": "2026-09-24"
},
"impressions": {
"min": 150000,
"max": 200000
},
"targeting": {
"included": [
"Targeting includes English",
"Targeting includes United States, United Kingdom and 1 others European Union"
]
}
}

Match count shape

Each count row has resultType: "count" and the number reported by the source.

FieldTypeWhat it does
resultTypestring: countIdentifies this row as a match count.
sourceResultCountintegerGives the number of matching ads reported by the source.

This genuine count row comes from a successful current-beta run.

{
"resultType": "count",
"sourceResultCount": 1148740
}

💳 Pricing

This Actor uses pay-per-event pricing. The primary event applies to each matching ad saved to the dataset. A count-only run saves a count row, so it does not use the ad event.

Buyer-facing eventWhat it covers
AdOne matching ad with its available source fields is saved to your dataset.

Tier prices are shown in the Apify Store pricing panel.

🔌 Integrations

Open the results link in Apify or use the default Dataset API to read the saved rows.

❓ FAQ

Can one run combine several independent searches?

No. Each run uses one selected search method and one set of filters. Keyword lists and ad URL lists contain same-kind values for that selected method, not separate filter sets.

How do keyword and ad URL lists handle repeats?

When the same source ad appears again from another submitted value, the first eligible occurrence is saved and later matches are ignored. The saved row describes that first match.

Can I search by keyword or advertiser?

Yes. Choose keyword or advertiser, or start from a public search URL or public ad-detail URL list.

What does an empty maxItems value do?

For ads, leaving maxItems empty returns all available results until the source is exhausted. count ignores this setting.

What does a count run return?

It saves one row with resultType: "count" and sourceResultCount. It does not save matching ad rows.

Why is a field missing from an ad row?

LinkedIn does not publish every detail for every ad. Optional fields are omitted when the source does not provide them, and the Actor does not invent replacement values.

Does the Actor return spend, clicks, or conversions?

No. It returns source-published ad fields such as impressions, country breakdowns, and targeting. It does not provide spend, clicks, conversions, or campaign management data.

Can I use private LinkedIn data?

No. This Actor reads public LinkedIn Ads Library pages. It does not cover private or account-only LinkedIn surfaces.

📝 Changelog

v0.0 (25-09-2026)

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré