LinkedIn Ad Library Scraper & Intelligence API avatar

LinkedIn Ad Library Scraper & Intelligence API

Pricing

from $4.00 / 1,000 ad delivereds

Go to Apify Store
LinkedIn Ad Library Scraper & Intelligence API

LinkedIn Ad Library Scraper & Intelligence API

Scrape LinkedIn's public Ad Library by company ID or keyword. Clean, consistent JSON with free enrichment: CTA type, creative format, language and duplicate detection. Monitor mode returns only new ads — and charges only for those. Built for marketers, agencies and AI agents.

Pricing

from $4.00 / 1,000 ad delivereds

Rating

0.0

(0)

Developer

Nina Mackie

Nina Mackie

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 days ago

Last modified

Share

Extract every ad a company is running from LinkedIn's public Ad Library — as clean, consistent JSON your scripts, spreadsheets and AI agents can use immediately. Built for marketers, agencies and developers who need competitor ad intelligence, not raw HTML.

Every field below was verified against live output on 27 July 2026. We list only what the actor actually returns.

Five-minute quick start

  1. Click Try for free.
  2. The default input is pre-filled — just press Start.
  3. Within a minute you'll have real ads in the dataset tab, exportable as JSON, CSV or Excel.

No configuration, no login, no LinkedIn account required.

Get better results: search by company ID

You can search by keyword, but a keyword matches any ad mentioning that word — including your competitors' ads. To pull one specific advertiser's ads precisely, use their LinkedIn company ID:

  1. Open the company's LinkedIn page and click Ads, or visit their Ad Library page.
  2. The URL contains companyIds= followed by a number. That's the ID.
  3. Put that number in queries, for example ["1441"] for Google.

You can mix them: ["1441", "2382910", "crm software"] works in a single run.

Presets

PresetWhat it does
Competitor monitoringDaily-schedule ready; returns only new or changed ads per run, and charges only for those
Creative inspirationLatest ads matching your keywords
Agency pitch researchFull ad history for a target advertiser before a pitch
Brand monitoringWatch for ads mentioning your brand
Monthly ad archiveFull snapshot for records or compliance

Output

One record per ad. Every documented field is always present — null when unavailable — so your parser never has to guess. Example record (field names exact, values illustrative):

{
"ad_id": "1475105064",
"advertiser_name": "Google",
"promoter_name": null,
"headline": "Study smarter with Google Gemini",
"ad_copy": "Level up your exam prep with Google Gemini...",
"creative_format": "image",
"image_urls": ["https://media.licdn.com/..."],
"video_urls": [],
"detail_url": "https://www.linkedin.com/ad-library/detail/1475105064",
"cta_type": "learn_more",
"language": "en",
"ad_copy_length": 148,
"is_personal_profile_ad": false,
"is_duplicate_creative": false,
"country_filter": "GB",
"query": "1441",
"ai_analysis": null,
"_source": "https://www.linkedin.com/ad-library/search?companyIds=1441",
"_scraped_at": "2026-07-27T15:04:45.680Z",
"_first_seen": "2026-07-27T15:04:45.680Z",
"_last_seen": "2026-07-27T15:04:45.792Z",
"_record_hash": "446415c7716f..."
}

Fields worth knowing about

  • is_personal_profile_ad / promoter_name — LinkedIn lets companies promote posts from an individual's profile, an executive for instance. Most scrapers report the person as the advertiser, which quietly corrupts competitor analysis. We resolve the paying company into advertiser_name and keep the individual in promoter_name.
  • ad_copy_length — useful for spotting whether a competitor is testing short-form or long-form copy.
  • is_duplicate_creative — flags the same creative reappearing across runs, so you can tell a genuinely new campaign from a re-serve.
  • _first_seen / _last_seen — how long a creative has been live, accumulated across your runs. Long-running creatives are usually the ones performing.

Enrichment (creative_format, cta_type, language, ad_copy_length, duplicate detection, first/last seen) is included at no extra charge. Optional AI campaign analysis is a separately charged add-on, off by default.

Use it from anywhere

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("InteractApps/linkedin-ad-library-scraper").call(
run_input={"queries": ["1441"], "country": "GB", "maxResults": 100})
for ad in client.dataset(run["defaultDatasetId"]).iterate_items():
print(ad["advertiser_name"], ad["headline"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const { defaultDatasetId } = await client
.actor('InteractApps/linkedin-ad-library-scraper')
.call({ queries: ['1441'], preset: 'competitor_monitoring' });
const { items } = await client.dataset(defaultDatasetId).listItems();

Claude / GPT agent prompt

Run the linkedin-ad-library-scraper actor with
queries=["<company ID>"] and preset="competitor_monitoring".
Summarise new campaigns: objectives, hooks, CTA types, and how
messaging has changed since the previous run.

Select the Competitor monitoring preset, or set onlyNew: true, and schedule the actor daily.

The actor remembers every ad it has delivered to you and returns only new or changed ones. You are charged only for what is returned — on a day when a competitor launches nothing, the run costs you nothing. The first run backfills their current ads; after that, most days are a handful of records or zero.

This is the cheapest way to never miss a competitor launch, and it is the main reason to leave this actor running rather than pulling data ad hoc.

Honest limitations

  • Data comes from LinkedIn's public Ad Library. Fields LinkedIn does not publish — exact spend, full targeting detail, precise impressions — are not invented by us. What the library exposes varies by region; EU ads show more under DSA rules.
  • Keyword search matches ad text, so it returns any advertiser using that phrase. Use company IDs when you want one specific advertiser.
  • If LinkedIn changes its page markup, the actor detects it, saves a diagnostic sample and skips rather than emitting malformed records. We aim to ship repairs within 24 to 48 hours. Runs that return nothing are not charged.
  • Public, non-personal data only. No login-walled content, and no personal data of private individuals.

Pricing and support

$0.004 per delivered ad, plus optional AI analysis per record.

You are charged only for ads actually delivered. Failed runs, layout misses and ads filtered out by monitor mode all cost nothing, and the maxResults setting is a hard ceiling, so a run can never bill beyond the cap you set.

Support: message via the Issues tab — responses within 24 hours on weekdays.


Changelog — v2 (27 July 2026): corrected output schema to match verified live output; removed landing_url, ad_start_date and ad_end_date, which are not exposed in the card markup; added ad_id, detail_url, promoter_name, is_personal_profile_ad and ad_copy_length; added company-ID guidance; price set to $0.004; removed references to an examples folder that does not exist yet.