# LinkedIn Ads API: What It Is, How to Access It, and When to Use an MCP Server Instead

> What the LinkedIn Ads API really is, how to get developer access, the endpoints and auth involved, and why most teams put an MCP server on top of it.

Author: Emilia Korczynska
Published: 2026-06-20
Updated: 2026-06-22
Categories: Campaign Structure & Strategy
Source: https://zenabm.com/blog/linkedin-ads-api

---

![LinkedIn Ads API: What It Is, How to Access It, and When to Use an MCP Server Instead](https://cdn.zenabm.com/media/Gemini_Generated_Image_vtcj07vtcj07vtcj-1-scaled-e1782134647584.png)

If you have ever tried to pull campaign data out of Campaign Manager programmatically, you have run into the LinkedIn Ads API.

The first thing to understand is that there is no single “LinkedIn Ads API” at all.

What people call the LinkedIn Ads [API](/docs/api) is actually the LinkedIn Marketing API, a whole family of separate APIs for campaigns, reporting, audiences, and conversions, each with its own access process, scopes, and rules.

This post is the practical answer to the three questions that come up constantly: how to get access, what you can actually build, and whether it is worth wiring up the raw API directly or whether an MCP server is the smarter move.

It covers what the API family contains, how to get approved and authenticated, where the hard parts hide, and when to skip the raw API entirely.

## All about the LinkedIn Ads API: quick summary

Here’s a quick overview of the article:

- **There is no one LinkedIn Ads API.** It is the LinkedIn Marketing API, a family that includes the Advertising API (account structure, campaigns, creatives, targeting), the Reporting API (analytics), Matched and Predictive Audiences, and the Conversions API.
- **Access is gated.** You create an app in the LinkedIn Developer Portal, apply to the Advertising API under the Products tab, start in a Development tier, then apply for Standard tier with a video demo. Audiences APIs are a separate private program with a review that can take up to 60 days.
- **Auth is 3-legged OAuth 2.0** with scopes like `rw_ads`, `r_ads_reporting`, and `rw_dmp_segments`, plus a monthly `LinkedIn-Version` header (for example `202605`).
- **The hard part is the logic.** The API is raw plumbing. Routing, token refresh, versioning, throttling, and pagination are all yours to build.
- **Most teams should layer an MCP server on top.** An MCP server repackages these endpoints as plain-English tools that an AI can call, so you ask a question instead of writing a request. [ZenABM’s MCP server](/mcp) does this and adds the CRM and pipeline join, plus eCTR and eCPC, two metrics Campaign Manager never shows.

## What the LinkedIn Ads API actually is

Start with the naming, because it trips up almost everyone.

When you search for “LinkedIn Ads API”, you are looking for the [LinkedIn Marketing API.](https://developer.linkedin.com/product-catalog/marketing/advertising-api)

![LinkedIn Marketing APIs](https://cdn.zenabm.com/media/linkedin-marketing-apis-overview.png)

It is not one endpoint, but a set of related APIs that each cover a different slice of advertising work.

Here is how the family breaks down in practice:

- **Advertising API (account structure):** create and [manage campaign groups](/faq/see-companies-that-saw-your-linkedin-ads), campaigns, ad sets, and creatives, and set budgets, schedules, bidding, and targeting. This is the part most people mean when they say the LinkedIn Ads API.

Advertising APIs by LinkedIn
- **Reporting API (analytics):** pull performance numbers like impressions, clicks, spend, and conversions at the account, campaign, or creative level, plus demographic breakdowns. This runs through the `adAnalytics` endpoint.
- **Matched Audiences (DMP Segments):** upload [contact or company lists](/blog/linkedin-matched-audiences), stream users and companies into segments, and set up website retargeting. This is a separate, private program.
- **Predictive Audiences:** seed an audience with your own [data and let LinkedIn’s AI model](/blog/account-scoring-from-linkedin-ad-data) find members most likely to convert. Also part of the private Audiences program.
- **Conversions API:** send conversion events back to the LinkedIn server-side so attribution does not rely only on the browser pixel.
- **Community Management and Lead Sync APIs:** manage organic Page content and sync lead gen form submissions, which often sit alongside an ads integration.

The reason this matters is that access, scopes, and even rate limits differ from one member of the family to the next.

Getting approved for the Advertising API does not automatically give you the Audiences APIs, since you apply for those separately.

Before writing a line of code, you need to know which APIs your use case actually touches.

## How to get access to the LinkedIn Ads API

Access to the LinkedIn Ads API is not open.

You apply, and LinkedIn reviews you.

Here is the path, start to finish.

- **Step 1: Create a LinkedIn Page and a developer app.** You need an associated LinkedIn Page first, then you create a developer application at the LinkedIn Developer Portal. The app is the identity that makes API calls on your behalf.

![LinkedIn Developers My apps page with arrow pointing to Create app button for API access](https://cdn.zenabm.com/media/Create-a-private-LinkedIn-App-in-order-to-use-the-API-.png)

- **Step 2: Apply to the Advertising API.** Inside your app, go to the Products tab and request the Advertising API. You complete an access form describing your use case. LinkedIn reviews it against its restricted-use-case rules, so a vague or non-compliant description gets rejected. This review is where the wait comes in, and it can take several days or longer.
- **Step 3: Build in the Development tier.** Once approved, you start in a Development tier. You map your nine-digit ad account IDs to your app, generate a test token, and build against real endpoints with limited scope. This is your sandbox.
- **Step 4: Apply for Standard tier.** When your integration works, you submit a tier upgrade request. For the Advertising API, that request includes a video showing how your platform creates, edits, or [optimizes LinkedIn campaigns](/use-cases/linkedin-campaign-management-optimization). Standard tier is what unlocks production-grade access.
- **Step 5 (if you need audiences): apply separately.** The Matched Audiences and Predictive Audiences APIs are a private program. You fill in a separate interest form, and LinkedIn contacts you only if you meet its criteria, which it says can take up to 60 days. You also need Advertising API access first as a prerequisite.

None of this is hard exactly, but it is gated and slow.

If the goal is just to read your own campaign data into an AI tool this week, that approval timeline alone is a strong argument for using an MCP server that already holds the access.

For a sense of what reading that data looks like once it flows, the post on how to [automate LinkedIn ad reporting](/blog/automate-linkedin-ad-reporting) shows the end state.

## Authentication, scopes, and API versioning

Once you have access, every call to the LinkedIn Ads API has to be authenticated, versioned, and scoped correctly.

This is where a lot of first integrations break.

### 3-Legged OAuth 2.0

The API uses 3-legged OAuth 2.0.

A member authorizes your app, you receive an access token tied to that member’s permissions, and you use that token on every request. Access tokens expire, so you also handle refresh tokens and re-authorization.

If you forget to refresh, your integration silently stops working until someone notices the empty report.

### Scopes (Permissions)

Each API needs specific scopes.

A few you will meet often:

- `rw_ads` to read and write campaigns, ad sets, and creatives.
- `r_ads_reporting` to read analytics from the reporting endpoint.
- `rw_dmp_segments` to manage matched and predictive audiences.

If your token is missing a scope, the call fails.

Confirm which permissions your app holds under the Auth tab in the Developer Portal before assuming the issue is elsewhere.

### Monthly API Versioning

![LinkedIn Marketing API versioning docs showing the LinkedIn-Version header format for LinkedIn Ads API calls](https://cdn.zenabm.com/media/LinkedIn-Marketing-API-versioning-documentation-by-LinkedIn.png)

The LinkedIn Marketing API is versioned by month.

You pass a `LinkedIn-Version` header in the format `YYYYMM`, for example, `202605` for the May 2026 version. The docs label these versions in an `li-lms-2026-05` style.

LinkedIn ships new versions monthly and deprecates old ones, so a version hard-coded last year can be sunset, and your calls start returning errors.

You have to track the version calendar and migrate, or your integration ages out.

Here is what a basic authenticated campaign read looks like with all three pieces in place:

> curl ‘https://api.linkedin.com/rest/adAccounts/123456789/adCampaigns?q=search’
> -H ‘Authorization: Bearer {ACCESS\_TOKEN}’
> -H ‘LinkedIn-Version: 202605’
> -H ‘X-Restli-Protocol-Version: 2.0.0’

That is three headers before asking a single question about performance.

Multiply that across dozens of endpoints, refresh cycles, and monthly version bumps, and you start to see why the raw API is a project rather than a quick win.

## What you can do with the LinkedIn Ads API

Once authenticated, the LinkedIn Ads API is genuinely powerful.

Here is the practical map of what each part lets you do.

### Create and Manage Campaigns

The account structure endpoints let you build and edit the whole campaign tree.

You create campaign groups, then campaigns, then creatives, and you set the budget, schedule, bidding model, and status on each.

The core resource is the ad campaigns endpoint under an ad account:

> POST /rest/adAccounts/{adAccountId}/adCampaigns
> GET /rest/adAccounts/{adAccountId}/adCampaigns/{campaignId}
> POST /rest/adAccounts/{adAccountId}/adCampaigns/{campaignId} (partial update)

A partial update is how you change one field, like pausing a campaign or raising a daily budget, without resending the whole object.

This is the layer that powers programmatic optimization, where a script reads performance and then writes a budget or status change back.

### Manage Targeting

Targeting is expressed as a boolean structure of include and exclude facets, like locations, job titles, seniorities, industries, and skills.

You build a conjunction of disjunctions, which means “match all of these groups, where each group is any-of.”

It is precise and verbose, and getting targeting JSON right by hand is one of the fiddlier parts of the API.

### Build Matched and Predictive Audiences

With the DMP [Segment endpoints you create audience](/blog/linkedin-ads-third-party-audiences) segments and either upload a CSV of companies or contacts, or stream users and companies in dynamically.

The base resource is `/rest/dmpSegments`.

Predictive Audiences go a step further: you give LinkedIn a seed (a contact list, a company list, a conversion, or a lead form) and its AI builds a high-intent lookalike from millions of engagement signals.

There are real constraints to keep in mind, like a minimum audience size of 300 and a mandatory geo filter on predictive audiences.

### Pull Analytics and Reporting

The reporting side runs through a single endpoint, `/rest/adAnalytics`, with three finder methods.

You use `analytics` when grouping by one element (a pivot), `statistics` when grouping by up to three, and `attributedRevenueMetrics` for revenue [attribution](/blog/abm-performance-audit-claude-code).

You can request up to 20 metrics per call. A simple spend-and-clicks [pull by campaign](/blog/linkedin-ads-reporting-api) looks like this:

> GET /rest/adAnalytics?q=analytics&pivot=CAMPAIGN
> &dateRange=(start:(year:2026,month:5,day:1),end:(year:2026,month:5,day:31))
> &timeGranularity=ALL
> &fields=impressions,clicks,costInUsd,externalWebsiteConversions

### Manage Conversions

The Conversions API lets you send conversion events to LinkedIn server-side, which makes attribution sturdier than a browser pixel alone.

This is the piece that ties an ad click to a downstream action, and it is the foundation of any honest revenue story.

If [connecting spend to outcomes](/blog/connect-linkedin-ad-spend-to-closed-deals) is the goal, this and the reporting API are where the work happens.

Alex Fine (Co-founder at understory), who builds these integrations for clients, put the appeal of working at this layer well in his [post](https://www.linkedin.com/posts/theclayguy_what-exactly-is-an-mcp-and-how-does-it-actually-ugcPost-7389171245218537472-frC_).

> *“MCPs (Model Context Protocol servers) are basically secure bridges between Claude (or ChatGPT, but I prefer Claude) and your business tools. Think of them like translators that let you use plain English to pull information from any software with an API. If the tool you’re using has a solid API, you can probably build an MCP for it. And if you can build an MCP for it, you can talk to it like you’d talk to a person.”*

[Embedded post](https://www.linkedin.com/embed/feed/update/urn:li:ugcPost:7389171245218537472?collapsed=1)

The point he makes is the one worth keeping: the API is the foundation, but the experience most teams actually want is conversation, and that is a layer above the API.

## The hard part: what the LinkedIn Ads API does not do for you

The documentation does not lead with this part.

The LinkedIn Ads API gives you endpoints, not answers.

Everything between “I have a question” and “here is the data” is yours to build.

- **You build the routing logic.** When you want “top ad [sets by cost per landing page click](/blog/linkedin-target-cpc-bidding) last week,” no single endpoint returns that. You have to know to hit the campaigns endpoint for the ad set list, the `adAnalytics` endpoint for the metrics, stitch them together, compute the derived metric, and sort. The API will not figure out which endpoint a question maps to. You write that decision tree yourself, for every kind of question.
- **You handle auth refresh.** Tokens expire. You build the refresh flow, store tokens securely, and recover gracefully when a member’s authorization lapses. Get this wrong, and the integration dies quietly.
- **You handle versioning.** Because versions ship monthly and old ones sunset, you track the version calendar and migrate before your version is deprecated. This is ongoing maintenance, not a one-time setup.
- **You handle throttling and pagination.** The API enforces rate limits and returns a `429` when you exceed them, so you implement exponential backoff and retries. The reporting endpoint adds its own ceiling, around 45 million metric values over a five-minute window and a cap on result size, so large pulls have to be chunked. Results paginate, so you loop until you have everything.

The same lesson that applies to [LinkedIn campaign structure](/blog/linkedin-ads-campaign-structure) applies here: the structure is logical, but you have to model it yourself.

The API hands you primitives.

Turning primitives into a working [LinkedIn Ads reporting API](/blog/linkedin-ads-reporting-api) integration that a non-engineer can actually use is the real work, and it never quite ends because the platform keeps moving underneath you.

This is exactly why the smarter move for most teams is not to build directly on the API and instead go for a tool like [ZenABM](/ai), or, even better, its MCP server.

![Claude Code output comparing last 7 and previous 7 days of LinkedIn ads spend, CTR and CPM via ZenABM MCP](https://cdn.zenabm.com/media/Using-ZenABM-MCP-server-in-Claude-Code-to-get-a-weekly-LinkedIn-ads-review-and-comparison-of-the-last-7-days-and-the-previous-7-days.png)

## When to use an MCP server instead of the LinkedIn Ads API

An API is the raw plumbing. An MCP server is the layer that makes that plumbing usable by an AI.

The two are not competitors: an MCP server sits on top of an API.

MCP stands for Model Context Protocol, an open standard that lets an AI tool like Claude or [ChatGPT](/blog/linkedin-ads-mcp-server) call external tools and pull live data.

An MCP server is the bridge.

It exposes a set of tools with plain-language descriptions the model can read, and the AI decides which tool to call based on your question.

An API is a vending machine where you need the exact button codes. An MCP server is the assistant standing next to it who reads your request in plain English and hands you what you asked for.

The routing logic described above, the part you would otherwise build yourself, is what an MCP server already encodes.

Instead of writing the decision tree that maps “top ad sets by eCPC” to three endpoints and a join, you ask the question, and the AI picks the tools.

Ali Yildirim, founder at Understory, described doing exactly this for his own ad account.

> *“We just built a custom LinkedIn Ads MCP that lets us analyze our ad account in plain english and it’s changed how I report on our internal campaigns. Instead of exporting data and manually building dashboards, I can ask Claude a question and get the answer instantly. The tool connects directly to LinkedIn’s API and pulls campaign data in real time. I can see exactly which company sizes, industries, and seniorities are seeing our ads, then spot optimization opportunities on the spot.”*

[Embedded post](https://www.linkedin.com/embed/feed/update/urn:li:ugcPost:7384284967507337216?collapsed=1)

Notice the phrase “connects directly to LinkedIn’s API.” The MCP server did not replace the API.

It wrapped it.

That is the whole pattern.

This is what ZenABM’s MCP server does, with one important addition.

It reads the LinkedIn Marketing APIs, then joins company-level LinkedIn ad engagement to your CRM. That join is what makes it more than a thin wrapper: the AI can reason about accounts, creatives, [ABM funnel stages](/blog/abm-funnel), intent, and closed-won revenue, not just raw ad metrics.

Connect it at `https://zenabm.com/mcp`, where it exposes 60+ tools, and read questions are safe, while write actions ask for explicit confirmation before anything changes.

![ZenABM dashboard showing company-level ads engagement data per campaign by pulling first party intent signals from LinkedIn API](https://cdn.zenabm.com/media/image.png)

![ZenABM's current vs total engagement score](https://cdn.zenabm.com/media/ZenABMs-current-vs-total-engagement-score-scaled.png)

![ABM stage tracking and customization in ZenABM](https://cdn.zenabm.com/media/ABM-Stages.png)

![ZenABM campaign effectiveness dashboard with ROAS, ad spend and influenced pipeline for ABM reporting](https://cdn.zenabm.com/media/ZenABM-ABM-Campaign-Effectiveness-Metrics-LinkedIn.png)

![Claude confirms the ZenABM MCP server is connected, listing 50+ tools for campaigns, accounts and metrics](https://cdn.zenabm.com/media/zenabm-mcp-server-setup-claude-2.png)

![AI chat using the ZenABM MCP server to pull LinkedIn ad performance data into a table for new ad copy](https://cdn.zenabm.com/assets/Using-ZenABM-MCP-server-to-make-ad-copy-informed-by-data.gif)

![Claude Code terminal using the ZenABM MCP server to pull an executive summary of ABM pipeline data](https://cdn.zenabm.com/assets/Using-ZenABM-MCP-server-in-Claude-Code-to-get-an-executive-summary-of-your-ABM-program.gif)

It also surfaces two metrics [Campaign Manager](/blog/track-companies-engaging-with-linkedin-ads) never shows:

- **eCTR,** the effective click-through rate to your landing page, meaning the share of impressions that turn into an actual landing-page click rather than a like or a comment.
- **eCPC,** the effective cost per landing-page click, meaning what you really paid for each visitor who reached the page.

To compute those from the raw API yourself, you would pull impressions and the right click type, separate landing-page clicks from social engagement, and do the math per ad, per week.

ZenABM’s MCP server has that baked in.

So when should you use the raw API versus an MCP server?

Build on the API directly if you are a platform shipping a product to other advertisers, or you need to write automation that does not exist anywhere else.

Use an MCP server if the goal is to analyze, report on, and ask questions about your own [LinkedIn ad performance](/blog/linkedin-ad-performance-tracking-for-enterprise-sales), which is what most marketing and GTM teams actually want

## The Takeaway

The LinkedIn Ads API is not one thing. It is a family of gated, versioned, scope-specific endpoints that each require their own approval path, their own auth logic, and their own maintenance as LinkedIn ships monthly version updates.

The Advertising API handles account structure.

The Reporting API handles analytics.

Matched and Predictive Audiences are a separate private program.

The Conversions API handles server-side attribution.

Getting useful answers out of any of them means building the routing, the refresh cycle, the pagination loops, and the derived metrics yourself.

For teams building a product on top of LinkedIn’s ad infrastructure, that build is the job and the API is the right starting point.

For marketing and GTM teams whose actual goal is to understand what their LinkedIn spend is doing, the raw API is several months of engineering before you get to the first insight.

An MCP server like ZenABM’s skips that path: it holds the API access, handles the plumbing, and surfaces the data as plain-English questions Claude or another AI can answer directly.

It also adds what the raw API cannot give you on its own, namely, the CRM join, eCTR, eCPC, and company-level engagement scored against your ABM funnel.

If the goal is to query your own LinkedIn Ads data without building and maintaining the infrastructure underneath it, [ZenABM offers a 37-day free trial,](https://app.zenabm.com/signup) and the MCP server connects in a few minutes.

[You can also book a demo with us to know more!](/book-a-demo)

## FAQs

### Is there one LinkedIn Ads API?

No. What people call the LinkedIn Ads API is the LinkedIn Marketing API, a family of separate APIs. The main ones are the Advertising API for account structure and campaigns, the Reporting API for analytics through the `adAnalytics` endpoint, Matched and Predictive Audiences for segments, and the Conversions API for server-side events. Each can require its own access approval and scopes.

### How do I get access to the LinkedIn Ads API?

Create a developer app in the LinkedIn Developer Portal, then apply to the Advertising API under the Products tab and complete the access form. You build in a Development tier first, then apply for Standard tier with a video demo of your integration. The Matched and Predictive Audiences APIs are a separate private program you apply to on their own, and that review can take up to 60 days.

### What authentication does the LinkedIn Ads API use?

It uses 3-legged OAuth 2.0. A member authorizes your app, you get an access token scoped to their permissions, and you refresh it as it expires. You also pass a monthly `LinkedIn-Version` header in `YYYYMM` format, and you need the right scopes, like `rw_ads` for campaign management or `r_ads_reporting` for analytics.

### What is the difference between the LinkedIn Ads API and an MCP server?

The API is a set of endpoints you call with exact instructions. An MCP server sits on top of that API and exposes its capabilities as plain-English tools an AI can read and call, so you ask a question instead of writing a request. They are complementary, not competing. An MCP server like ZenABM’s connects to the LinkedIn Marketing API behind the scenes and lets you query your data in natural language.

### Should I build on the LinkedIn Ads API or use an MCP server?

Build on the API directly if you are shipping a product to other advertisers or you need custom write automation. Use an MCP server if you want to analyze, report on, and ask questions about your own [LinkedIn ad performance](/linkedin-ad-campaign-insights). For most marketing teams the MCP route is faster, skips the approval and maintenance burden, and adds context the raw API does not, like the CRM join and eCTR and eCPC. You can start a [free ZenABM trial](https://app.zenabm.com/signup) and connect the MCP server in a few minutes.

## Images

- https://cdn.zenabm.com/media/API-products-of-LinkedIn.png
