OrbTop

LinkedIn Ad Library Advertiser Disclosure Scraper

LEAD GENERATION

Independent tool. Trademarks referenced on this page are the property of their respective owners and are used only to identify the public website this tool reads. No affiliation or endorsement.

LinkedIn Ad Library Advertiser Disclosure Scraper

Scrapes LinkedIn's Ad Library by keyword, company ID, or country and returns the full disclosure record for each ad — not just the creative. That includes the EU DSA block most competing scrapers never fetch: total and per-country impressions, audience targeting, and the legal entity paying for the ad.


LinkedIn Ad Library Scraper Features

  • Search by free-text keyword, LinkedIn company ID, or both — run them independently in the same job
  • Restrict results to specific countries or a date window (last 30 days, this month, this year, last year)
  • Returns every ad creative field: headline, body copy, CTA text, destination URL, images, video, document title
  • Pulls the "Paid for by" legal entity — on agency-run campaigns this is the media agency, not the brand
  • Pulls the EU DSA disclosure block when LinkedIn publishes it: total impressions bucket, impressions by country, and the targeting parameters (language, location, and whether company/demographic/education/interest targeting was used)
  • Deduplicates ads found across multiple keyword or company searches automatically

Who Uses This

  • B2B sales and prospecting teams — build a list of who's advertising on LinkedIn in a given category or country, and who's actually paying for it
  • Competitive intelligence — track a competitor's ad cadence, creative angles, and targeting choices over time
  • Agencies — audit which agency runs media for which brand, visible directly in the "Paid for by" field
  • Compliance and research teams — pull the EU DSA disclosure fields (impressions by country, targeting parameters) LinkedIn is legally required to publish for EEA-targeted ads

How It Works

  1. Give the actor one or more search keywords, LinkedIn company IDs, or both.
  2. Optionally narrow by country and/or a date range.
  3. The actor walks the Ad Library search results for each combination and opens every ad's detail page.
  4. Each record comes back with the creative, the advertiser, and whatever disclosure data LinkedIn publishes for that ad — some fields are only present for ads targeted at the EU/EEA, since that's what triggers the DSA disclosure requirement.

Input

{
  "keywords": ["hubspot"],
  "companyIds": [],
  "countries": [],
  "dateOption": "",
  "maxItems": 25
}
Field Type Default Description
keywords array of strings ["hubspot"] Free-text search terms. Each keyword is searched independently.
companyIds array of strings [] LinkedIn company IDs (from linkedin.com/company/<id>) to fetch ads for directly. At least one of keywords or companyIds is required.
countries array of strings [] Restrict results to ads targeting these countries (ISO-style 2-letter codes, e.g. US, GB, DE). Leave empty to search worldwide.
dateOption string "" (all time) One of last-30-days, current-month, current-year, last-year, or empty for no date filter.
maxItems integer 10 Maximum number of ads to return.

Resuming a large crawl

Every run emits a resumeCursor in its Output. To continue a crawl that stopped — hit maxItems, a per-run spend cap, or was aborted — start a new run with the same input plus that resumeCursor. You are not re-charged for ads already returned. Resume within your account's data-retention window.


LinkedIn Ad Library Scraper Output Fields

{
  "ad_id": "1486704414",
  "detail_url": "https://www.linkedin.com/ad-library/detail/1486704414",
  "advertiser_name": "Microsoft",
  "advertiser_company_url": "https://www.linkedin.com/company/1035",
  "advertiser_company_id": "1035",
  "paid_for_by": "ZENITH UK (MEDIA) LIMITED",
  "ad_type": "Single Image Ad",
  "creative_type": "SPONSORED_STATUS_UPDATE",
  "promoted_label": "Promoted",
  "ad_headline": "Experience FabCon+SQLCon Europe 2026",
  "ad_body_text": "Join data leaders, architects, analysts, developers, and IT professionals...",
  "ad_cta_text": "Register",
  "ad_destination_url": "https://espc.tech/conference/fabcon-europe-2026/",
  "image_urls": ["https://media.licdn.com/dms/image/v2/..."],
  "video_url": null,
  "document_title": null,
  "first_shown_date": "Aug 5, 2026",
  "last_shown_date": "Aug 10, 2026",
  "total_impressions_range": "10k-20k",
  "impressions_by_country": ["Italy: 26%", "France: 24%"],
  "audience_targeting_language": ["English"],
  "audience_targeting_location": ["Germany", "Netherlands", "Italy", "France"],
  "audience_targeting_company": ["Targeted"],
  "search_keyword": null,
  "search_country": null,
  "scraped_at": "2026-08-10T04:21:18.789Z"
}
Field Type Description
ad_id string LinkedIn Ad Library ad id
detail_url string URL of the ad's Ad Library detail page
advertiser_name string Advertiser company name
advertiser_company_url string LinkedIn company page URL of the advertiser
advertiser_company_id string Numeric LinkedIn company id of the advertiser
paid_for_by string The legal entity disclosed as paying for the ad — often a media agency, not the brand
ad_type string Ad format: Single Image Ad, Video Ad, Carousel Ad, Document Ad, Message Ad, etc.
creative_type string Raw LinkedIn creative-type code, e.g. SPONSORED_STATUS_UPDATE
promoted_label string The "Promoted" label text shown on the ad card
ad_headline string Ad headline text
ad_body_text string Ad body / commentary text
ad_cta_text string Call-to-action button text, e.g. Learn more, Register
ad_destination_url string Destination URL the ad links to, when disclosed
image_urls array of strings Creative image URLs
video_url string Creative video URL, for video ads
document_title string Document title, for document ads
first_shown_date string Start of the disclosed run window
last_shown_date string End of the disclosed run window
total_impressions_range string EU DSA disclosure: total impressions bucket, e.g. 10k-20k. Present only when LinkedIn publishes it
impressions_by_country array of strings EU DSA disclosure: per-country impression share, formatted as Country: NN%. Present only when LinkedIn publishes it
audience_targeting_language array of strings Targeted languages. Present only when disclosed
audience_targeting_location array of strings Targeted locations. Present only when disclosed
audience_targeting_company array of strings Whether Company was a targeted or excluded parameter. Present only when disclosed
audience_targeting_demographic array of strings Whether Demographic was a targeted or excluded parameter. Present only when disclosed
audience_targeting_education array of strings Whether Education was a targeted or excluded parameter. Present only when disclosed
audience_targeting_interests_traits array of strings Whether Member Interests and Traits was a targeted or excluded parameter. Present only when disclosed
search_keyword string The search keyword that discovered this ad, if any
search_country string The country filter used to discover this ad, if any
scraped_at string ISO 8601 timestamp when the record was scraped

A note on the DSA fields: LinkedIn only publishes the impressions and targeting block for ads targeted at the EU/EEA, and the per-country breakdown specifically only once an ad has been running for a couple of days. Ads outside that scope, or too new for the breakdown yet, simply don't carry those keys on the returned record — that's LinkedIn's own publishing rule, not a gap in the actor.


FAQ

Does this need a LinkedIn login?

No. The Ad Library is public, and every field this actor returns comes from that public page.

Why are some fields missing on certain ads?

LinkedIn only discloses total/per-country impressions and audience targeting for ads run in the EU/EEA, per the DSA — and the per-country breakdown specifically only once an ad has been running a couple of days. Ads outside that scope, or too new for the breakdown yet, simply don't carry that data on LinkedIn's own page, so those records don't carry the corresponding fields either.

Can I search by company instead of keyword?

Yes. Pass one or more numeric LinkedIn company IDs in companyIds — find one by opening a company's LinkedIn page and reading the id out of the URL.

Does the country filter change which ads I get?

Yes — it restricts results to ads LinkedIn shows as targeting that country, not just ads posted by an advertiser based there.


Need More Features?

Open an issue on the actor's Apify page and describe what you need.

Why Use This LinkedIn Ad Library Scraper?

  • Reaches the disclosure page, not just the search card — impressions by country, full targeting parameters, and the paying legal entity, all fields most competing scrapers stop short of
  • Two discovery modes in one actor — sweep a whole category by keyword, or track specific advertisers by company ID, in the same run
  • Deduplicates automatically — search the same market from multiple angles without paying for the same ad twice