linkedin_ads_list_competitor_ads

List Competitor Ads

Linkedin

Description

List a competitor's ads from the scraped LinkedIn Ad Library corpus — real creative content (copy, CTA, landing URL, media metadata), not just library links. Includes posts from employees' own profiles that the advertiser paid for — each ad says attribution: "advertiser" (its company page) or "payer" (an employee post, with posted_by naming the person). Filter by active_only (still running), display_format (e.g. sponsored_status_update, sponsored_video, sponsored_update_linkedin_article), first_seen_since / first_seen_until (when the ad first appeared — the platform's start date, else when Hopkin first scraped it; use these for "new ads" and read count), since (last seen by a scrape on/after a date, so long-running ads match too), and search (full-text over ad copy). Requires no LinkedIn connection — the corpus is maintained by Hopkin's daily scrape of tracked advertisers. Get advertiser IDs from linkedin_ads_list_tracked_competitors or linkedin_ads_track_competitor. Each ad leaves out raw_data, the raw scraped payload behind these fields, unless include_raw is set. ${LINKEDIN_RAW_ONLY_DATA} raw_data is large, so pair include_raw with a small limit.

Read-onlyIdempotent

Usage

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "linkedin_ads_list_competitor_ads",
    "arguments": {
      "advertiser_id": "adv-uuid-from-tracked-list",
      "reason": "Review a competitor’s current creative strategy"
    }
  }
}

Parameters

NameTypeRequiredDescription
advertiser_id string Required The advertiser ID from linkedin_ads_list_tracked_competitors or linkedin_ads_track_competitorminLength: 1
reason string Required Why this tool call is neededminLength: 1, maxLength: 500
Optional parameters (9)
NameTypeRequiredDescription
active_only boolean Optional Only ads still running (no stopped_running_at)
display_format string Optional Filter by creative type as recorded from the LinkedIn Ad Library (case-insensitive). Observed values: sponsored_status_update, sponsored_video, sponsored_update_linkedin_article, sponsored_message, sponsored_update_native_document, sponsored_update_event. sponsored_status_update is a single-image post; the vocabulary is LinkedIn’s own and open-ended.minLength: 1
since string Optional Only ads a scrape last saw on or after this ISO date/timestamp (e.g. 2026-07-01) — compares last_seen_at, so an ad running for months still matches. For ads that are NEW, use first_seen_since.pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2})?)?$
first_seen_since string Optional Only ads that first appeared on or after this ISO date/timestamp (e.g. 2026-10-05). "First appeared" is the platform's own start date (started_running_at) when the ad has one, else first_seen_at — when Hopkin first scraped it, so a newly tracked advertiser's older ads can count as new. For "new ads in the last 7 days", pass the date 7 days ago with limit: 1 and read count.pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2})?)?$
first_seen_until string Optional Only ads that first appeared on or before this ISO date/timestamp — same clock as first_seen_since. A date alone (e.g. 2026-10-11) includes that whole UTC day.pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2})?)?$
search string Optional Case-insensitive search over ad copy (primary text, headline, description), up to 100 charactersminLength: 1, maxLength: 100
limit integer Optional Number of ads per page (default: 20, max: 100)min: 1, max: 100
cursor string Optional Pagination cursor from previous responseminLength: 1
include_raw boolean Optional Also return raw_data, the scraped LinkedIn Ad Library payload behind the normalized fields. Off by default. raw_data is the only place an ad's EU-DSA transparency data lives, under raw_data.detail: payer (the legal 'Paid for by' identity), total_impressions (an impression range), impressions_by_country, targeting and video_urls. It is there only when the scrape read the ad's detail page, and LinkedIn shows impressions and targeting only for ads delivered in the EU. Set include_raw for who pays for an ad, its impressions or reach by country, or its targeting. Raw rows are large (~1.4 KB per ad on average and up to 15 KB), so pass a small `limit` (e.g. 3-5) when setting this.

Examples

Browse all ads

{
  "advertiser_id": "adv-uuid-from-tracked-list",
  "reason": "Review a competitor’s current creative strategy"
}

hopkin linkedin competitor-ads list --advertiser-id adv-uuid-from-tracked-list

Active video ads

{
  "advertiser_id": "adv-uuid-from-tracked-list",
  "active_only": true,
  "display_format": "sponsored_video",
  "reason": "Study competitor video creative"
}

hopkin linkedin competitor-ads list --advertiser-id adv-uuid-from-tracked-list --active-only true --display-format sponsored_video

New ads this month

{
  "advertiser_id": "adv-uuid-from-tracked-list",
  "first_seen_since": "2026-08-01",
  "reason": "Find newly launched competitor ads"
}

hopkin linkedin competitor-ads list --advertiser-id adv-uuid-from-tracked-list --first-seen-since 2026-08-01

Search ad copy

{
  "advertiser_id": "adv-uuid-from-tracked-list",
  "search": "free trial",
  "reason": "Find offer-led competitor messaging"
}

hopkin linkedin competitor-ads list --advertiser-id adv-uuid-from-tracked-list --search free trial