linkedin_ads_list_competitor_ads
List Competitor Ads
LinkedinDescription
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.
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"
}
}
}
hopkin linkedin competitor-ads list
| Flag | Type | Required | Description |
|---|---|---|---|
--advertiser-id | string | Required | The advertiser ID from linkedin_ads_list_tracked_competitors or linkedin_ads_track_competitor |
--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. |
--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. |
--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. |
--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. |
--search | string | Optional | Case-insensitive search over ad copy (primary text, headline, description), up to 100 characters |
--limit | integer | Optional | Number of ads per page (default: 20, max: 100) |
--cursor | string | Optional | Pagination cursor from previous response |
--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. |
{
"mcpServers": {
"linkedin-ads": {
"url": "https://linkedin.mcp.hopkin.ai",
"transport": "sse"
}
}
}
- Browse all ads
- Active video ads
- New ads this month
- Search ad copy
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
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)
| Name | Type | Required | Description |
|---|---|---|---|
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