LinkedIn Ads
Create, boost, target and measure LinkedIn campaigns on a linkedinads account with the ads endpoints.
Create LinkedIn ads with POST /v1/ads/create, boost a Company Page post with POST /v1/ads/boost, and read results with the Insights endpoints, all on a linkedinads account. The pages in this section cover one job each; every endpoint is explained once, with its response.
Quick reference
| Property | Value |
|---|---|
| Hierarchy | Campaign Group > Campaign > Creative (created in one call, or reuse existing levels) |
| Goals (`goal`) | 6 on /v1/ads/create: engagement, traffic, awareness, video_views, lead_generation, job_applicants. conversions is boost-only (see Boost a post) |
| Creative formats | Single image, video, carousel, document, event, text ad, spotlight, follower, jobs, conversation, thought-leader, article (see Creative formats) |
| Bidding | CPM (default), CPC, CPV; manual `unitCost` or LinkedIn automated |
| Budget minimums | $10/day per format; $100 lifetime for inactive campaigns |
| Targeting | Countries and regions, plus LinkedIn's B2B facets: industries, companySizes, seniorities, jobFunctions (see Targeting) |
| Audiences | Contact list, company list, engagement retargeting, website retargeting |
| Insights | Spend, CPC and CPM plus firmographic breakdowns: job title, seniority, industry, company size (see Analytics) |
| Pre-flight planning | Suggested bid and budget bounds, and impression, click and spend forecasts |
| Lead Gen Forms | Yes: create, list and archive forms, and pull responses (90-day retention) |
| Conversions API | Yes: rule CRUD, events and attribution read-back |
| URL tracking tags | Yes: campaign-level Dynamic UTM (read and update) |
| Image formats | JPEG, PNG, GIF, max 5 MB |
| Video formats | MP4 H.264/AAC, 3 seconds to 30 minutes, max 500 MB |
Before you start
LinkedIn Ads requires a connected LinkedIn account whose member can act on a sponsored ad account. You need:
- A LinkedIn ad account: the numeric sponsored account id, from List ad accounts.
- A Company Page. Ads built from scratch publish as Direct Sponsored Content ("dark posts") authored by the Page. The authenticated member must be an Administrator or Direct Sponsored Content Poster of that Page, and the Page must be associated with the ad account, or LinkedIn returns
403. - The ads scopes on the connection (below). An account connected before a scope existed must reconnect to pick it up.
LinkedIn reviews every ad, so a new campaign starts in DRAFT and review before it delivers.
Connect
Call GET /v1/connect/linkedin/ads with profileId (Connect ads). The linkedinads account reuses the token of the profile's LinkedIn account when one is connected, so no second OAuth round trip happens; without one, the response carries an authUrl to send the user to, as in the connecting accounts guide.
curl "https://zernio.com/api/v1/connect/linkedin/ads?profileId=66a1f0c2a4b9d3e8f1a2b3c4" \
-H "Authorization: Bearer $ZERNIO_API_KEY"Response (200):
{
"alreadyConnected": true,
"accountId": "66b2e19d8c3f5a7e9d0b1c2d",
"platform": "linkedinads"
}accountId is the value every ads endpoint takes. The standard LinkedIn connection already requests the ads scopes:
| Scope | What it enables |
|---|---|
r_ads | Read ad accounts |
rw_ads | Create and manage campaigns and creatives |
r_ads_reporting | Ads reporting and analytics |
rw_conversions | Conversions API (server-side conversion events) |
r_marketing_leadgen_automation | Read Lead Gen Form responses |
The two scopes that most often need a reconnect are rw_conversions (a 403 with linkedin_reconnect_required when missing) and r_marketing_leadgen_automation (lead-response reads return a 400 with code ads_connection_required asking for the reconnect). Scopes explains how a reconnect picks them up.
The campaign hierarchy
Every LinkedIn ad lives in a three-level tree: Campaign Group, Campaign, Creative. The Campaign owns bidding, targeting, schedule and budget; the Creative is the ad content. POST /v1/ads/create provisions all three in one call. Zernio's adSetId is the LinkedIn Campaign id (on Meta the same field is an ad set, on Google and TikTok an ad group); pass it, or existingCampaignId for a Campaign Group, to slot into levels you already have (Create ads).
In this section
Boost a post
Promote an existing Company Page post
Create ads
Single image and video ads, bidding, reuse and duplication
Creative formats
Carousel, document, event, text, spotlight, follower, jobs, conversation, thought-leader
Matched Audiences
Contact lists, company lists, engagement and website retargeting
Bid pricing and forecasts
Suggested bids, budget bounds and supply forecasts before you spend
Analytics
Firmographic breakdowns of who saw your ads
Lead Gen Forms
Create forms and pull lead responses
Conversions API
Conversion rules, server-side events, attribution read-back
URL tracking tags
Campaign-level Dynamic UTM parameters
Ad Library
Search the public ad archive by keyword or advertiser
Media and limits
Media requirements, what you cannot do, and common LinkedIn errors
Common errors
Connecting is where this page's own errors live. Media and limits collects the ones LinkedIn returns once you are creating ads.
| Error | Cause | Fix |
|---|---|---|
400 with code reconnect_required | The profile holds a LinkedIn account whose stored token cannot reach ad accounts | Reconnect the LinkedIn account, then call the ads connect again. |
402 | The billing gate is closed for the team | Add a payment method and retry. |
403 with code ads_addon_required | The team is on a legacy plan that does not include ads access | Move the team to usage-based billing, where every account includes ads (Pricing). |
404 | The profileId is unknown, or the profile has no LinkedIn account to inherit a token from | Check the profile id, and connect LinkedIn before its ads. |
Error handling covers the envelope and the stable codes.
Related
- Create standalone ad: group, campaign and creative in one call.
- Boost post: promote an existing organic post.
- List ad accounts: the sponsored accounts a connection can reach.
- Bid pricing and Supply forecast.
- Send conversions: server-side conversion events.
Limits and errors
The per-user ops budget on live Google Ads calls, what the Google Ads API and Zernio's integration do not expose, and the errors Google returns most often.
Boost a Post
Promote an existing LinkedIn Company Page post as an ad with POST /v1/ads/boost, keeping its reactions and comments, on any of the 6 goals boost accepts.