LinkedIn Ads
LinkedIn Marketing API v202602 for B2B advertising
26 tools available
Installation
Claude Desktop
{
"mcpServers": {
"hopkin-linkedin-ads": {
"url": "https://linkedin.mcp.hopkin.ai",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
CLI
npm install -g @hopkin/cli
hopkin auth set-key hpk_live_...
hopkin linkedin ping
Platform Overview
The LinkedIn Ads MCP server enables programmatic management and analysis of LinkedIn Sponsored Content campaigns through the LinkedIn Marketing API v202602. It provides tools for B2B audience targeting, campaign performance tracking, lead generation monitoring, and professional demographic breakdowns unique to LinkedIn's platform.
Your prompt → Claude + Hopkin → LinkedIn Marketing API v202602
↓
Campaign Data
B2B Audience Insights
Lead Gen Metrics
Professional Targeting
Common Workflows
Performance Reporting
"Show me how my campaigns performed over the last 30 days, broken down by campaign group."
Calls linkedin_ads_get_performance_report with pivots=['CAMPAIGN_GROUP'], date_preset='LAST_30_DAYS'. Returns spend, impressions, clicks, conversions, leads, and engagement metrics aggregated by campaign group with optional per-conversion-action breakdown.
"What's my account-level summary for this month, including conversion breakdown?"
Calls linkedin_ads_get_account_summary with date_preset='THIS_MONTH'. Returns total spend, impressions, clicks, leads, one-click conversions, and a per-conversion-action summary (e.g., signups vs. downloads).
"I need daily performance trends by campaign for the last 7 days."
Calls linkedin_ads_get_performance_report with pivots=['CAMPAIGN'], time_granularity='DAILY', date_preset='LAST_7_DAYS'. Returns daily spend, impressions, clicks, and conversions broken down by individual campaigns.
Campaign Management
"List all my active campaigns in account 123456789."
Calls linkedin_ads_list_campaigns with account_id='123456789', status=['ACTIVE']. Returns campaign names, IDs, budgets, run schedules, targeting summary, and serving status.
"Show me all campaign groups and which campaigns belong to each."
Calls linkedin_ads_list_campaign_groups to get all campaign groups, then for each group calls linkedin_ads_list_campaigns with campaign_group_id. Displays the hierarchy with budget and status for each level.
"What creatives (ads) are running in my top-performing campaign?"
Calls linkedin_ads_list_creatives with campaign_ids=['campaign-id'], resolve_content=true. Returns ad copy, headlines, body text, associated URLs, and status for each creative in the campaign.
B2B Audience Analysis
"Which job functions are driving the most conversions?"
Calls linkedin_ads_get_insights with pivot='MEMBER_JOB_FUNCTION', date_preset='LAST_30_DAYS', include_conversion_breakdown=true. Returns impressions, clicks, spend, and conversions by job function (e.g., Engineering, Sales, Marketing, HR). Note: Requires ≥3 events per dimension; data delayed 12-24 hours.
"Break down my campaign performance by seniority level and industry."
Calls linkedin_ads_get_insights twice — once with pivot='MEMBER_SENIORITY' and once with pivot='MEMBER_INDUSTRY'. Returns CTR, CPC, CPA metrics by seniority level and by industry. Useful for identifying which professional segments have the best ROI.
"What's my reach and engagement by company size?"
Calls linkedin_ads_get_insights with pivot='MEMBER_COMPANY_SIZE', date_preset='LAST_30_DAYS'. Returns approximate member reach, impressions, engagements, and cost metrics segmented by company size (1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+).
Lead Generation
"How many one-click leads did I get, and which campaigns generated the most?"
Calls linkedin_ads_get_performance_report with pivots=['CAMPAIGN'], date_preset='LAST_30_DAYS'. Extracts the oneClickLeads metric broken down by campaign. Can then cross-reference with linkedin_ads_get_account_summary for conversion action details.
"What conversion actions are configured for my account?"
Calls linkedin_ads_get_partner_conversions with account_id to see all conversion tracking actions (e.g., form submissions, website conversions, lead magnet downloads). Essential before analyzing conversion breakdown reports.
Recipes
"I want to understand which geographic markets are performing best. Show me impressions, clicks, and spend broken down by country."
Calls linkedin_ads_get_insights with pivot='MEMBER_COUNTRY_V2', date_preset='LAST_30_DAYS', include_conversion_breakdown=true. Returns per-country metrics to identify high-performing markets for budget reallocation. Data shows member reach by country plus conversion details.
"Compare the performance of my SPONSORED_UPDATES campaigns vs SPONSORED_CONTENT campaigns across all metrics."
Calls linkedin_ads_list_campaigns with type=['SPONSORED_UPDATES'], then type=['SPONSORED_CONTENT'] to get campaign IDs. Then calls linkedin_ads_get_performance_report with separate pivots=['CAMPAIGN'] for each type filtered by campaign_ids. Reveals which content format type drives better ROI.
"I need a full performance breakdown: account summary, daily trends by campaign, and audience demographics by job function."
Chains three calls: (1) linkedin_ads_get_account_summary for overall metrics, (2) linkedin_ads_get_performance_report with pivots=['CAMPAIGN'], time_granularity='DAILY', (3) linkedin_ads_get_insights with pivot='MEMBER_JOB_FUNCTION'. Stitches results into a comprehensive executive summary with daily trends and audience insight.
"Which creatives are running in my highest-spend campaigns, and how are they performing?"
Calls linkedin_ads_get_performance_report with pivots=['CAMPAIGN'], sorts by spend, identifies top N campaigns, then calls linkedin_ads_list_creatives with those campaign_ids and resolve_content=true to see ad copy and performance.
"Show me the complete campaign hierarchy, including campaign groups, campaigns, and creatives, for a specific account."
Calls (1) linkedin_ads_list_campaign_groups, (2) linkedin_ads_list_campaigns grouped by campaign_group_id, (3) linkedin_ads_list_creatives for each campaign with resolve_content=true. Builds a nested view of the entire account structure with ad copy and status.
"I want to optimize budget allocation. Show me CPA by campaign, industry, and job function to identify the most efficient segments."
Calls linkedin_ads_get_performance_report with pivots=['CAMPAIGN'], then linkedin_ads_get_insights with pivot='MEMBER_INDUSTRY', and pivot='MEMBER_JOB_FUNCTION'. Filters for rows with >0 spend and conversions, calculates CPA, and ranks by efficiency. Highlights underspend opportunities in high-performing segments.
Tips
- **MEMBER_* Demographic Pivots Have Constraints**: LinkedIn's demographic breakdowns (job function, seniority, industry, company size, country) require at least 3 events per dimension and have a 12-24 hour data delay. Rows below the threshold are silently dropped, so totals may not match account-level aggregates.
- Performance Report vs. Insights: Use
linkedin_ads_get_performance_reportfor standard analysis (campaign, campaign group, creative pivots, up to 3 dimensions). Uselinkedin_ads_get_insightsonly when you need a MEMBER_* demographic pivot or a custom metric. Performance Report includes conversion breakdown by default; Insights includes it optionally.
- Conversion Action Tracking: Always check
linkedin_ads_get_partner_conversionsfirst to understand what conversion tracking is configured. Conversion breakdown in performance and insights reports only includes configured actions; if the action isn't set up, it won't appear in the data.
- Date Ranges and Presets: LinkedIn supports LAST_7_DAYS, LAST_14_DAYS, LAST_30_DAYS, THIS_MONTH, LAST_MONTH, and LAST_90_DAYS presets. For custom ranges, use start_date and end_date (ISO format YYYY-MM-DD). Conversion data lags 24-72 hours, so avoid querying for "today" — use at least the last 7 days for stable numbers.
Tools
account-summary
linkedin_ads_get_account_summary Get LinkedIn Account Summary
Get a high-level performance summary for a LinkedIn Ads account including spend, impressions, clicks, conversions, leads, and conversion breakdown. Conversion data may be delayed 24-72 hours.
| Parameter | Type | Description |
|---|---|---|
account_id required | string | Ad account ID (numeric, without URN prefix). |
reason required | string | Why this tool call is needed |
4 optional parameters
| Parameter | Type | Description |
|---|---|---|
date_preset | string | |
start_date | string | |
end_date | string | |
connection_id | string | Optional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs. |
activities
linkedin_ads_get_activities Get LinkedIn Ads Change History
What changed in a LinkedIn ad account, and when: budgets, bids, status, targeting, schedules and names of campaign groups, campaigns and creatives, with before/after values.
| Parameter | Type | Description |
|---|---|---|
account_id required | string | LinkedIn ad account ID (numeric, or the sponsoredAccount URN). |
reason required | string | Why this tool call is needed |
8 optional parameters
| Parameter | Type | Description |
|---|---|---|
start_date | string | Start of the window, YYYY-MM-DD (UTC). Defaults to 7 days ago. |
end_date | string | End of the window, YYYY-MM-DD (UTC), inclusive. Defaults to today. |
entity_type | string | Only changes to this kind of entity. |
entity_ids | array | Only changes to these campaign group / campaign / creative IDs (numeric or URN). |
limit | integer | Changes per page (1-200, default 50). |
cursor | string | nextCursor from the previous response. Pass it with otherwise identical parameters for the next page. |
refresh | boolean | Re-scan the account now before answering. Normally not needed: the account is re-scanned when the last scan is over 15 minutes old. |
connection_id | string | Optional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs. |
ad-accounts
linkedin_ads_list_ad_accounts List LinkedIn Ad Accounts
List LinkedIn Sponsored Ad Accounts accessible to the authenticated user.
| Parameter | Type | Description |
|---|---|---|
reason required | string | Why this tool call is needed |
7 optional parameters
| Parameter | Type | Description |
|---|---|---|
status | array | Filter by account status. Defaults to [ACTIVE]. |
type | string | Filter by account type. |
include_test_accounts | boolean | Include test accounts. Defaults to false. |
limit | integer | |
cursor | string | Opaque pagination cursor. |
refresh | boolean | |
connection_id | string | Optional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs. |
search-ad-library
linkedin_ads_search_ad_library Search LinkedIn Ad Library
Search the LinkedIn Ad Library for ads from any advertiser. Returns real creative content — ad copy (primary text, headline, description, CTA), landing URLs, run dates, and media source/mirrored URLs. Served from Hopkin's scraped ad-library corpus (LinkedIn exposes no ad-library API), results under \
| Parameter | Type | Description |
|---|---|---|
countries required | array | REQUIRED. ISO-3166-1 alpha-2 country codes (e.g. ["US", "GB"] — use "GB" not "UK") or ["ALL"]. Scopes on-demand scrapes; corpus rows carry no per-ad reach countries. |
reason required | string | Why this tool call is needed |
11 optional parameters
| Parameter | Type | Description |
|---|---|---|
search_terms | string | Keywords to search for in ad content. Spaces act as AND. Use the language the ad is written in. |
search_type | string | Search mode: KEYWORD_UNORDERED (default, any order) or KEYWORD_EXACT_PHRASE |
advertiser_name | string | One company's ads, by name — exactly as shown on its LinkedIn page, e.g. "Refine Labs". Searches the Ad Library's advertiser-name field, so use this, NOT search_terms, to see what a company is running (if you know its numeric organization ID, organization_ids is exact); not yet in the corpus, it is looked up live and the rest of its ads are collected in the background. Includes posts from employees' profiles it paid for, marked attribution: "payer". Not together with organization_ids. |
organization_ids | array | Up to 10 numeric LinkedIn organization IDs — the number in linkedin.com/company/<id>, in an Ad Library companyIds= URL, or from linkedin_ads_list_tracked_competitors. The search is exact, and an organization nobody has scraped yet is looked up live (the first ID only, per call) with the rest of its ads collected in the background. Prefer this over advertiser_name when you know the ID. |
ad_active_status | string | Filter by delivery status. Default: ACTIVE |
ad_delivery_date_min | string | Minimum delivery date (YYYY-MM-DD) |
ad_delivery_date_max | string | Maximum delivery date (YYYY-MM-DD). Ads whose start date is unknown (not yet detail-enriched) are excluded by this bound. |
display_format | string | 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. |
languages | array | Filter by language name as shown in LinkedIn ad transparency data, e.g. ["English"] |
limit | integer | Results per page (default: 25, max: 50) |
cursor | string | Pagination cursor from previous response |
auth
linkedin_ads_check_auth_status Check LinkedIn Ads Authentication Status
Troubleshoot authentication issues and get user profile info. Only use when another tool fails with a permission or authentication error — do NOT call proactively.
| Parameter | Type | Description |
|---|---|---|
reason required | string | Why this tool call is needed |
1 optional parameter
| Parameter | Type | Description |
|---|---|---|
connection_id | string | Optional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs. |
linkedin_ads_ping Ping LinkedIn Ads MCP Server
Health check for the LinkedIn Ads MCP server. Does not call the LinkedIn API.
| Parameter | Type | Description |
|---|---|---|
reason required | string | Why this tool call is needed |
1 optional parameter
| Parameter | Type | Description |
|---|---|---|
message | string | Optional message to echo back |
budget-pricing
linkedin_ads_get_budget_pricing Get LinkedIn Budget & Pricing
Get bid ranges and daily budget limits for a LinkedIn campaign type and audience. Call this before creating a campaign to understand recommended bids. DYNAMIC campaign type is not supported by this endpoint.
| Parameter | Type | Description |
|---|---|---|
account_id required | string | Ad account ID (numeric, without URN prefix). |
campaign_type required | string | Campaign type. DYNAMIC is not supported by this endpoint. |
bid_type required | string | Bid type. CPV is only valid for SPONSORED_UPDATES video campaigns. |
match_type required | string | |
currency required | string | ISO-4217 currency code (e.g. USD, GBP). |
location_urns required | array | Target location URNs (e.g. urn:li:geo:103644278 for USA). |
reason required | string | Why this tool call is needed |
7 optional parameters
| Parameter | Type | Description |
|---|---|---|
seniority_urns | array | Target seniority URNs (e.g. urn:li:seniority:4 for Senior). |
job_function_urns | array | Target job function URNs. |
industry_urns | array | Target industry URNs. |
company_size_urns | array | Target company size range URNs (e.g. urn:li:staffCountRange:(51,200)). |
objective_type | string | Affects suggested bid. |
daily_budget_amount | number | Current or target daily budget (influences suggested bid calculation). |
connection_id | string | Optional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs. |
campaign-groups
linkedin_ads_list_campaign_groups List LinkedIn Campaign Groups
List LinkedIn Campaign Groups for an ad account. Campaign groups are the top-level organizational unit containing campaigns.
| Parameter | Type | Description |
|---|---|---|
account_id required | string | Ad account ID (numeric, without URN prefix). |
reason required | string | Why this tool call is needed |
7 optional parameters
| Parameter | Type | Description |
|---|---|---|
status | array | Filter by status. Defaults to [ACTIVE, PAUSED]. |
campaign_group_id | string | Fetch a single campaign group by numeric ID. |
campaign_group_ids | array | Fetch specific campaign groups by numeric IDs (batch GET). |
limit | integer | |
cursor | string | |
refresh | boolean | |
connection_id | string | Optional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs. |
campaigns
linkedin_ads_list_campaigns List LinkedIn Campaigns
List LinkedIn Campaigns for an ad account. Campaigns define targeting, bidding, and budget within a campaign group. Pass include_targeting: true for full normalized targetingCriteria (include/exclude facets with URNs resolved to human names) + audience expansion, audience network preferences, frequency cap, and conversion actions. Pass include_forecast: true to additionally return per-campaign audience size forecasts (requires include_targeting).
| Parameter | Type | Description |
|---|---|---|
account_id required | string | Ad account ID (numeric, without URN prefix). |
reason required | string | Why this tool call is needed |
11 optional parameters
| Parameter | Type | Description |
|---|---|---|
status | array | Filter by status. Defaults to [ACTIVE, PAUSED]. |
campaign_group_id | string | Filter by campaign group (numeric ID). |
type | array | Filter by campaign type. |
campaign_id | string | Fetch a single campaign by numeric ID. |
campaign_ids | array | Fetch specific campaigns by numeric IDs (batch filter). |
limit | integer | |
cursor | string | |
refresh | boolean | |
include_targeting | boolean | Return full normalized targetingCriteria (include + exclude facets with URNs resolved to human names), plus audience_expansion_enabled, audience_network_enabled, frequency_cap, creative_selection, and conversion_actions. Adds ~6-13 API calls per list regardless of campaign count (batched URN resolution is cached). |
include_forecast | boolean | Add audience_forecast (total + breakdown by channel) to each campaign. Requires include_targeting: true. Adds 1 API call per campaign (capped 5 parallel). Per-campaign failures are non-fatal. |
connection_id | string | Optional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs. |
chart
linkedin_ads_render_chart Render LinkedIn Ads ChartMCP App
Interactive chart renderer for LinkedIn Ads performance visualization
bar scatter timeseries funnel waterfall choropleth| Parameter | Type | Description |
|---|---|---|
reason required | string | Brief explanation of why you are rendering this chart |
chart required | object | Chart configuration. Supported types: bar, scatter, timeseries, funnel, waterfall, choropleth. |
competitor-ads
linkedin_ads_list_competitor_ads List Competitor Ads
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), since (seen on/after a date), 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.
| Parameter | Type | Description |
|---|---|---|
advertiser_id required | string | The advertiser ID from linkedin_ads_list_tracked_competitors or linkedin_ads_track_competitor |
reason required | string | Why this tool call is needed |
6 optional parameters
| Parameter | Type | Description |
|---|---|---|
active_only | boolean | Only ads still running (no stopped_running_at) |
display_format | string | 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 | Only ads seen on or after this ISO date/timestamp (e.g. 2026-07-01) |
search | string | Case-insensitive search over ad copy (primary text, headline, description) |
limit | integer | Number of ads per page (default: 20, max: 100) |
cursor | string | Pagination cursor from previous response |
competitor-ad
linkedin_ads_get_competitor_ad Get Competitor Ad
Fetch one competitor ad in full detail from the scraped corpus and SEE the creative: complete copy (headline, primary text, description, CTA), landing URL, run dates, and every media asset. Mirrored images and video thumbnails are returned inline as image content blocks. For videos, pass include_frames to inline extracted frames (capped at ~40 images; window with start/end seconds and stride) — short-TTL signed URLs for EVERY frame, the audio track, and each original are always in structuredContent, along with frame_count/frame_fps (duration ≈ frame_count / frame_fps), the voiceover transcript, and the audio analysis. Media not yet mirrored or processed degrades to source URLs with a note. Requires no LinkedIn connection. Get ad IDs from linkedin_ads_list_competitor_ads.
| Parameter | Type | Description |
|---|---|---|
ad_id required | string | The library ad ID from linkedin_ads_list_competitor_ads |
reason required | string | Why this tool call is needed |
4 optional parameters
| Parameter | Type | Description |
|---|---|---|
include_frames | boolean | Include extracted video frames as image content blocks (default: false) |
stride | integer | Return every Nth extracted frame. Defaults to a context-safe stride capping frames at ~40 images. |
start | number | Only frames at or after this offset into the video, in seconds |
end | number | Only frames at or before this offset into the video, in seconds |
track-competitor
linkedin_ads_track_competitor Track Competitor
Register a LinkedIn advertiser for daily ad-library tracking — its company-page ads plus the posts from employees' own profiles it pays for. Pass organization_id when you know it — the numeric LinkedIn organization ID (the number in linkedin.com/company/<id>, or in an Ad Library URL's companyIds=). It is exact: an organization not yet in the corpus is looked up live by ID (about 20–40 s) and tracked in this same call under its real name; no ads from it → a plain "no ads" answer, nothing tracked. company_url accepts the same IDs as a URL — a numeric /company/<id> URL or an Ad Library search URL with one companyIds= (e.g. https://www.linkedin.com/ad-library/search?companyIds=17955831) — while a vanity slug is only a name guess ("hawkemedia" is not "Hawke Media" — pass name then). Otherwise pass name: the company name exactly as it appears on its LinkedIn page (e.g. "Refine Labs"). The name search is fuzzy: a name not yet in the corpus is looked up live and tracked if exactly one advertiser has that name; several advertisers → a candidate list and NOTHING tracked (retry with organization_id from it); none → a plain answer that LinkedIn has no ads from that name. Short or generic names (e.g. "Remote") can surface only lookalikes — use organization_id for those. countries (ISO codes, or ["ALL"]) sets where it is tracked; omit for the default. A new track, or new countries, starts a full background scrape (full_scrape: "started"); the response reports seeded, countries, full_scrape and any warning separately. Undo with linkedin_ads_untrack_competitor — ads already scraped stay in the shared corpus. The tracked-competitor plan limit is shared with Meta. Requires no LinkedIn connection.
| Parameter | Type | Description |
|---|---|---|
reason required | string | Why this tool call is needed |
4 optional parameters
| Parameter | Type | Description |
|---|---|---|
name | string | The company name exactly as shown on its LinkedIn page, e.g. "Refine Labs" — use it when you do not have the organization ID. The Ad Library name search is fuzzy: a name not in the corpus yet is looked up live (about 20–40 s) and tracked if exactly one advertiser has that name. Several → candidates, tracks nothing; only similarly named advertisers → those names as candidates to retry with; none → a plain "no ads" answer. Short or generic names (e.g. "Remote") may surface only lookalikes — pass organization_id then. |
company_url | string | LinkedIn company page or Ad Library URL. A numeric company URL (https://www.linkedin.com/company/1035) or an Ad Library URL with one companyIds= (https://www.linkedin.com/ad-library/search?companyIds=17955831) resolves exactly like organization_id. A vanity slug (/company/refine-labs) is only a NAME GUESS ("refine labs"), tracked if it exactly matches an advertiser — slugs such as "hawkemedia" often do not; pass name then. |
organization_id | string | RECOMMENDED when known. Numeric LinkedIn organization ID — the number in linkedin.com/company/<id> or in an Ad Library URL's companyIds=. Exact: an organization not in the corpus yet is looked up live by ID (about 20–40 s) and tracked under its real name; no ads from it → a plain "no ads" answer, nothing tracked. |
countries | array | ISO-3166-1 alpha-2 codes to track this advertiser in, e.g. ["US","GB","DE"] (use "GB", not "UK"), or ["ALL"]. Omit for the default sweep countries. Re-tracking with a different set updates it. |
untrack-competitor
linkedin_ads_untrack_competitor Untrack Competitor
Stop tracking a LinkedIn advertiser. Removes only your tracking registration — the shared ad corpus is untouched, and untracking an advertiser that was never tracked succeeds with removed: false. Get advertiser IDs from linkedin_ads_list_tracked_competitors.
| Parameter | Type | Description |
|---|---|---|
advertiser_id required | string | The advertiser ID from linkedin_ads_list_tracked_competitors |
reason required | string | Why this tool call is needed |
tracked-competitors
linkedin_ads_list_tracked_competitors List Tracked Competitors
List the LinkedIn advertisers you are tracking: advertiser name, organization ID, the countries you track it in, when tracking started, last scrape time and status, its ad count in the corpus, and payer_ad_count — the posts from employees' profiles it paid for. Scrape health is flagged per row — advertisers with no successful scrape in the last 48 hours are marked stale, and a non-ok scrape status (blocked, schema_error, empty) carries an explicit scrape_warning; treat flagged rows' corpus data as possibly out of date. Use the returned advertiser IDs with linkedin_ads_list_competitor_ads to browse their ads. Requires no LinkedIn connection.
| Parameter | Type | Description |
|---|---|---|
reason required | string | Why this tool call is needed |
2 optional parameters
| Parameter | Type | Description |
|---|---|---|
limit | integer | Number of tracked competitors per page (default: 20, max: 100) |
cursor | string | Pagination cursor from previous response |
connections
linkedin_ads_list_connections List LinkedIn Connections
List the LinkedIn Ads connections available to you — both ones you own and ones shared with you via an organization. Use this to discover connection IDs for set_default / share / rename / revoke.
| Parameter | Type | Description |
|---|---|---|
reason required | string | Why this tool call is needed |
set-default-connection
linkedin_ads_set_default_connection Set Default LinkedIn Connection
Set the LinkedIn connection that should be used by default for subsequent LinkedIn Ads tool calls. The default is scoped to the calling actor (your user account, or the API key being used).
| Parameter | Type | Description |
|---|---|---|
connection_id required | string | UUID of the connection to mark as the actor's default LinkedIn connection. |
reason required | string | Why this tool call is needed |
share-connection
unshare-connection
rename-connection
linkedin_ads_rename_connection Rename LinkedIn Connection
Rename the display name of an owned LinkedIn connection. The OAuth grant and underlying account are unaffected — this only changes the human-readable label. You must be the owner.
| Parameter | Type | Description |
|---|---|---|
connection_id required | string | UUID of the connection to rename. You must be the owner. |
display_name required | string | New human-readable name for the connection. |
reason required | string | Why this tool call is needed |
revoke-connection
linkedin_ads_revoke_connection Revoke LinkedIn Connection
Revoke (soft-delete) an owned LinkedIn connection. Any defaults pointing to it are invalidated and shared org members lose access. The OAuth grant at LinkedIn is NOT revoked by this tool — the user must disconnect via the dashboard if they want to fully revoke at LinkedIn. You must be the owner.
| Parameter | Type | Description |
|---|---|---|
connection_id required | string | UUID of the connection to revoke. You must be the owner. |
reason required | string | Why this tool call is needed |
creatives
linkedin_ads_list_creatives List LinkedIn Creatives
List LinkedIn Creatives (ads) for an ad account. Ad copy (headline, body text, destination URL) is always resolved from linked posts/shares.
| Parameter | Type | Description |
|---|---|---|
account_id required | string | Ad account ID (numeric, without URN prefix). |
reason required | string | Why this tool call is needed |
8 optional parameters
| Parameter | Type | Description |
|---|---|---|
campaign_ids | array | Filter by campaign IDs (numeric). |
status | array | Filter by intended status. Defaults to [ACTIVE, PAUSED, DRAFT]. |
creative_id | string | Fetch a single creative by URN or numeric ID. |
creative_ids | array | Fetch specific creatives by numeric IDs (batch filter). |
limit | integer | |
cursor | string | |
refresh | boolean | |
connection_id | string | Optional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs. |
feedback
linkedin_ads_developer_feedback Submit Developer Feedback
Submit feedback about missing tools, improvements, or workflow gaps in the LinkedIn Ads MCP toolset. Not for user-facing issues like auth or API errors.
| Parameter | Type | Description |
|---|---|---|
feedback_type required | string | Feedback category: new_tool (request new capability), improvement (enhance existing tool), bug (report issue), workflow_gap (missing workflow) |
title required | string | Concise title summarizing the feedback |
description required | string | What is needed and why |
reason required | string | Why this tool call is needed |
3 optional parameters
| Parameter | Type | Description |
|---|---|---|
current_workaround | string | Current workaround, if any |
priority | string | Impact level: low (nice-to-have), medium (improves workflow), high (blocking issue) |
interface | string | Interface the feedback originated from: MCP (default) or CLI |
insights
linkedin_ads_get_insights Get LinkedIn Ads Insights
Get LinkedIn Ads analytics with a single pivot dimension. For standard analysis, prefer linkedin_ads_get_performance_report; use this only for MEMBER_* demographic pivots (unique to LinkedIn) or custom metric queries not available in the performance report. MEMBER_* pivots have a 3-event minimum threshold and 12-24 hour data delay, so totals may not match account-level numbers. Max 18 metrics per query. Results are paged (default 100 rows, max 1000 per page); when pagination.hasMore is true, call again with cursor set to pagination.nextCursor.
| Parameter | Type | Description |
|---|---|---|
account_id required | string | Ad account ID (numeric, without URN prefix). |
pivot required | string | Analytics pivot dimension. MEMBER_* pivots provide demographic breakdowns unique to LinkedIn. |
reason required | string | Why this tool call is needed |
11 optional parameters
| Parameter | Type | Description |
|---|---|---|
date_preset | string | |
start_date | string | ISO date YYYY-MM-DD. Use with end_date to override date_preset. |
end_date | string | |
time_granularity | string | |
campaign_ids | array | Filter to specific campaigns (numeric IDs). |
campaign_group_ids | array | Filter to specific campaign groups (numeric IDs). |
metrics | array | LinkedIn adAnalytics metric field names (camelCase, exact names required). Core: impressions, clicks, costInLocalCurrency, costInUsd. Conversions: externalWebsiteConversions, externalWebsitePostClickConversions, externalWebsitePostViewConversions, conversionValueInLocalCurrency. Leads: oneClickLeads, oneClickLeadFormOpens, qualifiedLeads. Video: videoViews, videoCompletions. Engagement: totalEngagements, shares, follows, reactions, comments, landingPageClicks, textUrlClicks, companyPageClicks. Card: cardImpressions, cardClicks, viralCardImpressions, viralCardClicks. Reach: approximateMemberReach (only with ACCOUNT/CAMPAIGN_GROUP/CAMPAIGN pivot, ≤92 day range). IMPORTANT: Do NOT use aliases like "conversions", "leads", "spend", or "reach" — use the exact camelCase field names listed above. Max 18 (pivotValues + dateRange count toward the 20-field API limit). Defaults to: impressions, clicks, costInLocalCurrency, costInUsd, externalWebsiteConversions, oneClickLeads, videoViews, totalEngagements. |
include_conversion_breakdown | boolean | When true (and pivot is not CONVERSION), runs a second query to break down conversions per action with names. |
limit | integer | Maximum rows per page (1-1000, default 100). count is the total across all pages; when pagination.hasMore is true, call again with cursor set to pagination.nextCursor. |
cursor | string | Opaque cursor from a previous response's pagination.nextCursor. Pass it with the same other parameters to fetch the next page; do not construct it. |
connection_id | string | Optional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs. |
partner-conversions
linkedin_ads_get_partner_conversions Get LinkedIn Partner Conversions
List partner conversions (conversion actions) configured for a LinkedIn Ads account. Use this to understand what conversion tracking is set up before analyzing performance data. Results are paged (default 50, max 200 per page); when nextCursor is present, call again with cursor set to it to fetch the next page.
| Parameter | Type | Description |
|---|---|---|
account_id required | string | Ad account ID (numeric, without URN prefix). |
reason required | string | Why this tool call is needed |
3 optional parameters
| Parameter | Type | Description |
|---|---|---|
limit | integer | Maximum conversions per page (1-200, default 50). count is the total across all pages; when nextCursor is present, call again with cursor set to it to fetch the next page. |
cursor | string | Opaque pagination cursor from a previous response's nextCursor. Pass it with the same other parameters to fetch the next page; do not construct it. |
connection_id | string | Optional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs. |
reporting
linkedin_ads_get_performance_report Get LinkedIn Ads Performance Report
Get a full-funnel performance report with up to 3 pivot dimensions and optional per-conversion-action breakdown. MEMBER_* demographic pivots are not supported here — use linkedin_ads_get_insights instead. Results are paged (default 100 rows, max 1000 per page); when nextCursor is present, call again with cursor set to it to fetch the next page.
| Parameter | Type | Description |
|---|---|---|
account_id required | string | Ad account ID (numeric, without URN prefix). |
reason required | string | Why this tool call is needed |
11 optional parameters
| Parameter | Type | Description |
|---|---|---|
pivots | array | Up to 3 pivot dimensions. OBJECTIVE_TYPE is only available in q=statistics. |
date_preset | string | |
start_date | string | |
end_date | string | |
time_granularity | string | |
campaign_ids | array | |
campaign_group_ids | array | |
include_conversion_breakdown | boolean | Run a second query for per-conversion-action breakdown. Adds one extra API call. |
limit | integer | Maximum rows per page (1-1000, default 100). count is the total across all pages; when nextCursor is present, call again with cursor set to it to fetch the next page. |
cursor | string | Opaque cursor from a previous response's nextCursor. Pass it with the same other parameters to fetch the next page; do not construct it. |
connection_id | string | Optional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs. |