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.
By the end of this page, an existing Company Page post runs as a LinkedIn ad.
Before you start
You need a linkedinads account, the numeric ad account id from List ad accounts, and a published post.
Promote a post
Call POST /v1/ads/boost with postId, accountId, adAccountId, goal and budget.
Zernio wraps the post in a fresh Campaign Group, Campaign and Creative. The post keeps its social proof (reactions, comments) while it runs as an ad.
import Zernio from '@zernio/node';
const zernio = new Zernio();
const { data: boosted } = await zernio.adcampaigns.boostPost({
body: {
postId: '65f1c0a9e2b5af0012ab34cd',
accountId: '66b2e19d8c3f5a7e9d0b1c2d',
adAccountId: '517258773',
name: 'Boost product launch',
goal: 'engagement',
budget: { amount: 50, type: 'daily' },
schedule: { startDate: '2027-01-04T09:00:00Z', endDate: '2027-01-11T09:00:00Z' }
}
});
console.log(boosted.ad._id);Response (201):
{
"ad": {
"_id": "66f0a1b2c3d4e5f6a7b8c9d0",
"name": "Boost product launch",
"platform": "linkedin",
"status": "pending_review",
"adType": "boost",
"goal": "engagement",
"budget": { "amount": 50, "type": "daily" },
"schedule": { "startDate": "2027-01-04T09:00:00Z", "endDate": "2027-01-11T09:00:00Z" },
"platformCampaignId": "645412093",
"platformAdSetId": "810456563"
},
"message": "Ad created and submitted for review"
}schedule.startDate and endDate are date-times, not dates.
To boost a post Zernio did not publish, send LinkedIn's own post id as platformPostId instead of postId. Keep the rest of the body identical:
{
"platformPostId": "urn:li:share:7280421553219899392",
"accountId": "66b2e19d8c3f5a7e9d0b1c2d",
"adAccountId": "517258773",
"name": "Boost product launch",
"goal": "engagement",
"budget": { "amount": 50, "type": "daily" }
}Goals a boost accepts
goal takes 6 values on LinkedIn, every one the endpoint offers except app_promotion:
goal | LinkedIn objective | Notes |
|---|---|---|
engagement | ENGAGEMENT | The default choice for a post you want reacted to and commented on. |
traffic | WEBSITE_VISIT | |
awareness | BRAND_AWARENESS | Optimizes for impressions. |
video_views | VIDEO_VIEW | The boosted post must carry a video. |
lead_generation | LEAD_GENERATION | Requires leadGenFormId, the adForm id from POST /v1/ads/lead-forms. |
conversions | WEBSITE_CONVERSION | Boost only: POST /v1/ads/create returns 422 for it on LinkedIn. The campaign's default delivery target is MAX_CLICK, because LinkedIn's conversion target optimizes toward a rule the boost does not attach; set optimizationTargetType yourself to override it. Attribution still comes from your conversion rules. |
job_applicants is the one LinkedIn goal that boost does not take. It needs the jobs creative on POST /v1/ads/create.
Bidding options go in platformSpecificData, the same shape as on /v1/ads/create. See Bidding.
Retries. Boost is not idempotent. Send an Idempotency-Key header so a retry replays the original 201 instead of creating a second ad (Idempotency).
Without the header, an identical body is treated as a retry anyway:
- a
409while one boost is in flight - the ad already created within the last 10 minutes, instead of a second one
To sponsor an existing post under a campaign you build and control, use the thought-leader format on /v1/ads/create instead. You choose bidding, targeting and schedule the same way as any other format.
If it fails
| Error | Cause | Fix |
|---|---|---|
422 with INVALID_URN_TYPE | A personal profile authored the post, and LinkedIn's Marketing API sponsors organization-authored posts only | Boost a post the Company Page authored |
422 mentioning organizationUgcAuthorizations | The Company Page post has not been approved for sponsorship | The author approves it at linkedin.com/sponsorship-permissions |
| LinkedIn refuses the post id | platformPostId is an activity id from a feed permalink | Take the share or ugcPost id from "Copy link to post" |
409 | An identical boost is still in flight | Re-send the same request, or send an Idempotency-Key |
Zernio explains the refusal in error and passes LinkedIn's own rejection through in platformError:
{
"error": "LinkedIn's API can't sponsor posts from personal profiles (Thought Leader Ads), only posts authored by an organization Page. Create member-post ads in LinkedIn Campaign Manager.",
"type": "platform_error",
"code": "platform_api_error",
"platform": "linkedin",
"platformError": {
"status": 422,
"errorDetails": { "inputErrors": [{ "code": "INVALID_URN_TYPE" }] }
}
}Related
- Create ads: ads built from scratch, and bidding.
- Targeting: LinkedIn's B2B audience facets.
- Creative formats: thought-leader ads.
- Boost post: every field of the request.