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_report for standard analysis (campaign, campaign group, creative pivots, up to 3 dimensions). Use linkedin_ads_get_insights only 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_conversions first 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

Read-onlyIdempotentOpen-world

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.

ParameterTypeDescription
account_id requiredstringAd account ID (numeric, without URN prefix).
reason requiredstringWhy this tool call is needed
4 optional parameters
ParameterTypeDescription
date_presetstring
start_datestring
end_datestring
connection_idstringOptional 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.
View full documentation →

activities

linkedin_ads_get_activities Get LinkedIn Ads Change History

Read-onlyIdempotentOpen-world

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.

ParameterTypeDescription
account_id requiredstringLinkedIn ad account ID (numeric, or the sponsoredAccount URN).
reason requiredstringWhy this tool call is needed
8 optional parameters
ParameterTypeDescription
start_datestringStart of the window, YYYY-MM-DD (UTC). Defaults to 7 days ago.
end_datestringEnd of the window, YYYY-MM-DD (UTC), inclusive. Defaults to today.
entity_typestringOnly changes to this kind of entity.
entity_idsarrayOnly changes to these campaign group / campaign / creative IDs (numeric or URN).
limitintegerChanges per page (1-200, default 50).
cursorstringnextCursor from the previous response. Pass it with otherwise identical parameters for the next page.
refreshbooleanRe-scan the account now before answering. Normally not needed: the account is re-scanned when the last scan is over 15 minutes old.
connection_idstringOptional 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.
View full documentation →

ad-accounts

linkedin_ads_list_ad_accounts List LinkedIn Ad Accounts

Read-onlyIdempotentOpen-world

List LinkedIn Sponsored Ad Accounts accessible to the authenticated user.

ParameterTypeDescription
reason requiredstringWhy this tool call is needed
7 optional parameters
ParameterTypeDescription
statusarrayFilter by account status. Defaults to [ACTIVE].
typestringFilter by account type.
include_test_accountsbooleanInclude test accounts. Defaults to false.
limitinteger
cursorstringOpaque pagination cursor.
refreshboolean
connection_idstringOptional 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.
View full documentation →

search-ad-library

linkedin_ads_search_ad_library Search LinkedIn Ad Library

Read-onlyIdempotentOpen-world

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 \

ParameterTypeDescription
countries requiredarrayREQUIRED. 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 requiredstringWhy this tool call is needed
11 optional parameters
ParameterTypeDescription
search_termsstringKeywords to search for in ad content. Spaces act as AND. Use the language the ad is written in.
search_typestringSearch mode: KEYWORD_UNORDERED (default, any order) or KEYWORD_EXACT_PHRASE
advertiser_namestringOne 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_idsarrayUp 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_statusstringFilter by delivery status. Default: ACTIVE
ad_delivery_date_minstringMinimum delivery date (YYYY-MM-DD)
ad_delivery_date_maxstringMaximum delivery date (YYYY-MM-DD). Ads whose start date is unknown (not yet detail-enriched) are excluded by this bound.
display_formatstringFilter 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.
languagesarrayFilter by language name as shown in LinkedIn ad transparency data, e.g. ["English"]
limitintegerResults per page (default: 25, max: 50)
cursorstringPagination cursor from previous response
View full documentation →

auth

linkedin_ads_check_auth_status Check LinkedIn Ads Authentication Status

Read-onlyIdempotent

Troubleshoot authentication issues and get user profile info. Only use when another tool fails with a permission or authentication error — do NOT call proactively.

ParameterTypeDescription
reason requiredstringWhy this tool call is needed
1 optional parameter
ParameterTypeDescription
connection_idstringOptional 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.
View full documentation →

linkedin_ads_ping Ping LinkedIn Ads MCP Server

Read-onlyIdempotent

Health check for the LinkedIn Ads MCP server. Does not call the LinkedIn API.

ParameterTypeDescription
reason requiredstringWhy this tool call is needed
1 optional parameter
ParameterTypeDescription
messagestringOptional message to echo back
View full documentation →

budget-pricing

linkedin_ads_get_budget_pricing Get LinkedIn Budget & Pricing

Read-onlyOpen-world

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.

ParameterTypeDescription
account_id requiredstringAd account ID (numeric, without URN prefix).
campaign_type requiredstringCampaign type. DYNAMIC is not supported by this endpoint.
bid_type requiredstringBid type. CPV is only valid for SPONSORED_UPDATES video campaigns.
match_type requiredstring
currency requiredstringISO-4217 currency code (e.g. USD, GBP).
location_urns requiredarrayTarget location URNs (e.g. urn:li:geo:103644278 for USA).
reason requiredstringWhy this tool call is needed
7 optional parameters
ParameterTypeDescription
seniority_urnsarrayTarget seniority URNs (e.g. urn:li:seniority:4 for Senior).
job_function_urnsarrayTarget job function URNs.
industry_urnsarrayTarget industry URNs.
company_size_urnsarrayTarget company size range URNs (e.g. urn:li:staffCountRange:(51,200)).
objective_typestringAffects suggested bid.
daily_budget_amountnumberCurrent or target daily budget (influences suggested bid calculation).
connection_idstringOptional 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.
View full documentation →

campaign-groups

linkedin_ads_list_campaign_groups List LinkedIn Campaign Groups

Read-onlyIdempotentOpen-world

List LinkedIn Campaign Groups for an ad account. Campaign groups are the top-level organizational unit containing campaigns.

ParameterTypeDescription
account_id requiredstringAd account ID (numeric, without URN prefix).
reason requiredstringWhy this tool call is needed
7 optional parameters
ParameterTypeDescription
statusarrayFilter by status. Defaults to [ACTIVE, PAUSED].
campaign_group_idstringFetch a single campaign group by numeric ID.
campaign_group_idsarrayFetch specific campaign groups by numeric IDs (batch GET).
limitinteger
cursorstring
refreshboolean
connection_idstringOptional 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.
View full documentation →

campaigns

linkedin_ads_list_campaigns List LinkedIn Campaigns

Read-onlyIdempotentOpen-world

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).

ParameterTypeDescription
account_id requiredstringAd account ID (numeric, without URN prefix).
reason requiredstringWhy this tool call is needed
11 optional parameters
ParameterTypeDescription
statusarrayFilter by status. Defaults to [ACTIVE, PAUSED].
campaign_group_idstringFilter by campaign group (numeric ID).
typearrayFilter by campaign type.
campaign_idstringFetch a single campaign by numeric ID.
campaign_idsarrayFetch specific campaigns by numeric IDs (batch filter).
limitinteger
cursorstring
refreshboolean
include_targetingbooleanReturn 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_forecastbooleanAdd 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_idstringOptional 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.
View full documentation →

chart

linkedin_ads_render_chart Render LinkedIn Ads ChartMCP App

Read-onlyIdempotent

Interactive chart renderer for LinkedIn Ads performance visualization

bar scatter timeseries funnel waterfall choropleth
ParameterTypeDescription
reason requiredstringBrief explanation of why you are rendering this chart
chart requiredobjectChart configuration. Supported types: bar, scatter, timeseries, funnel, waterfall, choropleth.
View full documentation →

competitor-ads

linkedin_ads_list_competitor_ads List Competitor Ads

Read-onlyIdempotent

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.

ParameterTypeDescription
advertiser_id requiredstringThe advertiser ID from linkedin_ads_list_tracked_competitors or linkedin_ads_track_competitor
reason requiredstringWhy this tool call is needed
6 optional parameters
ParameterTypeDescription
active_onlybooleanOnly ads still running (no stopped_running_at)
display_formatstringFilter 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.
sincestringOnly ads seen on or after this ISO date/timestamp (e.g. 2026-07-01)
searchstringCase-insensitive search over ad copy (primary text, headline, description)
limitintegerNumber of ads per page (default: 20, max: 100)
cursorstringPagination cursor from previous response
View full documentation →

competitor-ad

linkedin_ads_get_competitor_ad Get Competitor Ad

Read-onlyIdempotent

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.

ParameterTypeDescription
ad_id requiredstringThe library ad ID from linkedin_ads_list_competitor_ads
reason requiredstringWhy this tool call is needed
4 optional parameters
ParameterTypeDescription
include_framesbooleanInclude extracted video frames as image content blocks (default: false)
strideintegerReturn every Nth extracted frame. Defaults to a context-safe stride capping frames at ~40 images.
startnumberOnly frames at or after this offset into the video, in seconds
endnumberOnly frames at or before this offset into the video, in seconds
View full documentation →

track-competitor

linkedin_ads_track_competitor Track Competitor

IdempotentOpen-world

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.

ParameterTypeDescription
reason requiredstringWhy this tool call is needed
4 optional parameters
ParameterTypeDescription
namestringThe 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_urlstringLinkedIn 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_idstringRECOMMENDED 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.
countriesarrayISO-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.
View full documentation →

untrack-competitor

linkedin_ads_untrack_competitor Untrack Competitor

DestructiveIdempotent

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.

ParameterTypeDescription
advertiser_id requiredstringThe advertiser ID from linkedin_ads_list_tracked_competitors
reason requiredstringWhy this tool call is needed
View full documentation →

tracked-competitors

linkedin_ads_list_tracked_competitors List Tracked Competitors

Read-onlyIdempotent

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.

ParameterTypeDescription
reason requiredstringWhy this tool call is needed
2 optional parameters
ParameterTypeDescription
limitintegerNumber of tracked competitors per page (default: 20, max: 100)
cursorstringPagination cursor from previous response
View full documentation →

connections

linkedin_ads_list_connections List LinkedIn Connections

Read-onlyIdempotent

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.

ParameterTypeDescription
reason requiredstringWhy this tool call is needed
View full documentation →

set-default-connection

linkedin_ads_set_default_connection Set Default LinkedIn Connection

Idempotent

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).

ParameterTypeDescription
connection_id requiredstringUUID of the connection to mark as the actor's default LinkedIn connection.
reason requiredstringWhy this tool call is needed
View full documentation →

share-connection

linkedin_ads_share_connection Share LinkedIn Connection With Organization

Idempotent

Share an owned LinkedIn connection with all members of your organization, so teammates can use it without having to reconnect LinkedIn themselves. You must be the owner of the connection.

ParameterTypeDescription
connection_id requiredstringUUID of the connection to share with your organization. You must be the owner.
reason requiredstringWhy this tool call is needed
View full documentation →

unshare-connection

linkedin_ads_unshare_connection Unshare LinkedIn Connection From Organization

DestructiveIdempotent

Stop sharing an owned LinkedIn connection with your organization. Teammates lose access immediately. You must be the owner.

ParameterTypeDescription
connection_id requiredstringUUID of the connection to stop sharing with your organization. You must be the owner.
reason requiredstringWhy this tool call is needed
View full documentation →

rename-connection

linkedin_ads_rename_connection Rename LinkedIn Connection

Idempotent

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.

ParameterTypeDescription
connection_id requiredstringUUID of the connection to rename. You must be the owner.
display_name requiredstringNew human-readable name for the connection.
reason requiredstringWhy this tool call is needed
View full documentation →

revoke-connection

linkedin_ads_revoke_connection Revoke LinkedIn Connection

DestructiveIdempotent

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.

ParameterTypeDescription
connection_id requiredstringUUID of the connection to revoke. You must be the owner.
reason requiredstringWhy this tool call is needed
View full documentation →

creatives

linkedin_ads_list_creatives List LinkedIn Creatives

Read-onlyIdempotentOpen-world

List LinkedIn Creatives (ads) for an ad account. Ad copy (headline, body text, destination URL) is always resolved from linked posts/shares.

ParameterTypeDescription
account_id requiredstringAd account ID (numeric, without URN prefix).
reason requiredstringWhy this tool call is needed
8 optional parameters
ParameterTypeDescription
campaign_idsarrayFilter by campaign IDs (numeric).
statusarrayFilter by intended status. Defaults to [ACTIVE, PAUSED, DRAFT].
creative_idstringFetch a single creative by URN or numeric ID.
creative_idsarrayFetch specific creatives by numeric IDs (batch filter).
limitinteger
cursorstring
refreshboolean
connection_idstringOptional 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.
View full documentation →

feedback

linkedin_ads_developer_feedback Submit Developer Feedback

IdempotentOpen-world

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.

ParameterTypeDescription
feedback_type requiredstringFeedback category: new_tool (request new capability), improvement (enhance existing tool), bug (report issue), workflow_gap (missing workflow)
title requiredstringConcise title summarizing the feedback
description requiredstringWhat is needed and why
reason requiredstringWhy this tool call is needed
3 optional parameters
ParameterTypeDescription
current_workaroundstringCurrent workaround, if any
prioritystringImpact level: low (nice-to-have), medium (improves workflow), high (blocking issue)
interfacestringInterface the feedback originated from: MCP (default) or CLI
View full documentation →

insights

linkedin_ads_get_insights Get LinkedIn Ads Insights

Read-onlyIdempotentOpen-world

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.

ParameterTypeDescription
account_id requiredstringAd account ID (numeric, without URN prefix).
pivot requiredstringAnalytics pivot dimension. MEMBER_* pivots provide demographic breakdowns unique to LinkedIn.
reason requiredstringWhy this tool call is needed
11 optional parameters
ParameterTypeDescription
date_presetstring
start_datestringISO date YYYY-MM-DD. Use with end_date to override date_preset.
end_datestring
time_granularitystring
campaign_idsarrayFilter to specific campaigns (numeric IDs).
campaign_group_idsarrayFilter to specific campaign groups (numeric IDs).
metricsarrayLinkedIn 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_breakdownbooleanWhen true (and pivot is not CONVERSION), runs a second query to break down conversions per action with names.
limitintegerMaximum 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.
cursorstringOpaque 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_idstringOptional 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.
View full documentation →

partner-conversions

linkedin_ads_get_partner_conversions Get LinkedIn Partner Conversions

Read-onlyIdempotentOpen-world

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.

ParameterTypeDescription
account_id requiredstringAd account ID (numeric, without URN prefix).
reason requiredstringWhy this tool call is needed
3 optional parameters
ParameterTypeDescription
limitintegerMaximum 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.
cursorstringOpaque 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_idstringOptional 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.
View full documentation →

reporting

linkedin_ads_get_performance_report Get LinkedIn Ads Performance Report

Read-onlyIdempotentOpen-world

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.

ParameterTypeDescription
account_id requiredstringAd account ID (numeric, without URN prefix).
reason requiredstringWhy this tool call is needed
11 optional parameters
ParameterTypeDescription
pivotsarrayUp to 3 pivot dimensions. OBJECTIVE_TYPE is only available in q=statistics.
date_presetstring
start_datestring
end_datestring
time_granularitystring
campaign_idsarray
campaign_group_idsarray
include_conversion_breakdownbooleanRun a second query for per-conversion-action breakdown. Adds one extra API call.
limitintegerMaximum 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.
cursorstringOpaque cursor from a previous response's nextCursor. Pass it with the same other parameters to fetch the next page; do not construct it.
connection_idstringOptional 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.
View full documentation →