Create and Manage Campaigns
Warning
Deprecation Notice
The Marketing Version 202308 (Marketing August 2023) and earlier versions (excluding 202306 and 202307) have been sunset. Additionally, the unversioned APIs will be sunset soon. We recommend that you migrate to the versioned APIs as well as migrate to the new Content and Community Management APIs to avoid disruptions. See the Migration page for more details.
If you haven’t yet migrated and have questions, submit a request on the LinkedIn Developer Support Portal.
Campaigns define the ad schedule and budget (daily/total.) The campaign can be bound to a specific start and end date or run continuously until the budget is spent.
Campaigns can be targeted for a specific selection of members (target audience) based on categories such as job title, job function, seniority, etc.
Limitations
- AD ACCOUNTS
- Limited to 5,000 campaigns (regardless of campaign status)
- Maximum of 1,000 concurrent campaigns in
ACTIVE
status at any given time
- CAMPAIGNS
- Maximum of 15 active creatives and 85 inactive creatives
- Active until it reaches its end time or gets deleted
- Paused campaigns are considered active until their designated end times
- CREATIVES
- Creatives must match the ad format selected during campaign creation
- If no Ad format is set, it is set by the first creative created under that campaign
- Dynamic, Carousel, and Video Ad Campaigns must have their format set during creation
Permissions
There are two conditions for successful Ad Account User API calls:
Scope permission accessibility for:
rw_ads
(read/write)r_ads
(read-only)
The Ad Account user that assigns permissions has one of the following roles:
ACCOUNT_BILLING_ADMIN
ACCOUNT_MANAGER
CAMPAIGN_MANAGER
CREATIVE_MANAGER
VIEWER
(read-only, even withrw_ads
scope)
For more information on Ad Account roles and permissions:
Campaign Types
There are four ad placements, or Campaign Types you can run on LinkedIn.
Campaign Type | Description | Best Practices |
---|---|---|
TEXT_AD | Text ads include a headline, brief text, and an image. They may be placed at the top of the page or on the right rail of a variety of LinkedIn desktop pages. | Text Ads |
SPONSORED_UPDATES |
Sponsored Content: The Sponsored Content campaign in Campaign Manager. Provides the option to browse existing content to select campaign. | Sponsored Updates |
SPONSORED_INMAILS | Sponsored Messaging: These ads are displayed via desktop and mobile when members are active anywhere on LinkedIn. | Sponsored Inmails |
DYNAMIC | Personalized ads that are automatically populated with a members' profile photo and other data dynamically pulled from their LinkedIn profiles. APIs are available for self-service campaign formats such as Follower Ads, Spotlight Ads, and Jobs Ads. | Dynamic ads |
*CONTENT | *This format is only available for managed accounts and cannot be managed through the API or Campaign Manager. Learn more |
Learn more: Campaign Objective API Mapping
Direct Sponsored Content
Direct Sponsored Content (DSC) is a sponsored update that does not appear on the organization page. It allows your organization to personalize, test, and refine its messages to improve content quality for a targeted audience without cluttering the organization page.
Direct Sponsored Content can be created by:
- Ad Account Users with permission scope
r_ads
orrw_ads
with a role higher thanVIEWER
. - Organization users with DIRECT_SPONSORED_CONTENT_POSTER or ADMINISTRATOR roles.
Campaign Schema
Note
Starting 202211, response decoration is no longer supported and has been replaced by Additional Info Fields. These new field(s) provide additional information for a field that is present in a schema. Learn more about the Additional Info Fields here.
Field | Type | Description | Required | Additional Info Field |
---|---|---|---|---|
account | SponsoredAccountUrn | URN identifying the advertising account associated with the campaign. This value is immutable once set. For example, urn:li:sponsoredAccount:{id} | True | False |
accountInfo | Account | Information about the advertising account associated with the campaign. This is a read only field. Please refer to Additional Info Fields to learn how to access this field. | False | True |
associatedEntity | URN | An URN identifying the intended beneficiary of the advertising campaign such as a specific company or member | False unless campaign will use Sponsored Content, Dynamic Ads, or Lead Gen Forms | False |
associatedEntityInfo | Union | Information about the associatedEntity. If the entity is an organization, an OrganizationInfo object is returned. If the entity is a person, a PersonInfo object is returned. For all other entity types an empty record will be returned. This is a read only field. Please refer to Additional Info Fields to learn how to access this field. | False | True |
audienceExpansionEnabled | boolean, default="false" | Enable Audience Expansion for the campaign provides query expansion for certain targeting criteria. | False | False |
campaignGroup | Sponsored-CampaignGroup URN | URN identifying the campaign group associated with the campaign. The campaign group URN must be specified for campaign creation starting October 30, 2020. | True | False |
campaignGroupInfo | CampaignGroup | Information about the Campaign Group associated with the campaign. This is a read only filed. Please refer to Additional Info Fields to learn how to access this field. | False | True |
costType | CostType | True | False | |
creativeSelection | CampaignCreativeSelection, default="OPTIMIZED" | False | False | |
dailyBudget.amount | BigDecimal | Maximum amount to spend per day UTC. The amount of money as a real number string. | True, unless totalBudget is provided. | False |
dailyBudget.currencyCode | Currency | ISO currency code. The currency must match that of the parent account. | True, unless totalBudget is provided. | False |
locale.country | string | Locale of the campaign. An uppercase two-letter country code as defined by ISO-3166. The country and language combination must match one of the supported locales | True | False |
locale.language | string | Locale of the campaign. A lowercase two-letter language code as defined by ISO-639. The country and language combination must match one of the supported locales | True | False |
name | string | The name of the campaign; primarily used to make it easier to reference a campaign and to recall its purpose. | True | False |
objectiveType | string | Campaign Objective type values. Click here for Campaign Objective descriptions |
False | False |
offsiteDeliveryEnabled | Boolean (True/False) | Allows your campaign to be served on the LinkedIn Audience Network to extend the reach of the campaign by delivering ads beyond the LinkedIn feed to members on third-party apps and sites. There is no default set. | True | False |
offsitePreferences | OffsitePreferences | Offsite preferences that an advertiser specifies for this campaign. An example OffsitePreference is an object that contains App Categories, App Store URLs, Web Domain Names for which this campaign should be included/excluded. See the OffsitePreferences object for more details and examples. | False | False |
runSchedule.start | long | Scheduled date range to run associated creatives. The start date must be non-null. Represents the inclusive (greater than or equal to) value in which to start the range. | False | False |
runSchedule.end | long | Scheduled date range to run associated creatives. The start date must be non-null. Represents the exclusive (strictly less than) value in which to end the range. This field is optional. An unset field indicates an open range; for example, if start is 1455309628000 (Fri, 12 Feb 2016 20:40:28 GMT), and end is not set, it means everything at, or after 1455309628000. | False | False |
targetingCriteria | targetingCriteria | Specifies targeting criteria that the member should match. This is a more advanced boolean expression than the previous targeting field. It provides a generic AND/OR construct to include and exclude different targeting facets when defining audiences for campaigns. | True, unless targeting provided. | False |
totalBudget.amount | BigDecimal | Maximum amount to spend over the life of the campaign. The amount of money as a real number string. Deprecated for campaigns not using lifetime pacing. | True, unless dailyBudget is provided. | False |
totalBudget.currencyCode | Currency | ISO currency code. The currency must match that of the account. Deprecated for campaigns not using lifetime pacing. | True, unless dailyBudget is provided. | False |
type | CampaignType | True | False | |
unitCost.amount | BigDecimal, default=0 | This value is used as one of the following: amount to bid (for manual bidding), amount which is the target cost (for target cost bidding) per click, impression, or other event depending on the pricing model, or cost cap (for cost cap bidding). The amount of money as a real number string. The amount should be non-negative if the bidding strategy is manual, target cost, or cost cap bidding. The default is 0 with the currency code set to match that of the associated account. | True | False |
unitCost.currencyCode | Currency default is set to match the associated account |
Amount to bid per click, impression, or other event depending on the pricing model. The default is 0 with the currency code set to match that of the associated account. ISO currency code. | False | False |
versionTag | string | Each entity has a version tag associated with it. The version tag is initiated to 1 when the entity is created. Each single update to the entity increases its version tag by 1. | False | False |
status | string | True | False | |
optimizationTargetType | default="NONE" | Determines how this campaign is optimized for spending. If this is not set, there is no optimization. Refer to the documentation here. | False | False |
format | campaignFormat | The ad format on campaign level. Read more: Ad Formats |
False | False |
pacingStrategy | string | Identifies the pacing option used for the campaign. Optional and editable only on create. Possible values: |
False | False |
test | boolean, default="False" | Flag showing whether this campaign is a test campaign, i.e., belongs to a test account. This is a read-only and immutable field that is set implicitly during creation based on whether the account is a Test Account or not. | False | False |
servingStatuses | strings | Array of enums that determine whether or not a campaign may be served; unlike 'status', which is user-managed, the values are controlled by the service. This is a read-only field. Possible values are: |
False | False |
connectedTelevisionOnly | Boolean Optional, default="False" | Flag showing whether this campaign is a Connected Television Only campaign. Allow advertisers to specify when they’re creating a CTV campaign. Not specifying the boolean can be considered false. When 'connectedTelevisionOnly = true', offsiteDeliveryEnabled should be set to true. Note: Applicable only from versions 202408 and above. | False | False |
optimizationPreference | Union | Allows granular optimization customization on this campaign on top of optimizationTargetType. FrequencyOptimizationPreference is the first type of optimizationPreference we support now. Note: Applicable only from versions 202408 and above. | False | False |
OrganizationInfo
Field Name | Type | Description |
---|---|---|
id | long | Unique Id representing the organization. |
name | MultiLocaleString | Name of the organization. |
vanityName | string | Name of the organization present in the URLs. |
localizedName | string | Locale specific name of the organization. |
logo | CroppedImage | The organization’s logo. The sizes may vary greatly, i.e., 50x50, 100x60, 400x400, so clients should handle the given height and width accordingly. |
PersonInfo
Field Name | Type | Description |
---|---|---|
id | Urn | Unique id representing the member |
vanityName | String | Name of the member present in the URLs. |
Targeting Object
The targeting
object is deprecated. Campaigns should use the targetingCriteria
object going forward. See the Migration Guide for targetingCriteria for more information.
Once a campaign is using the preferred targetingCriteria
format, it cannot be changed back to the targeting
format. All further targeting updates must use the targetingCriteria
format.
Offsite Preferences
Field Name | Type | Description |
---|---|---|
iabCategories | optional IABCategories | The set of IAB (Interactive Advertising Bureau) categories that this campaign may be served/excluded from, based on where the ad request is from. Mobile Apps, Mobile Web, and Desktop Inventory are all classified into one or more of these categories. For more details, refer to LinkedIn Audience Network, Manage Audience Restrictions, and OpenRTB API Specification Version 2.3. |
publisherRestrictionFiles | optional PublisherRestrictionFiles | This field contains one or more files that have been uploaded by an advertiser. Each file contains a list of web domains/app store URLs. The advertiser can choose if they want to include or exclude this particular campaign from serving on those apps/websites. The API accepts only allowlists under include field and blocklists under exclude field |
IAB Categories
Field Name | Type | Description |
---|---|---|
exclude | IABCategoryUrn[], default="[]" | Excluded list of IAB categories. For example, if an advertiser specifies {urn:li:iabCategory:IAB20, urn:li:iabCategory:IAB22}, this would block this campaign from serving on Travel and Shopping related apps/websites. Note that exclude takes precedence over include in conflicted cases. |
include | IABCategoryUrn[], default="[]" | Included list of IAB categories. For example, if an advertiser specifies {urn:li:iabCategory:IAB5, urn:li:iabCategory:IAB12}, this would serve this campaign on Education and News related apps/websites only. Note that exclude takes precedence over include in conflicted cases. |
Publisher Restriction Files
Field Name | Type | Description |
---|---|---|
exclude | AdPublisherFileUrn[], default="[]" | List of publisher file IDs to whom ad requests may NOT be served. These file IDs are references to the file that contains a list of web sites/app store URLs where an ad request may not be served. For example: urn:li:adPublisherFile:{fileID}, urn:li:adPublisherFile:{fileID2} |
include | AdPublisherFileUrn[], default="[]" | List of publisher file IDs to whom ad requests should be served. These file IDs are references to the file that contains a list of web sites/app store URLs where an ad request should be served. For example: urn:li:adPublisherFile:{fileID}, urn:li:adPublisherFile:{fileID2} |
Frequency Optimization Preference
Currently, only the BRAND_AWARENESS
objective type supports this field for frequency cap management. If a frequency cap is not set, LinkedIn will dynamically apply a cap to optimize your selected optimization target.
Note
Frequency cap management is currently fully available on Connected TV (CTV) only campaigns. We are gradually releasing to the other Brand Awareness campaigns, and you might not have access to it at this time.
Ad Frequency and Frequency Cap
Ad frequency is crucial for building long-term memory and brand awareness with your target audience. Frequency refers to the number of times a member account has been shown your ad campaign within a specific time period. Currently, we support a 7-day span and the MAX_FREQUENCY
optimization type, which allows you to customize your campaign-level frequency cap.
A frequency cap sets an upper limit on the number of times an ad in your campaign will be shown to a single member account within a 7-day period. You can set the frequency cap to any number between 3 and 30 impressions during this time.
Field Name | Type | Description |
---|---|---|
optimizationType | string | Type of the frequency optimization strategy. |
frequency | int | The number of times the campaign is shown to a member. For MAX_FREQUENCY , the maximum allowable frequency is between 3 and 30. |
timeSpan | TimeSpan | Time span of the frequency optimization rule. |
Time Span
Field Name | Type | Description |
---|---|---|
duration | long | Represents the length of time. Allowed value: 7 |
unit | string | Represents the unit of the duration of time. Allowed Unit: DAY |
Create a Campaign
From May version onwards, we have added advertiser account id as a path parameter in the request URL. To know more about the implications of this, please refer to Recent Changes.
POST https://api.linkedin.com/rest/adAccounts/518121035/adCampaigns
{
"account": "urn:li:sponsoredAccount:518121035",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled": false,
"costType": "CPC",
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"locale": {
"country": "US",
"language": "en"
},
"name": "Campaign Sponsored update B",
"offsiteDeliveryEnabled": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"status": "ACTIVE"
}
POST https://api.linkedin.com/rest/adAccounts/518121035/adCampaigns
{
"account": "urn:li:sponsoredAccount:518121035",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled": false,
"costType": "CPC",
"connectedTelevisionOnly": false,
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"locale": {
"country": "US",
"language": "en"
},
"name": "Campaign Sponsored update B",
"offsiteDeliveryEnabled": false,
"optimizationPreference": {
"frequencyOptimizationPreference": {
"timeSpan": {
"duration": 7,
"unit": "DAY"
},
"optimizationType": "MAX_FREQUENCY",
"frequency": 10
}
},
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"status": "ACTIVE"
}
POST https://api.linkedin.com/rest/adAccounts/518121035/adCampaigns
{
"account": "urn:li:sponsoredAccount:518121035",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled": false,
"costType": "CPC",
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"locale": {
"country": "US",
"language": "en"
},
"name": "Campaign Sponsored update B",
"offsiteDeliveryEnabled": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"status": "ACTIVE"
}
Budgeting
The following options are available for budgeting at the campaign level:
dailyBudget
- Campaigns run until the daily ad spend for the campaign has reached the daily budget limit. At midnight UTC, the daily budget resets and the campaign continues to run the next day.totalBudget
- Campaigns run until the total ad spend for the life of the campaign has reached the total budget limit. Deprecated for campaigns not using lifetime pacing.
If both daily budget and total budget are set for the campaign, the campaign runs until the ad spend has either reached daily spend limit and/or the total spend limit.
Dynamic Ads campaigns must set both daily and total budgets.
Targeting Discrimination Notice
Applications utilizing LinkedIn's targeting capabilities are required to display a notice in their user interface notifying advertisers that they cannot use LinkedIn to discriminate against members based on personal characteristics. The notice should include the following text:
"LinkedIn tools may not be used to discriminate based on personal characteristics such as gender, age, race, or ethnicity.Learn more."
Lifetime Pacing
Lifetime Pacing provides advertisers a budget option that enables running a campaign according to a projected budget based on the predicted spend curve throughout the campaign's lifetime. Creating a spending strategy in this manner optimizes advertiser return on investment (ROI) value.
As an example, advertisers can simply set a lifetime budget of $10,000, and run a campaign for one month. With Lifetime Pacing, LinkedIn's delivery system can figure out how to spend the budget efficiently based on the supply curve during the allocated month time period. To illustrate this efficiency, the campaign would spend less on a Saturday when fewer LinkedIn member use the site, but more on a Monday when more members are viewing the site.
While the lifetime budget is a new spending option, we permit advertisers to use other budget options including the "set daily budget alone" or "set both daily budget and lifetime budget" to accommodate their different requirements.
Benefits of Lifetime Pacing
For all LinkedIn advertisers, Lifetime Pacing delivers the lifetime budget throughout the campaign lifetime to improve advertiser ROI, stabilize the cost per result value, and simplify campaign creation and optimization by leveraging advanced pacing, forecasting, and machine learning techniques.
To enable Lifetime Pacing, set the pacingStrategy
to LIFETIME
.
The four strategies one can use are a daily budget with:
- A continuous schedule.
- A fixed schedule.
- A total budget with a fixed schedule.
- A total budget with continuous schedule.
Use a Daily Budget with a Continuous Schedule
To use this option, set dailyBudget
and runSchedule.start
. By using a daily budget with a continuous schedule, the advantage is you have great spend control while running a non-stop campaign. In this approach, LinkedIn may charge you up to 150% of your daily budget if there’re great opportunities in the auction for you on a single day.
Use a Daily Budget with a Fixed Schedule
To use this option, set dailyBudget
, runSchedule.start
and runSchedule.end
. By using a daily budget with a fixed schedule that has an explicit end date, the advantage is Lifetime Pacing will pace your lifetime budget (daily budget X days of the campaign flight time) in order to to get the optimal ROI for you. In this approach, LinkedIn may charge you up to 150% of your daily budget if there’re great opportunities in the auction for you on a single day. Also, this approach spends in total no more than an amount equal to the following value: (the total number of days of the campaign flight time X the daily budget).
Use a Total Budget with a Fixed Schedule
To use this option, set totalBudget
, runSchedule.start
and runSchedule.end
. By using a total budget with a fixed schedule that has a specific end date for spending, the advantage is Lifetime Pacing will pace your lifetime budget to obtain optimal results. In this approach, you spend no more than the full budget for the lifetime of the campaign. LinkedIn applies the budget optimally through the campaign lifetime up to the specified final day to maximize ROI.
Use a Daily Budget and a Total Budget with a Continuous Schedule
To use this option, set dailyBudget
, totalBudget
and runSchedule.start
. By using a daily budget and a total budget with a continuous schedule without an end date, the advantage is that you have the maximum control of your spending for both the daily and lifetime budget approaches.
In this approach, LinkedIn may charge you up to 150% of your daily budget if there are strong opportunities in the auction for you on a given day. Also, this approach spends in total no more than the total budget value you specify. The campaign stops as soon as the budget is depleted.
Optimization of Campaigns
optimizationTargetType
is used to optimize spending for a campaign. Depending on what value is populated in this field, the campaign enables either auto, manual, target cost, or cost cap bidding.
For auto-bidding campaigns created using legacy Objectives, the costType
is always CPM
. The unitCost
defaults to 0
. Note that there are no validations and can be set to any arbitrary high/low value.
If optimizationTargetType
is switched to a manual bidding, target cost, or cost cap bidding type, unitCost
should be set to a non-negative value appropriate to the dailyBudget
. For manual bidding, target cost, or cost cap bidding types, if unitCost
is 0
, the campaign will not deliver.
Warning
Failure to set the unitCost
correctly can lead to unexpected expenses.
LinkedIn recommends updating both unitCost
and optimizationTargetType
when switching.
If you want to optimize the campaign for spending, you must set the optimizationTargetType
to a target type.
Setting the optimizationTargetType
to one of the following keeps a campaign in manual bidding mode:
optimizationTargetType | Description |
---|---|
NONE | No optimization for this campaign. |
ENHANCED_CONVERSION | This is used for conversion tracking based bid adjustment. For example, if one campaign has a higher conversion rate for a particular member, higher bids for that specific member may be placed, and vice versa. |
Setting optimizationTargetType
to one of the following activates auto-bidding for the campaign:
optimizationTargetType | Description |
---|---|
MAX_IMPRESSION | Maximize the campaign's number of impressions and spend the daily budget without an advertiser specifying bid. |
MAX_CLICK | Maximize the campaign's number of clicks and spend the daily budget without an advertiser specifying bid. |
MAX_CONVERSION | Maximize the campaign's number of conversions and spend the daily budget without an advertiser specifying bid. |
MAX_VIDEO_VIEW | Maximize the campaign's number of video views and spend the daily budget without an advertiser specifying bid. |
MAX_LEAD | Maximize the campaign's number of leads and spend the daily budget without an advertiser specifying bid. |
MAX_REACH | Optimize towards the number of unique member accounts that are shown your ads and spend the daily budget without an advertiser specifying bid. |
The target cost bidding model enables you to set either a target cost per event or a desired optimal average cost per action. An event can be either an impression, click, or video view. LinkedIn maximizes the number of actions while maintaining the lifetime average cost per result around the advertiser specified target cost. A cost deviation range around the target cost can then be adjusted accordingly.
Setting one of the following options for optimizationTargetType
activates target cost bidding for the campaign:
optimizationTargetType | Cost Type | Description |
---|---|---|
TARGET_COST_PER_CLICK | CPC | Maintain a specified average bidding amount for each click by a user. |
TARGET_COST_PER_IMPRESSION | CPM | Maintain a specified average bidding amount for each event view or impression by a user. |
TARGET_COST_PER_VIDEO_VIEW | CPV | Maintain a specified average bidding amount for each video event view or impression by a user. |
Cost cap bidding enables you to set a cost cap for the maximum cost you would be willing to pay per action result. An action can be either an impression, click, video view, or lead. LinkedIn maximizes the number of actions while maintaining the lifetime average cost per result under the cost cap threshold.
Setting one of the following options for optimizationTargetType
activates cost cap bidding for a campaign. Note that costType
is CPM
for all of the options since cost cap bidding charges by impressions (same as auto-bidding).
optimizationTargetType | Cost Type | Description |
---|---|---|
CAP_COST_AND_MAXIMIZE_CLICKS | CPM | Maximize the campaign's number of impressions while keeping average cost per click under the advertiser-specified cost cap. |
CAP_COST_AND_MAXIMIZE_IMPRESSIONS | CPM | Maximize the campaign's number of impressions while keeping average cost per 1000 impressions under the advertiser-specified cost cap. |
CAP_COST_AND_MAXIMIZE_VIDEO_VIEWS | CPM | Maximize the campaign's number of impressions while keeping average cost per video view under the advertiser-specified cost cap. |
CAP_COST_AND_MAXIMIZE_LEADS | CPM | Maximize the campaign's number of leads while keeping average cost per lead under the advertiser-specified cost cap. |
Optimization based on ObjectiveType
LinkedIn delivers better results by mapping existing optimizations against a new, more complete set of objectives.
Bidding for objectives: Bid types, including automated bidding and maximum CPC bids, are aligned to your objective to bid more aggressively against audience more likely to take the action based on that objective.
Creative optimization for objectives: LinkedIn optimizes ads and creatives in rotation in order to better deliver on an advertiser’s objective.
The benefit is a more complete, end-to-end objective-based experience with streamlined bidding options that match the objectives.
There are 3 optimization types which can be mapped to their corresponding objectives:
- Automated bidding based on objectives
- Maximum CPC bidding based on objectives
- Optimized ad rotation based on objectives
Objective Group | Objective | Autobidding* | Maximum CPC Bid | Maximum CPM Bid | Maximum CPV Bid |
Awareness | Brand awareness | Optimizes for reach or impressions | N/A | Optimizes for reach or impressions | N/A |
Consideration | Website visits | Optimizes for destination URL clicks | Optimizes for destination URL clicks | Optimizes for impressions | N/A |
Engagement | Optimizes for destination URL clicks | Optimizes for engagement | Optimizes for impressions | N/A | |
Video views | Optimizes for video views | N/A | Optimizes for impressions | Optimizes for video views | |
Conversions | Lead generation | Optimizes for lead gen submissions | Optimizes for lead gen submissions | Optimizes for impressions | N/A |
Website conversions | Optimizes for conversions | Optimizes for conversions | Optimizes for impressions | N/A | |
Job applicants | Optimizes for clicks to job ad | Optimizes for clicks to job ad | Optimizes for impressions | N/A |
*If using autobidding for Sponsored Messaging ad formats, then the campaign will optimize for sends.
Validations Based on Objective Type
During campaign creation, certain fields are expected to be set with specific values for each ObjectiveType
. These constraints are validated by the API.
Website Traffic and Creative Engagement have differing validation rules based on the selected optimizationTargetType
The following table lists the validations for each ObjectiveType
:
objective | campaign.format | Audience Expansion | LinkedIn Audience Network | Conversion tracking |
---|---|---|---|---|
Brand Awareness | STANDARD_UPDATE | optional | optional | optional |
CAROUSEL | optional | optional | optional | |
SINGLE_VIDEO | optional | optional | optional | |
TEXT | optional | Disallowed | optional | |
SPOTLIGHT | Disallowed | Disallowed | optional | |
FOLLOW_COMPANY | Disallowed | optional | REQUIRED | |
SPONSORED_MESSAGE | optional | Disallowed | optional | |
Video View | SINGLE_VIDEO | optional | optional | optional |
Lead Generation | STANDARD_UPDATE | optional | optional | optional |
SINGLE_VIDEO | optional | Disallowed | optional | |
CAROUSEL | optional | Disallowed | optional | |
SPONSORED_INMAIL | optional | Disallowed | optional | |
SPONSORED_MESSAGE | optional | Disallowed | optional | |
Website Conversion | STANDARD_UPDATE | optional | optional | optional |
SINGLE_VIDEO | optional | optional | REQUIRED | |
CAROUSEL | optional | optional | REQUIRED | |
TEXT | optional | Disallowed | REQUIRED | |
SPOTLIGHT | Disallowed | Disallowed | REQUIRED | |
SPONSORED_INMAIL | optional | Disallowed | REQUIRED | |
SPONSORED_MESSAGE | optional | Disallowed | REQUIRED | |
Website Visit | STANDARD_UPDATE | optional | optional | optional |
SINGLE_VIDEO | optional | optional | optional | |
CAROUSEL | optional | optional | optional | |
TEXT | optional | Disallowed | optional | |
SPOTLIGHT | Disallowed | Disallowed | optional | |
SPONSORED_INMAIL | optional | Disallowed | optional | |
SPONSORED_MESSAGE | optional | Disallowed | optional | |
Engagement | STANDARD_UPDATE | optional | optional | optional |
CAROUSEL | optional | optional | optional | |
SINGLE_VIDEO | optional | optional | optional | |
FOLLOW_COMPANY | Disallowed | Disallowed | optional | |
SPONSORED_MESSAGE | optional | optional | optional | |
Job Applicant | STANDARD_UPDATE | optional | optional | optional |
SPOTLIGHT | Disallowed | Disallowed | optional | |
JOBS | Disallowed | Disallowed | optional |
Note
The next two tables have varying requirements for Audience Expansion, LinkedIn Audience Network (LAN), and Conversion Tracking
Website Traffic
campaign.format | bidStrategy | optimizationTargetType | costType | Bid Type | Audience Expansion | LAN | Conversion Tracking |
STANDARD_UPDATE | AUTO | MAX_IMPRESSION | CPM | CPM | Optional | Optional | Optional |
AUTO | MAX_CLICK | CPM | CPC | ||||
AUTO | MAX_CONVERSION | CPM | CPC | Required | |||
CPC | ENHANCED_CONVERSION | CPC | CPC | ||||
CPC | NONE | CPC | CPC | Optional | |||
CPM | NONE | CPM | CPM | ||||
SINGLE_VIDEO | AUTO | MAX_IMPRESSION | CPM | CPM | Optional | Optional | Optional |
AUTO | MAX_CLICK | CPM | CPC | ||||
AUTO | MAX_CONVERSION | CPM | CPC | Required | |||
CPC | ENHANCED_CONVERSION | CPC | CPC | ||||
CPC | NONE | CPC | CPC | Optional | |||
CPM | NONE | CPM | CPM | ||||
CAROUSEL | AUTO | MAX_IMPRESSION | CPM | CPM | Optional | Disallowed | Optional |
AUTO | MAX_CLICK | CPM | CPC | ||||
AUTO | MAX_CONVERSION | CPM | CPC | Required | |||
CPC | ENHANCED_CONVERSION | CPC | CPC | ||||
CPC | NONE | CPC | CPC | Optional | |||
CPM | NONE | CPM | CPM | ||||
TEXT | CPC | NONE | CPC | CPC | Optional | Disallowed | Optional |
CPM | NONE | CPM | CPM | ||||
SPOTLIGHT | CPC | NONE | CPC | CPC | Disallowed | Disallowed | Optional |
CPM | NONE | CPM | CPM | ||||
FOLLOW_COMPANY | CPC | NONE | CPC | CPC | Disallowed | Disallowed | Optional |
CPM | NONE | CPM | CPM | ||||
SPONSORED_INMAIL | CPS(measured as CPM x 1000) | NONE | CPM | CPM | Optional | Disallowed | Optional |
SPONSORED_MESSAGE | CPS(measured as CPM x 1000) | NONE | CPM | CPM | Optional | Disallowed | Optional |
JOBS | CPM | NONE | CPM | CPM | Disallowed | Disallowed | Optional |
Creative Engagement
campaign.format | bidStrategy | optimizationTargetType | costType | Bid Type | Audience Expansion | LAN | Conversion Tracking |
STANDARD_UPDATE | AUTO | MAX_IMPRESSION | CPM | CPM | Optional | Optional | Optional |
AUTO | MAX_CLICK | CPM | CPC | ||||
AUTO | MAX_CONVERSION | CPM | CPC | Required | |||
CPC | ENHANCED_CONVERSION | CPC | CPC | ||||
CPC | NONE | CPC | CPC | Optional | |||
CPM | NONE | CPM | CPM | ||||
CAROUSEL | AUTO | MAX_IMPRESSION | CPM | CPM | Optional | Disallowed | Optional |
AUTO | MAX_CLICK | CPM | CPC | ||||
AUTO | MAX_CONVERSION | CPM | CPC | Required | |||
CPC | ENHANCED_CONVERSION | CPC | CPC | ||||
CPC | NONE | CPC | CPC | Optional | |||
CPM | NONE | CPM | CPM | ||||
SINGLE_VIDEO | AUTO | MAX_IMPRESSION | CPM | CPM | Optional | Optional | Optional |
AUTO | MAX_CLICK | CPM | CPC | ||||
AUTO | MAX_CONVERSION | CPM | CPC | Required | |||
CPC | ENHANCED_CONVERSION | CPC | CPC | ||||
CPC | NONE | CPC | CPC | Optional |
Campaigns optimizing for MAX_CONVERSION
must have a conversion associated with it to be activated. Campaigns of this type should be created and then associated with a conversion before activating. See Conversion Tracking for instructions on creating conversions and associating them with campaigns.
Lead Generation Campaigns
A special type of Sponsored Updates campaign is the Lead Generation campaign. To create one, set the objectiveType
to LEAD_GENERATION
. You cannot set offsiteDeliveryEnabled
to True
when using Lead Gen.
See the following sample request to create a Lead Generation campaign.
{
"account": "urn:li:sponsoredAccount:123456",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled": false,
"costType": "CPM",
"connectedTelevisionOnly": false,
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"locale": {
"country": "US",
"language": "en"
},
"name": "My LeadGen Campaign",
"objectiveType": "LEAD_GENERATION",
"offsiteDeliveryEnabled": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"status": "ACTIVE",
"targetingCriteria": {
"exclude": {
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:102095887"
]
}
},
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:segments": [
"urn:li:adSegment:259144"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "18",
"currencyCode": "USD"
}
}
{
"account": "urn:li:sponsoredAccount:123456",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled": false,
"costType": "CPM",
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"locale": {
"country": "US",
"language": "en"
},
"name": "My LeadGen Campaign",
"objectiveType": "LEAD_GENERATION",
"offsiteDeliveryEnabled": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"status": "ACTIVE",
"targetingCriteria": {
"exclude": {
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:102095887"
]
}
},
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:segments": [
"urn:li:adSegment:259144"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "18",
"currencyCode": "USD"
}
}
Video Ad Campaigns
Video campaigns can be created with an objective to have as many views as possible. See the following example:
{
"account": "urn:li:sponsoredAccount:53333333341",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled": false,
"costType": "CPV",
"connectedTelevisionOnly": false,
"objectiveType": "VIDEO_VIEW",
"creativeSelection": "OPTIMIZED",
"locale": {"language": "en","country": "US"},
"name": "Video campaign Sponsored Update",
"format":"SINGLE_VIDEO",
"offsiteDeliveryEnabled": false,
"runSchedule": {
"start": 1520890990333,
"end": 1521754990333
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"dailyBudget": {
"currencyCode": "USD",
"amount": "18"
},
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"status": "ACTIVE"
}
{
"account": "urn:li:sponsoredAccount:53333333341",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled": false,
"costType": "CPV",
"objectiveType": "VIDEO_VIEW",
"creativeSelection": "OPTIMIZED",
"locale": {"language": "en","country": "US"},
"name": "Video campaign Sponsored Update",
"format":"SINGLE_VIDEO",
"offsiteDeliveryEnabled": false,
"runSchedule": {
"start": 1520890990333,
"end": 1521754990333
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"dailyBudget": {
"currencyCode": "USD",
"amount": "18"
},
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"status": "ACTIVE"
}
Carousel Ad Campaigns
To create a Carousel Ad campaign, set type = SPONSORED_UPDATES
and format = CAROUSEL
. You can optionally set objectiveType
to WEBSITE_VISIT
or LEAD_GENERATION
. The default objective type for Sponsored Updates
is WEBSITE_VISIT
.
POST https://api.linkedin.com/rest/adAccounts/123/adCampaigns
{
"account": "urn:li:sponsoredAccount:123",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled": false,
"costType": "CPC",
"connectedTelevisionOnly": false,
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"format": "CAROUSEL",
"locale": {
"country": "US",
"language": "en"
},
"name": "Test Carousel Campaign",
"objectiveType": "WEBSITE_VISIT",
"offsiteDeliveryEnabled": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"status": "ACTIVE"
}
POST https://api.linkedin.com/rest/adAccounts/123/adCampaigns
{
"account": "urn:li:sponsoredAccount:123",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled": false,
"costType": "CPC",
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"format": "CAROUSEL",
"locale": {
"country": "US",
"language": "en"
},
"name": "Test Carousel Campaign",
"objectiveType": "WEBSITE_VISIT",
"offsiteDeliveryEnabled": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"status": "ACTIVE"
}
A successful response returns a 201 Created
HTTP status code and the ID in the x-linkedin-id
response header.
Connected Television Only Ad Campaigns
To create a Connected Television Only Ad campaign, there are several constraints on the following:
- Optimization Target Type cannot be manual bidding.
- Objective Type must be Brand Awareness.
- EnableAudienceNetwork (LAN Enabled-) must be true (REQUIRED.offsiteDelivery()).
- The target audience must be locale-based, limited to the “US + CA” region, and the language must be English only.
- Ensure that only CampaignCreativeSelection.ROUND_ROBIN is enabled for CTV Campaign Creation.
- When creating or updating the CTV campaign, ensure that dynamic budget optimization is turned off for the associated campaign group.
POST https://api.linkedin.com/rest/adAccounts/123/adCampaigns
{
"account": "urn:li:sponsoredAccount:53333333341",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled": false,
"costType": "CPM",
"connectedTelevisionOnly": true,
"objectiveType": "BRAND_AWARENESS",
"creativeSelection": "ROUND_ROBIN",
"locale": {"language": "en","country": "US"},
"name": "Video campaign Sponsored Update",
"format":"SINGLE_VIDEO",
"offsiteDeliveryEnabled": true,
"optimizationPreference": {
"frequencyOptimizationPreference": {
"timeSpan": {
"duration": 7,
"unit": "DAY"
},
"optimizationType": "MAX_FREQUENCY",
"frequency": 10
}
},
"optimizationTargetType": "NONE",
"runSchedule": {
"start": 1520890990333,
"end": 1521754990333
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"dailyBudget": {
"currencyCode": "USD",
"amount": "18"
},
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"status": "ACTIVE"
}
A successful response returns a 201 Created
HTTP status code with the ID in the x-linkedin-id
response header.
Dynamic Ad Campaigns
Dynamic Ads are personalized ads that are automatically populated with members' profile photo and other data dynamically pulled from their LinkedIn profiles. APIs are available for self-service campaign formats such as Follower Ads, Spotlight Ads, and Jobs Ads. The Content Ad format is only available for managed accounts and cannot be managed through the API or Campaign Manager. To learn more about Dynamic Ads, please see Dynamic Ads Overview.
Set type
as DYNAMIC
to create a Dynamic Ad Campaign. The following values are accepted for objectiveType
:
- WEBSITE_TRAFFIC
- WEBSITE_VISIT
- JOB_APPLICANT
- ENGAGEMENT
- WEBSITE_CONVERSION
- BRAND_AWARENESS
Note
All creatives under a Dynamic Ad campaign must have the same creative type.
The campaign format is a required field when set to campaign.type=DYNAMIC
.
Dynamic Ads campaigns must set both daily and total budgets.
POST https://api.linkedin.com/rest/adAccounts/123/adCampaigns
{
"account": "urn:li:sponsoredAccount:123",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled": false,
"objectiveType": "WEBSITE_TRAFFIC",
"costType":"CPM",
"connectedTelevisionOnly": false,
"creativeSelection":"OPTIMIZED",
"locale":{
"language":"en",
"country":"US"
},
"name":"Test Dynamic Ad Campaign",
"offsiteDeliveryEnabled":false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
}
]
}
},
"type":"DYNAMIC",
"totalBudget":{
"currencyCode":"USD",
"amount":"100"
},
"dailyBudget":{
"currencyCode":"USD",
"amount":"50"
},
"unitCost":{
"amount":"15",
"currencyCode":"USD"
},
"status": "ACTIVE"
}
POST https://api.linkedin.com/rest/adAccounts/123/adCampaigns
{
"account": "urn:li:sponsoredAccount:123",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled": false,
"objectiveType": "WEBSITE_TRAFFIC",
"costType":"CPM",
"creativeSelection":"OPTIMIZED",
"locale":{
"language":"en",
"country":"US"
},
"name":"Test Dynamic Ad Campaign",
"offsiteDeliveryEnabled":false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
}
]
}
},
"type":"DYNAMIC",
"totalBudget":{
"currencyCode":"USD",
"amount":"100"
},
"dailyBudget":{
"currencyCode":"USD",
"amount":"50"
},
"unitCost":{
"amount":"15",
"currencyCode":"USD"
},
"status": "ACTIVE"
}
A successful response returns a 201 Created
HTTP status code with the ID in the x-linkedin-id
response header.
Get a Campaign
Campaigns can be retrieved individually by passing in their ID to the following endpoint:
GET https://api.linkedin.com/rest/adAccounts/{adAccountId}/adCampaigns/{campaignID}
Sample Response
{
"account": "urn:li:sponsoredAccount:506289162",
"associatedEntity": "urn:li:organization:2414183",
"audienceExpansionEnabled": false,
"campaignGroup": "urn:li:sponsoredCampaignGroup:602277684",
"changeAuditStamps": {
"created": {
"time": 1530119777000
},
"lastModified": {
"time": 1530119777000
}
},
"costType": "CPC",
"connectedTelevisionOnly": false,
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "1800",
"currencyCode": "USD"
},
"id": 141049524,
"locale": {
"country": "US",
"language": "en"
},
"name": "Campaign Sponsored update B",
"offsiteDeliveryEnabled": false,
"optimizationPreference": {
"frequencyOptimizationPreference": {
"timeSpan": {
"duration": 7,
"unit": "DAY"
},
"optimizationType": "MAX_FREQUENCY",
"frequency": 10
}
},
"optimizationTargetType": "NONE",
"test": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"servingStatuses": [
"ACCOUNT_SERVING_HOLD"
],
"status": "ACTIVE",
"targeting": {
"includedTargetingFacets": {
"employers": [
"urn:li:organization:0000"
],
"interfaceLocales": [
{
"country": "US",
"language": "en"
}
],
"locations": [
"urn:li:geo:103644278"
]
}
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:employers": [
"urn:li:company:0000"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"version": {
"versionTag": "1"
}
}
{
"account": "urn:li:sponsoredAccount:506289162",
"associatedEntity": "urn:li:organization:2414183",
"audienceExpansionEnabled": false,
"campaignGroup": "urn:li:sponsoredCampaignGroup:602277684",
"changeAuditStamps": {
"created": {
"time": 1530119777000
},
"lastModified": {
"time": 1530119777000
}
},
"costType": "CPC",
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "1800",
"currencyCode": "USD"
},
"id": 141049524,
"locale": {
"country": "US",
"language": "en"
},
"name": "Campaign Sponsored update B",
"offsiteDeliveryEnabled": false,
"optimizationPreference": {
"frequencyOptimizationPreference": {
"timeSpan": {
"duration": 7,
"unit": "DAY"
},
"optimizationType": "MAX_FREQUENCY",
"frequency": 10
}
},
"optimizationTargetType": "NONE",
"test": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"servingStatuses": [
"ACCOUNT_SERVING_HOLD"
],
"status": "ACTIVE",
"targeting": {
"includedTargetingFacets": {
"employers": [
"urn:li:organization:0000"
],
"interfaceLocales": [
{
"country": "US",
"language": "en"
}
],
"locations": [
"urn:li:geo:103644278"
]
}
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:employers": [
"urn:li:company:0000"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"version": {
"versionTag": "1"
}
}
{
"account": "urn:li:sponsoredAccount:506289162",
"associatedEntity": "urn:li:organization:2414183",
"audienceExpansionEnabled": false,
"campaignGroup": "urn:li:sponsoredCampaignGroup:602277684",
"changeAuditStamps": {
"created": {
"time": 1530119777000
},
"lastModified": {
"time": 1530119777000
}
},
"costType": "CPC",
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "1800",
"currencyCode": "USD"
},
"id": 141049524,
"locale": {
"country": "US",
"language": "en"
},
"name": "Campaign Sponsored update B",
"offsiteDeliveryEnabled": false,
"optimizationTargetType": "NONE",
"test": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"servingStatuses": [
"ACCOUNT_SERVING_HOLD"
],
"status": "ACTIVE",
"targeting": {
"includedTargetingFacets": {
"employers": [
"urn:li:organization:0000"
],
"interfaceLocales": [
{
"country": "US",
"language": "en"
}
],
"locations": [
"urn:li:geo:103644278"
]
}
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:employers": [
"urn:li:company:0000"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"version": {
"versionTag": "1"
}
}
Search for Campaigns
Note
From 202401 version and above, we have moved from index based pagination to cursor based pagination for our search APIs.
Cursor based Pagination for search APIs
The adCampaigns API implements cursor based pagination using the pageSize and pageToken parameters for search method. The max allowed pageSize is 1000.
- pageSize governs the number of requested entities.
- pageToken is used to get the next set of results.
- nextPageToken is returned in metadata field of the search response.
- This should be passed in pageToken query parameter in the request to get the next page of results.
You can search for campaigns by ID, campaign group, name, type, and status fields. Search criteria is mandatory and can be chained together for increased granularity.
If you are using the Search for Campaigns endpoint and the response returns more than 1,000 campaigns, the API returns a 400
error with the following message:
{"message":"Request would return too many entities. ","status":400}
If more than 1,000 campaigns need to be pulled, set a pageSize parameter value of less than 1,000 to pull less than 1,000 campaigns per call and paginate through the full list of campaigns using pageToken.
Note
This call may return both test and non-test campaigns.
To search for non-test campaigns only, filter out the test campaigns by specifying search.test=False
If you would like to search only test campaigns, specify search.test=True
.
GET https://api.linkedin.com/rest/adAccounts/{adAccountId}/adCampaigns?q=search&search=(searchCriteria:(values:List(searchValue)))
Parameters
Field Name | Required | Description |
---|---|---|
search.campaignGroup.values | no | Searches for campaigns associated with the provided sponsored CampaignGroup URNs list. For example, urn:li:sponsoredCampaignGroup:{campaignGroupId} . |
search.associatedEntity.values | no | Searches for campaigns by associated entity. |
search.id.values | no | Searches for campaign by ID. For example, urn:li:sponsoredCampaign:{campaignId} |
search.status.values | no | Searches for campaigns with the provided status. The possible values are: |
search.type.values | no | Searches for campaigns with the provided status. The possible values are: |
search.name.values | no | Searches for campaigns by name. |
search.test | no | Searches for campaigns based on test or non-test status. |
sortOrder | no | Specifies the sort order of the results. Results will be sorted by campaign id. Supported values include: |
pageSize | no | Specifies the number of entities to be returned. The default is 100. Max is 1000. |
pageToken | no | Unique key representing the last entity of the response. This is to be used to fetch the next set of entities. If less than pageSize entities are returned in the current response, pageToken will be null |
Field Name | Required | Description |
---|---|---|
search.campaignGroup.values | no | Searches for campaigns associated with the provided sponsored CampaignGroup URNs list. For example, urn:li:sponsoredCampaignGroup:{campaignGroupId} . |
search.associatedEntity.values | no | Searches for campaigns by associated entity. |
search.id.values | no | Searches for campaign by ID. |
search.status.values | no | Searches for campaigns with the provided status. The possible values are: |
search.type.values | no | Searches for campaigns with the provided status. The possible values are: |
search.name.values | no | Searches for campaigns by name. |
search.test | no | Searches for campaigns based on test or non-test status. |
sort.field | no, default=ID | Field to sort search results by. Possible values are: |
sort.order | no, default=ASCENDING | Results sort order. Possible values are: |
Sample Request
The following example searches for all SPONSORED_UPDATES
campaigns in ACTIVE
status. The results are ordered by id
in descending order.
Sample Response
{
"elements": [
{
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:employers": [
"urn:li:company:1035"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
}
]
}
},
"servingStatuses": [
"ACCOUNT_SERVING_HOLD"
],
"type": "SPONSORED_UPDATES",
"locale": {
"country": "US",
"language": "en"
},
"version": {
"versionTag": "1"
},
"associatedEntity": "urn:li:organization:2414183",
"test": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targeting": {
"includedTargetingFacets": {
"employers": [
"urn:li:organization:1035"
],
"locations": [
"urn:li:geo:103644278"
],
"interfaceLocales": [
{
"country": "US",
"language": "en"
}
]
}
},
"optimizationPreference": {
"frequencyOptimizationPreference": {
"timeSpan": {
"duration": 7,
"unit": "DAY"
},
"optimizationType": "MAX_FREQUENCY",
"frequency": 10
}
},
"optimizationTargetType": "NONE",
"changeAuditStamps": {
"created": {
"time": 1543365082000
},
"lastModified": {
"time": 1543365082000
}
},
"campaignGroup": "urn:li:sponsoredCampaignGroup:603030884",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"creativeSelection": "OPTIMIZED",
"costType": "CPC",
"name": "Campaign Sponsored update B",
"offsiteDeliveryEnabled": false,
"id": 145282384,
"audienceExpansionEnabled": false,
"account": "urn:li:sponsoredAccount:506333826",
"status": "ACTIVE"
}
],
"metadata": {
"nextPageToken": "DgGerr1iVQreCJVjZDOW_grcp63nueBDipsS4DJpvJo"
}
}
API Call to get the next set of results would use the nextPageToken passed in the response above.
GET https://api.linkedin.com/rest/adAccounts/506333826/adCampaigns?q=search&search=(type:(values:List(SPONSORED_UPDATES)),status:(values:List(ACTIVE)))&sortOrder:DESCENDING&pageToken=DgGerr1iVQreCJVjZDOW_grcp63nueBDipsS4DJpvJo
::: moniker-end
GET https://api.linkedin.com/rest/adAccounts/506333826/adCampaigns?q=search&search=(type:(values:List(SPONSORED_UPDATES)),status:(values:List(ACTIVE)))&sort=(field:ID,order:DESCENDING)
Sample Response
{
"elements": [
{
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:employers": [
"urn:li:company:1035"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
}
]
}
},
"servingStatuses": [
"ACCOUNT_SERVING_HOLD"
],
"type": "SPONSORED_UPDATES",
"locale": {
"country": "US",
"language": "en"
},
"version": {
"versionTag": "1"
},
"associatedEntity": "urn:li:organization:2414183",
"test": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targeting": {
"includedTargetingFacets": {
"employers": [
"urn:li:organization:1035"
],
"locations": [
"urn:li:geo:103644278"
],
"interfaceLocales": [
{
"country": "US",
"language": "en"
}
]
}
},
"optimizationTargetType": "NONE",
"changeAuditStamps": {
"created": {
"time": 1543365082000
},
"lastModified": {
"time": 1543365082000
}
},
"campaignGroup": "urn:li:sponsoredCampaignGroup:603030884",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"creativeSelection": "OPTIMIZED",
"costType": "CPC",
"name": "Campaign Sponsored update B",
"offsiteDeliveryEnabled": false,
"id": 145282384,
"audienceExpansionEnabled": false,
"account": "urn:li:sponsoredAccount:506333826",
"status": "ACTIVE"
}
],
"paging": {
"total": 250,
"count": 10,
"start": 0,
"links": []
}
}
Update a Campaign
When you perform a partial update, the header X-RestLi-Method
must be included in the request and set to PARTIAL_UPDATE
.
Sample Request
The following sample request updates campaign targeting. Targeting criteria for a campaign can be changed at any time. You can modify criteria based on the current campaign performance.
Note
The facet interfaceLocales
is required when you update the campaign targeting. Also, you must use either locations
OR profileLocations
. You cannot use both.
POST https://api.linkedin.com/rest/adAccounts/{adAccountId}/adCampaigns/{campaignID}
{
"patch": {
"$set": {
"targetingCriteria": {
"exclude": {
"or": {
"urn:li:adTargetingFacet:employers": [
"urn:li:company:0000",
"urn:li:company:1035"
],
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:102095887"
]
}
},
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:industries": [
"urn:li:industry:8",
"urn:li:industry:9"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278",
"urn:li:geo:101174742"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
}
]
}
}
}
}
}
Sample Request
Additionally, you can update your campaign bid amounts and the daily budget as seen in the following example:
POST https://api.linkedin.com/rest/adAccounts/{adAccountId}/adCampaigns/{campaignID}
{
"patch": {
"$set": {
"dailyBudget": {
"amount": "30.0",
"currencyCode": "USD"
},
"totalBudget": {
"amount": "300.00",
"currencyCode": "USD"
}
}
}
}
Sample Request
You can update a campaign to remove the total budget which equates to an unlimited budget.
POST https://api.linkedin.com/rest/adAccounts/{adAccountId}/adCampaigns/{campaignID}
{
"patch": {
"$delete": [
"totalBudget"
]
}
}
Reactivate a Completed Campaign
To reactivate a campaign with COMPLETED
status, update the status
and end
timestamp values. You must also pass in start
, which is an immutable field and therefore must represent the original start time of the campaign.
POST https://api.linkedin.com/rest/adAccounts/{adAccountId}/adCampaigns/{campaignID}
{
"patch": {
"$set": {
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"status": "ACTIVE"
}
}
}
Archive a Campaign
To archive a campaign when it has ended or needs to be canceled, update the status
parameter.
POST https://api.linkedin.com/rest/adAccounts/{adAccountId}/adCampaigns/{campaignID}
{
"patch": {
"$set": {
"status": "ARCHIVED"
}
}
}
Delete a Campaign
A Campaign can be deleted. Use DELETE method to delete a DRAFT
campaign. To start the process of deleting non DRAFT campaign, update the status to PENDING_DELETION
.
Sample Request
To delete DRAFT campaign:
DELETE https://api.linkedin.com/rest/adAccounts/{adAccountId}/adCampaigns/{campaignID}
To delete non DRAFT campaign:
POST https://api.linkedin.com/rest/adAccounts/{adAccountId}/adCampaigns/{campaignID}
{
"patch": {
"$set": {
"status": "PENDING_DELETION"
}
}
}
A successful response returns a 204 code.
Batch Operations for Campaigns
Batch operations may only be performed on entities that belong to the same Ad Account.
Batch Create Campaigns
Campaigns can be created in bulk by using the Batch Create endpoint. The request body should contain an elements
array that contains each campaign you would like to create.
When you bulk create ad campaigns, the header X-RestLi-Method
must be included in the request and set to BATCH_CREATE
.
POST https://api.linkedin.com/rest/adAccounts/507557938/adCampaigns
{
"elements": [
{
"account": "urn:li:sponsoredAccount:507557938",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"associatedEntity": "urn:li:organization:5522289",
"audienceExpansionEnabled": false,
"costType": "CPC",
"connectedTelevisionOnly": false,
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"locale": {
"country": "US",
"language": "en"
},
"name": "Campaign Text ads A",
"offsiteDeliveryEnabled": false,
"optimizationPreference": {
"frequencyOptimizationPreference": {
"timeSpan": {
"duration": 7,
"unit": "DAY"
},
"optimizationType": "MAX_FREQUENCY",
"frequency": 10
}
},
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
}
]
}
},
"type": "TEXT_AD",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"status": "ACTIVE"
}
]
}
POST https://api.linkedin.com/rest/adAccounts/507557938/adCampaigns
{
"elements": [
{
"account": "urn:li:sponsoredAccount:507557938",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"associatedEntity": "urn:li:organization:5522289",
"audienceExpansionEnabled": false,
"costType": "CPC",
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"locale": {
"country": "US",
"language": "en"
},
"name": "Campaign Text ads A",
"offsiteDeliveryEnabled": false,
"optimizationPreference": {
"frequencyOptimizationPreference": {
"timeSpan": {
"duration": 7,
"unit": "DAY"
},
"optimizationType": "MAX_FREQUENCY",
"frequency": 10
}
},
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
}
]
}
},
"type": "TEXT_AD",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"status": "ACTIVE"
}
]
}
POST https://api.linkedin.com/rest/adAccounts/507557938/adCampaigns
{
"elements": [
{
"account": "urn:li:sponsoredAccount:507557938",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"associatedEntity": "urn:li:organization:5522289",
"audienceExpansionEnabled": false,
"costType": "CPC",
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"locale": {
"country": "US",
"language": "en"
},
"name": "Campaign Text ads A",
"offsiteDeliveryEnabled": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
}
]
}
},
"type": "TEXT_AD",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"status": "ACTIVE"
}
]
}
Batch Get Campaigns
Multiple campaigns can be fetched in a single call by chaining together multiple ids
. All requested campaigns must belong to the same Ad Account.
GET https://api.linkedin.com/rest/adAccounts/506289162/adCampaigns?ids=List(337643194,141049524)
Sample Response
{
"errors": {
"337643194": {
"message": "Not Found.",
"status": 404
}
},
"results": {
"141049524": {
"account": "urn:li:sponsoredAccount:506289162",
"associatedEntity": "urn:li:organization:2414183",
"audienceExpansionEnabled": false,
"campaignGroup": "urn:li:sponsoredCampaignGroup:602277684",
"changeAuditStamps": {
"created": {
"time": 1530119777000
},
"lastModified": {
"time": 1530132904000
}
},
"costType": "CPC",
"connectedTelevisionOnly": false,
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"id": 141049524,
"locale": {
"country": "US",
"language": "en"
},
"name": "Campaign Sponsored update B",
"offsiteDeliveryEnabled": false,
"optimizationTargetType": "NONE",
"test": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"servingStatuses": [
"ACCOUNT_SERVING_HOLD"
],
"status": "ACTIVE",
"targeting": {
"excludedTargetingFacets": {
"employers": [
"urn:li:organization:1035",
"urn:li:organization:0000"
],
"locations": [
"urn:li:geo:102095887"
]
},
"includedTargetingFacets": {
"industries": [
"urn:li:industry:8",
"urn:li:industry:9"
],
"interfaceLocales": [
{
"country": "US",
"language": "en"
}
],
"locations": [
"urn:li:geo:101174742",
"urn:li:geo:103644278"
]
}
},
"targetingCriteria": {
"exclude": {
"or": {
"urn:li:adTargetingFacet:employers": [
"urn:li:company:1035",
"urn:li:company:0000"
],
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:102095887"
]
}
},
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:101174742",
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:industries": [
"urn:li:industry:8",
"urn:li:industry:9"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"version": {
"versionTag": "2"
}
}
},
"statuses": {
"337643194": 404
}
}
{
"errors": {
"337643194": {
"message": "Not Found.",
"status": 404
}
},
"results": {
"141049524": {
"account": "urn:li:sponsoredAccount:506289162",
"associatedEntity": "urn:li:organization:2414183",
"audienceExpansionEnabled": false,
"campaignGroup": "urn:li:sponsoredCampaignGroup:602277684",
"changeAuditStamps": {
"created": {
"time": 1530119777000
},
"lastModified": {
"time": 1530132904000
}
},
"costType": "CPC",
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"id": 141049524,
"locale": {
"country": "US",
"language": "en"
},
"name": "Campaign Sponsored update B",
"offsiteDeliveryEnabled": false,
"optimizationTargetType": "NONE",
"test": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"servingStatuses": [
"ACCOUNT_SERVING_HOLD"
],
"status": "ACTIVE",
"targeting": {
"excludedTargetingFacets": {
"employers": [
"urn:li:organization:1035",
"urn:li:organization:0000"
],
"locations": [
"urn:li:geo:102095887"
]
},
"includedTargetingFacets": {
"industries": [
"urn:li:industry:8",
"urn:li:industry:9"
],
"interfaceLocales": [
{
"country": "US",
"language": "en"
}
],
"locations": [
"urn:li:geo:101174742",
"urn:li:geo:103644278"
]
}
},
"targetingCriteria": {
"exclude": {
"or": {
"urn:li:adTargetingFacet:employers": [
"urn:li:company:1035",
"urn:li:company:0000"
],
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:102095887"
]
}
},
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:101174742",
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:industries": [
"urn:li:industry:8",
"urn:li:industry:9"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"version": {
"versionTag": "2"
}
}
},
"statuses": {
"337643194": 404
}
}
Batch Update Campaigns
Multiple campaigns can be updated in a single call. The URL should include ids
for each campaign you would like to update. Additionally, the request body should define how each campaign should be updated as seen in the example below.
When you perform a batch partial update, the header X-RestLi-Method
must be included in the request and set to BATCH_PARTIAL_UPDATE
.
POST https://api.linkedin.com/rest/adAccounts/506289162/adCampaigns?ids=List(337643194,337643214)
{
"entities": {
"337643194": {
"patch": {
"$set": {
"status": "PAUSED"
}
}
},
"337643214": {
"patch": {
"$set": {
"status": "PAUSED"
}
}
}
}
}
Batch Delete Campaigns
Multiple campaigns can be deleted. Use DELETE method to delete DRAFT
campaigns. To start the process of deleting non DRAFT campaigns, update the status to PENDING_DELETION
.
Sample Request
To delete DRAFT campaigns:
DELETE https://api.linkedin.com/rest/adAccounts/{adAccountId}/adCampaigns?ids=List(campaign_id1,campaign_id2)
To delete non DRAFT campaigns:
POST https://api.linkedin.com/rest/adAccounts/{adAccountId}/adCampaigns?ids=List(campaign_id1,campaign_id2)
{
"entities": {
"CAMPAIGN_ID1": {
"patch": {
"$set": {
"status": "PENDING_DELETION"
}
}
},
"CAMPAIGN_ID2": {
"patch": {
"$set": {
"status": "PENDING_DELETION"
}
}
}
}
}
A successful response returns a 204 code.
Create a Campaign
POST https://api.linkedin.com/v2/adCampaignsV2
{
"account": "urn:li:sponsoredAccount:518121035",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled": false,
"costType": "CPC",
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"locale": {
"country": "US",
"language": "en"
},
"name": "Campaign Sponsored update B",
"offsiteDeliveryEnabled": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"status": "ACTIVE"
}
Budgeting
The following options are available for budgeting at the campaign level:
dailyBudget
- Campaigns run until the daily ad spend for the campaign has reached the daily budget limit. At midnight UTC, the daily budget resets and the campaign continues to run the next day.totalBudget
- Campaigns run until the total ad spend for the life of the campaign has reached the total budget limit. Deprecated for campaigns not using lifetime pacing.
If both daily budget and total budget are set for the campaign, the campaign runs until the ad spend has either reached daily spend limit and/or the total spend limit.
Dynamic Ads campaigns must set both daily and total budgets.
Targeting Discrimination Notice
Applications utilizing LinkedIn's targeting capabilities are required to display a notice in their user interface notifying advertisers that they cannot use LinkedIn to discriminate against members based on personal characteristics. The notice should include the following text:
"LinkedIn tools may not be used to discriminate based on personal characteristics such as gender, age, race, or ethnicity.Learn more."
Lifetime Pacing
Lifetime Pacing provides advertisers a budget option that enables running a campaign according to a projected budget based on the predicted spend curve throughout the campaign's lifetime. Creating a spending strategy in this manner optimizes advertiser return on investment (ROI) value.
As an example, advertisers can simply set a lifetime budget of $10,000, and run a campaign for one month. With Lifetime Pacing, LinkedIn's delivery system can figure out how to spend the budget efficiently based on the supply curve during the allocated month time period. To illustrate this efficiency, the campaign would spend less on a Saturday when fewer LinkedIn member use the site, but more on a Monday when more members are viewing the site.
While the lifetime budget is a new spending option, we permit advertisers to use other budget options including the "set daily budget alone" or "set both daily budget and lifetime budget" to accommodate their different requirements.
Benefits of Lifetime Pacing
For all LinkedIn advertisers, Lifetime Pacing delivers the lifetime budget throughout the campaign lifetime to improve advertiser ROI, stabilize the cost per result value, and simplify campaign creation and optimization by leveraging advanced pacing, forecasting, and machine learning techniques.
To enable Lifetime Pacing, set the pacingStrategy
to LIFETIME
.
The four strategies one can use are a daily budget with:
- A continuous schedule.
- A fixed schedule.
- A total budget with a fixed schedule.
- A total budget with continuous schedule.
Use a Daily Budget with a Continuous Schedule
To use this option, set dailyBudget
and runSchedule.start
. By using a daily budget with a continuous schedule, the advantage is you have great spend control while running a non-stop campaign. In this approach, LinkedIn may charge you up to 150% of your daily budget if there’re great opportunities in the auction for you on a single day.
Use a Daily Budget with a Fixed Schedule
To use this option, set dailyBudget
, runSchedule.start
and runSchedule.end
. By using a daily budget with a fixed schedule that has an explicit end date, the advantage is Lifetime Pacing will pace your lifetime budget (daily budget X days of the campaign flight time) in order to to get the optimal ROI for you. In this approach, LinkedIn may charge you up to 150% of your daily budget if there’re great opportunities in the auction for you on a single day. Also, this approach spends in total no more than an amount equal to the following value: (the total number of days of the campaign flight time X the daily budget).
Use a Total Budget with a Fixed Schedule
To use this option, set totalBudget
, runSchedule.start
and runSchedule.end
. By using a total budget with a fixed schedule that has a specific end date for spending, the advantage is Lifetime Pacing will pace your lifetime budget to obtain optimal results. In this approach, you spend no more than the full budget for the lifetime of the campaign. LinkedIn applies the budget optimally through the campaign lifetime up to the specified final day to maximize ROI.
Use a Daily Budget and a Total Budget with a Continuous Schedule
To use this option, set dailyBudget
, totalBudget
and runSchedule.start
. By using a daily budget and a total budget with a continuous schedule without an end date, the advantage is that you have the maximum control of your spending for both the daily and lifetime budget approaches.
In this approach, LinkedIn may charge you up to 150% of your daily budget if there are strong opportunities in the auction for you on a given day. Also, this approach spends in total no more than the total budget value you specify. The campaign stops as soon as the budget is depleted.
Optimization of Campaigns
optimizationTargetType
is used to optimize spending for a campaign. Depending on what value is populated in this field, the campaign enables either auto, manual, target cost, or cost cap bidding.
For auto-bidding campaigns created using legacy Objectives, the costType
is always CPM
. The unitCost
defaults to 0
. Note that there are no validations and can be set to any arbitrary high/low value.
If optimizationTargetType
is switched to a manual bidding, target cost, or cost cap bidding type, unitCost
should be set to a non-negative value appropriate to the dailyBudget
. For manual bidding, target cost, or cost cap bidding types, if unitCost
is 0
, the campaign will not deliver.
Warning
Failure to set the unitCost
correctly can lead to unexpected expenses.
LinkedIn recommends updating both unitCost
and optimizationTargetType
when switching.
If you want to optimize the campaign for spending, you must set the optimizationTargetType
to a target type.
Setting the optimizationTargetType
to one of the following keeps a campaign in manual bidding mode:
optimizationTargetType | Description |
---|---|
NONE | No optimization for this campaign. |
ENHANCED_CONVERSION | This is used for conversion tracking based bid adjustment. For example, if one campaign has a higher conversion rate for a particular member, higher bids for that specific member may be placed, and vice versa. |
Setting optimizationTargetType
to one of the following activates auto-bidding for the campaign:
optimizationTargetType | Description |
---|---|
MAX_IMPRESSION | Maximize the campaign's number of impressions and spend the daily budget without an advertiser specifying bid. |
MAX_CLICK | Maximize the campaign's number of clicks and spend the daily budget without an advertiser specifying bid. |
MAX_CONVERSION | Maximize the campaign's number of conversions and spend the daily budget without an advertiser specifying bid. |
MAX_VIDEO_VIEW | Maximize the campaign's number of video views and spend the daily budget without an advertiser specifying bid. |
MAX_LEAD | Maximize the campaign's number of leads and spend the daily budget without an advertiser specifying bid. |
MAX_REACH | Optimize towards the number of unique member accounts that are shown your ads and spend the daily budget without an advertiser specifying bid. |
The target cost bidding model enables you to set either a target cost per event or a desired optimal average cost per action. An event can be either an impression, click, or video view. LinkedIn maximizes the number of actions while maintaining the lifetime average cost per result around the advertiser specified target cost. A cost deviation range around the target cost can then be adjusted accordingly.
Setting one of the following options for optimizationTargetType
activates target cost bidding for the campaign:
optimizationTargetType | Cost Type | Description |
---|---|---|
TARGET_COST_PER_CLICK | CPC | Maintain a specified average bidding amount for each click by a user. |
TARGET_COST_PER_IMPRESSION | CPM | Maintain a specified average bidding amount for each event view or impression by a user. |
TARGET_COST_PER_VIDEO_VIEW | CPV | Maintain a specified average bidding amount for each video event view or impression by a user. |
Cost cap bidding enables you to set a cost cap for the maximum cost you would be willing to pay per action result. An action can be either an impression, click, video view, or lead. LinkedIn maximizes the number of actions while maintaining the lifetime average cost per result under the cost cap threshold.
Setting one of the following options for optimizationTargetType
activates cost cap bidding for a campaign. Note that costType
is CPM
for all of the options since cost cap bidding charges by impressions (same as auto-bidding).
optimizationTargetType | Cost Type | Description |
---|---|---|
CAP_COST_AND_MAXIMIZE_CLICKS | CPM | Maximize the campaign's number of impressions while keeping average cost per click under the advertiser-specified cost cap. |
CAP_COST_AND_MAXIMIZE_IMPRESSIONS | CPM | Maximize the campaign's number of impressions while keeping average cost per 1000 impressions under the advertiser-specified cost cap. |
CAP_COST_AND_MAXIMIZE_VIDEO_VIEWS | CPM | Maximize the campaign's number of impressions while keeping average cost per video view under the advertiser-specified cost cap. |
CAP_COST_AND_MAXIMIZE_LEADS | CPM | Maximize the campaign's number of leads while keeping average cost per lead under the advertiser-specified cost cap. |
Optimization based on ObjectiveType
LinkedIn delivers better results by mapping existing optimizations against a new, more complete set of objectives.
Bidding for objectives: Bid types, including automated bidding and maximum CPC bids, are aligned to your objective to bid more aggressively against audience more likely to take the action based on that objective.
Creative optimization for objectives: LinkedIn optimizes ads and creatives in rotation in order to better deliver on an advertiser’s objective.
The benefit is a more complete, end-to-end objective-based experience with streamlined bidding options that match the objectives.
There are 3 optimization types which can be mapped to their corresponding objectives:
- Automated bidding based on objectives
- Maximum CPC bidding based on objectives
- Optimized ad rotation based on objectives
Objective Group | Objective | Autobidding | Maximum CPC Bid | Maximum CPM Bid | Maximum CPV Bid |
Awareness | Brand awareness | Optimizes for reach or impressions | N/A | Optimizes for reach or impressions | N/A |
Consideration | Website visits | Optimizes for destination URL clicks | Optimizes for destination URL clicks | Optimizes for impressions | N/A |
Engagement | Optimizes for destination URL clicks | Optimizes for engagement | Optimizes for impressions | N/A | |
Video views | Optimizes for video views | N/A | Optimizes for impressions | Optimizes for video views | |
Conversions | Lead generation | Optimizes for lead gen submissions | Optimizes for lead gen submissions | Optimizes for impressions | N/A |
Website conversions | Optimizes for conversions | Optimizes for conversions | Optimizes for impressions | N/A | |
Job applicants | Optimizes for clicks to job ad | Optimizes for clicks to job ad | Optimizes for impressions | N/A |
Validations Based on Objective Type
During campaign creation, certain fields are expected to be set with specific values for each ObjectiveType
. These constraints are validated by the API.
Website Traffic and Creative Engagement have differing validation rules based on the selected optimizationTargetType
The following table lists the validations for each ObjectiveType
:
objective | campaign.format | Audience Expansion | LinkedIn Audience Network | Conversion tracking |
---|---|---|---|---|
Brand Awareness | STANDARD_UPDATE | optional | optional | optional |
CAROUSEL | optional | optional | optional | |
SINGLE_VIDEO | optional | optional | optional | |
TEXT | optional | Disallowed | optional | |
SPOTLIGHT | Disallowed | Disallowed | optional | |
FOLLOW_COMPANY | Disallowed | optional | REQUIRED | |
SPONSORED_MESSAGE | optional | Disallowed | optional | |
Video View | SINGLE_VIDEO | optional | optional | optional |
Lead Generation | STANDARD_UPDATE | optional | optional | optional |
SINGLE_VIDEO | optional | Disallowed | optional | |
CAROUSEL | optional | Disallowed | optional | |
SPONSORED_INMAIL | optional | Disallowed | optional | |
SPONSORED_MESSAGE | optional | Disallowed | optional | |
Website Conversion | STANDARD_UPDATE | optional | optional | optional |
SINGLE_VIDEO | optional | optional | REQUIRED | |
CAROUSEL | optional | optional | REQUIRED | |
TEXT | optional | Disallowed | REQUIRED | |
SPOTLIGHT | Disallowed | Disallowed | REQUIRED | |
SPONSORED_INMAIL | optional | Disallowed | REQUIRED | |
SPONSORED_MESSAGE | optional | Disallowed | REQUIRED | |
Website Visit | STANDARD_UPDATE | optional | optional | optional |
SINGLE_VIDEO | optional | optional | optional | |
CAROUSEL | optional | optional | optional | |
TEXT | optional | Disallowed | optional | |
SPOTLIGHT | Disallowed | Disallowed | optional | |
SPONSORED_INMAIL | optional | Disallowed | optional | |
SPONSORED_MESSAGE | optional | Disallowed | optional | |
Engagement | STANDARD_UPDATE | optional | optional | optional |
CAROUSEL | optional | optional | optional | |
SINGLE_VIDEO | optional | optional | optional | |
FOLLOW_COMPANY | Disallowed | Disallowed | optional | |
SPONSORED_MESSAGE | optional | optional | optional | |
Job Applicant | STANDARD_UPDATE | optional | optional | optional |
SPOTLIGHT | Disallowed | Disallowed | optional | |
JOBS | Disallowed | Disallowed | optional |
Note
The next two tables have varying requirements for Audience Expansion, LinkedIn Audience Network (LAN), and Conversion Tracking
Website Traffic
campaign.format | bidStrategy | optimizationTargetType | costType | Bid Type | Audience Expansion | LAN | Conversion Tracking |
STANDARD_UPDATE | AUTO | MAX_IMPRESSION | CPM | CPM | Optional | Optional | Optional |
AUTO | MAX_CLICK | CPM | CPC | ||||
AUTO | MAX_CONVERSION | CPM | CPC | Required | |||
CPC | ENHANCED_CONVERSION | CPC | CPC | ||||
CPC | NONE | CPC | CPC | Optional | |||
CPM | NONE | CPM | CPM | ||||
SINGLE_VIDEO | AUTO | MAX_IMPRESSION | CPM | CPM | Optional | Optional | Optional |
AUTO | MAX_CLICK | CPM | CPC | ||||
AUTO | MAX_CONVERSION | CPM | CPC | Required | |||
CPC | ENHANCED_CONVERSION | CPC | CPC | ||||
CPC | NONE | CPC | CPC | Optional | |||
CPM | NONE | CPM | CPM | ||||
CAROUSEL | AUTO | MAX_IMPRESSION | CPM | CPM | Optional | Disallowed | Optional |
AUTO | MAX_CLICK | CPM | CPC | ||||
AUTO | MAX_CONVERSION | CPM | CPC | Required | |||
CPC | ENHANCED_CONVERSION | CPC | CPC | ||||
CPC | NONE | CPC | CPC | Optional | |||
CPM | NONE | CPM | CPM | ||||
TEXT | CPC | NONE | CPC | CPC | Optional | Disallowed | Optional |
CPM | NONE | CPM | CPM | ||||
SPOTLIGHT | CPC | NONE | CPC | CPC | Disallowed | Disallowed | Optional |
CPM | NONE | CPM | CPM | ||||
FOLLOW_COMPANY | CPC | NONE | CPC | CPC | Disallowed | Disallowed | Optional |
CPM | NONE | CPM | CPM | ||||
SPONSORED_INMAIL | CPS(measured as CPM x 1000) | NONE | CPM | CPM | Optional | Disallowed | Optional |
SPONSORED_MESSAGE | CPS(measured as CPM x 1000) | NONE | CPM | CPM | Optional | Disallowed | Optional |
JOBS | CPM | NONE | CPM | CPM | Disallowed | Disallowed | Optional |
Creative Engagement
campaign.format | bidStrategy | optimizationTargetType | costType | Bid Type | Audience Expansion | LAN | Conversion Tracking |
STANDARD_UPDATE | AUTO | MAX_IMPRESSION | CPM | CPM | Optional | Optional | Optional |
AUTO | MAX_CLICK | CPM | CPC | ||||
AUTO | MAX_CONVERSION | CPM | CPC | Required | |||
CPC | ENHANCED_CONVERSION | CPC | CPC | ||||
CPC | NONE | CPC | CPC | Optional | |||
CPM | NONE | CPM | CPM | ||||
CAROUSEL | AUTO | MAX_IMPRESSION | CPM | CPM | Optional | Disallowed | Optional |
AUTO | MAX_CLICK | CPM | CPC | ||||
AUTO | MAX_CONVERSION | CPM | CPC | Required | |||
CPC | ENHANCED_CONVERSION | CPC | CPC | ||||
CPC | NONE | CPC | CPC | Optional | |||
CPM | NONE | CPM | CPM | ||||
SINGLE_VIDEO | AUTO | MAX_IMPRESSION | CPM | CPM | Optional | Optional | Optional |
AUTO | MAX_CLICK | CPM | CPC | ||||
AUTO | MAX_CONVERSION | CPM | CPC | Required | |||
CPC | ENHANCED_CONVERSION | CPC | CPC | ||||
CPC | NONE | CPC | CPC | Optional |
Campaigns optimizing for MAX_CONVERSION
must have a conversion associated with it to be activated. Campaigns of this type should be created and then associated with a conversion before activating. See Conversion Tracking for instructions on creating conversions and associating them with campaigns.
Lead Generation Campaigns
A special type of Sponsored Updates campaign is the Lead Generation campaign. To create one, set the objectiveType
to LEAD_GENERATION
. You cannot set offsiteDeliveryEnabled
to True
when using Lead Gen.
See the following sample request to create a Lead Generation campaign.
{
"account": "urn:li:sponsoredAccount:123456",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled": false,
"costType": "CPM",
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"locale": {
"country": "US",
"language": "en"
},
"name": "My LeadGen Campaign",
"objectiveType": "LEAD_GENERATION",
"offsiteDeliveryEnabled": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"status": "ACTIVE",
"targetingCriteria": {
"exclude": {
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:102095887"
]
}
},
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:segments": [
"urn:li:adSegment:259144"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "18",
"currencyCode": "USD"
}
}
Video Ad Campaigns
Video campaigns can be created with an objective to have as many views as possible. See the following example:
{
"account": "urn:li:sponsoredAccount:53333333341",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled": false,
"costType": "CPV",
"objectiveType": "VIDEO_VIEW",
"creativeSelection": "OPTIMIZED",
"locale": {"language": "en","country": "US"},
"name": "Video campaign Sponsored Update",
"format":"SINGLE_VIDEO",
"offsiteDeliveryEnabled": false,
"runSchedule": {
"start": 1520890990333,
"end": 1521754990333
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"dailyBudget": {
"currencyCode": "USD",
"amount": "18"
},
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"status": "ACTIVE"
}
Carousel Ad Campaigns
To create a Carousel Ad campaign, set type = SPONSORED_UPDATES
and format = CAROUSEL
. You can optionally set objectiveType
to WEBSITE_VISIT
or LEAD_GENERATION
. The default objective type for Sponsored Updates
is WEBSITE_VISIT
.
POST https://api.linkedin.com/v2/adCampaignsV2
{
"account": "urn:li:sponsoredAccount:123",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled": false,
"costType": "CPC",
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"format": "CAROUSEL",
"locale": {
"country": "US",
"language": "en"
},
"name": "Test Carousel Campaign",
"objectiveType": "WEBSITE_VISIT",
"offsiteDeliveryEnabled": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"status": "ACTIVE"
}
A successful response returns a 201 Created
HTTP status code and the ID in the x-linkedin-id
response header.
Dynamic Ad Campaigns
Dynamic Ads are personalized ads that are automatically populated with members' profile photo and other data dynamically pulled from their LinkedIn profiles. APIs are available for self-service campaign formats such as Follower Ads, Spotlight Ads, and Jobs Ads. The Content Ad format is only available for managed accounts and cannot be managed through the API or Campaign Manager. To learn more about Dynamic Ads, please see Dynamic Ads Overview.
Set type
as DYNAMIC
to create a Dynamic Ad Campaign. The following values are accepted for objectiveType
:
- WEBSITE_TRAFFIC
- WEBSITE_VISIT
- JOB_APPLICANT
- ENGAGEMENT
- WEBSITE_CONVERSION
- BRAND_AWARENESS
Note
All creatives under a Dynamic Ad campaign must have the same creative type.
The campaign format is a required field when set to campaign.type=DYNAMIC
.
Dynamic Ads campaigns must set both daily and total budgets.
POST https://api.linkedin.com/v2/adCampaignsV2
{
"account": "urn:li:sponsoredAccount:123",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"audienceExpansionEnabled":false,
"objectiveType": "WEBSITE_TRAFFIC",
"costType":"CPM",
"creativeSelection":"OPTIMIZED",
"locale":{
"language":"en",
"country":"US"
},
"name":"Test Dynamic Ad Campaign",
"offsiteDeliveryEnabled":false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
}
]
}
},
"type":"DYNAMIC",
"totalBudget":{
"currencyCode":"USD",
"amount":"100"
},
"dailyBudget":{
"currencyCode":"USD",
"amount":"50"
},
"unitCost":{
"amount":"15",
"currencyCode":"USD"
},
"status": "ACTIVE"
}
A successful response returns a 201 Created
HTTP status code with the ID in the x-linkedin-id
response header.
Get a Campaign
Campaigns can be retrieved individually by passing in their ID to the following endpoint:
Sample Response
{
"account": "urn:li:sponsoredAccount:506289162",
"associatedEntity": "urn:li:organization:2414183",
"audienceExpansionEnabled": false,
"campaignGroup": "urn:li:sponsoredCampaignGroup:602277684",
"changeAuditStamps": {
"created": {
"time": 1530119777000
},
"lastModified": {
"time": 1530119777000
}
},
"costType": "CPC",
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "1800",
"currencyCode": "USD"
},
"id": 141049524,
"locale": {
"country": "US",
"language": "en"
},
"name": "Campaign Sponsored update B",
"offsiteDeliveryEnabled": false,
"optimizationTargetType": "NONE",
"test": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"servingStatuses": [
"ACCOUNT_SERVING_HOLD"
],
"status": "ACTIVE",
"targeting": {
"includedTargetingFacets": {
"employers": [
"urn:li:organization:0000"
],
"interfaceLocales": [
{
"country": "US",
"language": "en"
}
],
"locations": [
"urn:li:geo:103644278"
]
}
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:employers": [
"urn:li:company:0000"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"version": {
"versionTag": "1"
}
}
Search for Campaigns
You can search for campaigns by ID, account, campaign group, name, type, and status fields. Search criteria can be chained together for increased granularity. If a search query is omitted, the API returns all the campaigns that the caller has access to.
If you are using the Search for Campaigns endpoint and the response returns more than 1,000 campaigns, the API returns a 400
error with the following message:
{"message":"Request would return too many entities. ","status":400}
If more than 1,000 campaigns need to be pulled, set a count parameter value of less than 1,000 to pull less than 1,000 campaigns per call and paginate through the full list of campaigns.
Note
This call may return both test and non-test campaigns.
To search for non-test campaigns only, filter out the test campaigns by specifying search.test=False
If you would like to search only test campaigns, specify search.test=True
.
GET https://api.linkedin.com/v2/adCampaignsV2?q=search&search.{searchCriteria}.values[0]={searchValue}
Parameters
Field Name | Required | Description |
---|---|---|
search.account.values | no | Searches for campaigns associated with the provided sponsored account URNs list |
search.campaignGroup.values | no | Searches for campaigns associated with the provided sponsored CampaignGroup URNs list. For example, urn:li:sponsoredCampaignGroup:{campaignGroupId} . |
search.associatedEntity.values | no | Searches for campaigns by associated entity. |
search.id.values | no | Searches for campaign by ID. |
search.status.values | no | Searches for campaigns with the provided status. The possible values are: |
search.type.values | no | Searches for campaigns with the provided status. The possible values are: |
search.name.values | no | Searches for campaigns by name. |
search.test | no | Searches for campaigns based on test or non-test status. |
sort.field | no, default=ID | Field to sort search results by. Possible values are: |
sort.order | no, default=ASCENDING | Results sort order. Possible values are: |
Sample Request
The following example searches for all SPONSORED_UPDATES
campaigns in ACTIVE
status. The results are ordered by id
in descending order.
GET https://api.linkedin.com/v2/adCampaignsV2?q=search&search.type.values[0]=SPONSORED_UPDATES&search.status.values[0]=ACTIVE&sort.field=ID&sort.order=DESCENDING
Sample Response
{
"elements": [
{
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:employers": [
"urn:li:company:1035"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
}
]
}
},
"servingStatuses": [
"ACCOUNT_SERVING_HOLD"
],
"type": "SPONSORED_UPDATES",
"locale": {
"country": "US",
"language": "en"
},
"version": {
"versionTag": "1"
},
"associatedEntity": "urn:li:organization:2414183",
"test": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targeting": {
"includedTargetingFacets": {
"employers": [
"urn:li:organization:1035"
],
"locations": [
"urn:li:geo:103644278"
],
"interfaceLocales": [
{
"country": "US",
"language": "en"
}
]
}
},
"optimizationTargetType": "NONE",
"changeAuditStamps": {
"created": {
"time": 1543365082000
},
"lastModified": {
"time": 1543365082000
}
},
"campaignGroup": "urn:li:sponsoredCampaignGroup:603030884",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"creativeSelection": "OPTIMIZED",
"costType": "CPC",
"name": "Campaign Sponsored update B",
"offsiteDeliveryEnabled": false,
"id": 145282384,
"audienceExpansionEnabled": false,
"account": "urn:li:sponsoredAccount:506333826",
"status": "ACTIVE"
},
],
"paging": {
"total": 250,
"count": 10,
"start": 0,
"links": []
}
}
Update a Campaign
When you perform a partial update, the header X-RestLi-Method
must be included in the request and set to PARTIAL_UPDATE
.
Sample Request
The following sample request updates campaign targeting. Targeting criteria for a campaign can be changed at any time. You can modify criteria based on the current campaign performance.
Note
The facet interfaceLocales
is required when you update the campaign targeting. Also, you must use either locations
OR profileLocations
. You cannot use both.
POST https://api.linkedin.com/v2/adCampaignsV2/{campaignID}
{
"patch": {
"$set": {
"targetingCriteria": {
"exclude": {
"or": {
"urn:li:adTargetingFacet:employers": [
"urn:li:company:0000",
"urn:li:company:1035"
],
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:102095887"
]
}
},
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:industries": [
"urn:li:industry:8",
"urn:li:industry:9"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278",
"urn:li:geo:101174742"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
}
]
}
}
}
}
}
Sample Request
Additionally, you can update your campaign bid amounts and the daily budget as seen in the following example:
POST https://api.linkedin.com/v2/adCampaignsV2/{campaignID}
{
"patch": {
"$set": {
"dailyBudget": {
"amount": "30.0",
"currencyCode": "USD"
},
"totalBudget": {
"amount": "300.00",
"currencyCode": "USD"
}
}
}
}
Sample Request
You can update a campaign to remove the total budget which equates to an unlimited budget.
POST https://api.linkedin.com/v2/adCampaignsV2/{campaignID}
{
"patch": {
"$delete": [
"totalBudget"
]
}
}
Reactivate a Completed Campaign
To reactivate a campaign with COMPLETED
status, update the status
and end
timestamp values. You must also pass in start
, which is an immutable field and therefore must represent the original start time of the campaign.
POST https://api.linkedin.com/v2/adCampaignsV2/{campaignID}
{
"patch": {
"$set": {
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"status": "ACTIVE"
}
}
}
Archive a Campaign
To archive a campaign when it has ended or needs to be canceled, update the status
parameter.
POST https://api.linkedin.com/v2/adCampaignsV2/{campaignID}
{
"patch": {
"$set": {
"status": "ARCHIVED"
}
}
}
Delete a Campaign
A Campaign can be deleted. Use DELETE method to delete a DRAFT
campaign. To start the process of deleting non DRAFT campaign, update the status to PENDING_DELETION
.
Sample Request
To delete DRAFT campaign:
DELETE https://api.linkedin.com/v2/adCampaignsV2/{campaignID}
To delete non DRAFT campaign:
POST https://api.linkedin.com/v2/adCampaignsV2/{campaignID}
{
"patch": {
"$set": {
"status": "PENDING_DELETION"
}
}
}
A successful response returns a 204 code.
Batch Operations for Campaigns
Batch operations may only be performed on entities that belong to the same Ad Account.
Batch Create Campaigns
Campaigns can be created in bulk by using the Batch Create endpoint. The request body should contain an elements
array that contains each campaign you would like to create.
When you bulk create ad campaigns, the header X-RestLi-Method
must be included in the request and set to BATCH_CREATE
.
POST https://api.linkedin.com/v2/adCampaignsV2
{
"elements": [
{
"account": "urn:li:sponsoredAccount:507557938",
"campaignGroup": "urn:li:sponsoredCampaignGroup:635137195",
"associatedEntity": "urn:li:organization:5522289",
"audienceExpansionEnabled": false,
"costType": "CPC",
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"locale": {
"country": "US",
"language": "en"
},
"name": "Campaign Text ads A",
"offsiteDeliveryEnabled": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"targetingCriteria": {
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
}
]
}
},
"type": "TEXT_AD",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"status": "ACTIVE"
}
]
}
Batch Get Campaigns
Multiple campaigns can be fetched in a single call by chaining together multiple ids
. All requested campaigns must belong to the same Ad Account.
GET https://api.linkedin.com/v2/adCampaignsV2?ids[0]=337643194&ids[1]=141049524
Sample Response
{
"errors": {
"337643194": {
"message": "Not Found.",
"status": 404
}
},
"results": {
"141049524": {
"account": "urn:li:sponsoredAccount:506289162",
"associatedEntity": "urn:li:organization:2414183",
"audienceExpansionEnabled": false,
"campaignGroup": "urn:li:sponsoredCampaignGroup:602277684",
"changeAuditStamps": {
"created": {
"time": 1530119777000
},
"lastModified": {
"time": 1530132904000
}
},
"costType": "CPC",
"creativeSelection": "OPTIMIZED",
"dailyBudget": {
"amount": "18",
"currencyCode": "USD"
},
"id": 141049524,
"locale": {
"country": "US",
"language": "en"
},
"name": "Campaign Sponsored update B",
"offsiteDeliveryEnabled": false,
"optimizationTargetType": "NONE",
"test": false,
"runSchedule": {
"end": 9876543210123,
"start": 1234567890987
},
"servingStatuses": [
"ACCOUNT_SERVING_HOLD"
],
"status": "ACTIVE",
"targeting": {
"excludedTargetingFacets": {
"employers": [
"urn:li:organization:1035",
"urn:li:organization:0000"
],
"locations": [
"urn:li:geo:102095887"
]
},
"includedTargetingFacets": {
"industries": [
"urn:li:industry:8",
"urn:li:industry:9"
],
"interfaceLocales": [
{
"country": "US",
"language": "en"
}
],
"locations": [
"urn:li:geo:101174742",
"urn:li:geo:103644278"
]
}
},
"targetingCriteria": {
"exclude": {
"or": {
"urn:li:adTargetingFacet:employers": [
"urn:li:company:1035",
"urn:li:company:0000"
],
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:102095887"
]
}
},
"include": {
"and": [
{
"or": {
"urn:li:adTargetingFacet:locations": [
"urn:li:geo:101174742",
"urn:li:geo:103644278"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:interfaceLocales": [
"urn:li:locale:en_US"
]
}
},
{
"or": {
"urn:li:adTargetingFacet:industries": [
"urn:li:industry:8",
"urn:li:industry:9"
]
}
}
]
}
},
"type": "SPONSORED_UPDATES",
"unitCost": {
"amount": "15",
"currencyCode": "USD"
},
"version": {
"versionTag": "2"
}
}
},
"statuses": {
"337643194": 404
}
}
Batch Update Campaigns
Multiple campaigns can be updated in a single call. The URL should include ids
for each campaign you would like to update. Additionally, the request body should define how each campaign should be updated as seen in the example below.
When you perform a batch partial update, the header X-RestLi-Method
must be included in the request and set to BATCH_PARTIAL_UPDATE
.
POST https://api.linkedin.com/v2/adCampaignsV2?ids[0]=337643194&ids[1]=337643214
{
"entities": {
"337643194": {
"patch": {
"$set": {
"status": "PAUSED"
}
}
},
"337643214": {
"patch": {
"$set": {
"status": "PAUSED"
}
}
}
}
}
Batch Delete Campaigns
Multiple campaigns can be deleted. Use DELETE method to delete DRAFT
campaigns. To start the process of deleting non DRAFT campaigns, update the status to PENDING_DELETION
.
Sample Request
To delete DRAFT campaigns:
DELETE https://api.linkedin.com/v2/adCampaignsV2?ids[0]=CAMPAIGN_ID1&ids[1]=CAMPAIGN_ID2
To delete non DRAFT campaigns:
POST https://api.linkedin.com/v2/adCampaignsV2?ids[0]=CAMPAIGN_ID1&ids[1]=CAMPAIGN_ID2
{
"entities": {
"CAMPAIGN_ID1": {
"patch": {
"$set": {
"status": "PENDING_DELETION"
}
}
},
"CAMPAIGN_ID2": {
"patch": {
"$set": {
"status": "PENDING_DELETION"
}
}
}
}
}
A successful response returns a 204 code.