Create and Manage Campaigns

Warning

Deprecation Notice
The Marketing version 202304 (Marketing April 2023) and below has been sunset and the unversioned APIs are going to 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 with rw_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:

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
  • CPM- Cost per thousand advertising impressions. If type=SPONSORED_INMAILS; cost per send(CPS) is measured as CPM x 1000.
  • CPC- Cost per individual click on the associated link.
  • CPV- Cost per view for video ads.
  • True False
    creativeSelection CampaignCreativeSelection, default="OPTIMIZED"
  • ROUND_ROBIN - Rotate through available creatives to serve them as evenly as possible.
  • OPTIMIZED - Bias selection taking into account such as expected performance. Not available for Message and Conversation Ads (type=SPONSORED_INMAILS).
  • 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
  • BRAND_AWARENESS
  • ENGAGEMENT
  • JOB_APPLICANTS
  • LEAD_GENERATION
  • WEBSITE_CONVERSIONS
  • WEBSITE_VISITS
  • VIDEO_VIEWS
  • 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
  • TEXT_AD - Text-based ads that show up in the right column or top of the page on LinkedIn.
  • SPONSORED_UPDATES - Native ads that promote a company's content updates in the LinkedIn feed.
  • SPONSORED_INMAILS - Personalized messages with a call-to-action button delivered to a LinkedIn's member inbox.
  • DYNAMIC - Ads that are dynamically personalized.
  • 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
  • ACTIVE - Denotes that the campaign is fully servable.
  • PAUSED - Denotes that the campaign meets all requirements to be served, but temporarily should not be.
  • ARCHIVED - Denotes that the campaign is presently inactive, and should mostly be hidden in the UI until un-archived.
  • COMPLETED - Denotes that the campaign has reached a specified budgetary or chronological limit.
  • CANCELED - Denotes that the campaign has been permanently canceled, such as when an advertising account is permanently closed.
  • DRAFT - Denotes that the campaign is still being edited and not eligible for serving. Some validation will be postponed until the campaign is activated.
  • PENDING_DELETION - Denotes that the campaign has been requested to be deleted that is currently pending.
  • REMOVED - Denotes that the campaign was deleted, but must remain fetchable due to the existence of performance data.
  • 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:
  • LIFETIME - Lifetime pacing that optimizes campaign budget delivery throughout campaign's lifetime.
  • 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:
  • RUNNABLE Campaign is eligible for serving.
  • STOPPED Campaign is currently not servable for reasons other than billing information, budgetary constraints, or termination dates. For instance, an campaign will be STOPPED if it has been PAUSED by the user.
  • ACCOUNT_TOTAL_BUDGET_HOLD Parent account total budget has been reached.
  • ACCOUNT_END_DATE_HOLD Parent account end date has been reached.
  • CAMPAIGN_START_DATE_HOLD Campaign start date is in the future.
  • CAMPAIGN_END_DATE_HOLD Campaign end date has been reached.
  • CAMPAIGN_TOTAL_BUDGET_HOLD Campaign total budget has been reached.
  • CAMPAIGN_AUDIENCE_COUNT_HOLD Campaign is on hold because it has an audience count lower than the threshold.
  • CAMPAIGN_GROUP_START_DATE_HOLD Campaign group start date is in the future.
  • CAMPAIGN_GROUP_END_DATE_HOLD Campaign Group end date is in the past.
  • CAMPAIGN_GROUP_TOTAL_BUDGET_HOLD Campaign group total budget has been reached.
  • CAMPAIGN_GROUP_STATUS_HOLD Campaign group status is on hold.
  • ACCOUNT_SERVING_HOLD Parent account is on hold and not eligible for serving.
  • 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 exclude this particular campaign from serving on those apps/websites.

    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}
    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}

    Create a Campaign

    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
    AwarenessBrand awarenessOptimizes for reach or impressionsN/AOptimizes for reach or impressions N/A
    ConsiderationWebsite visitsOptimizes for destination URL clicksOptimizes for destination URL clicksOptimizes for impressions N/A
    EngagementOptimizes for destination URL clicksOptimizes for engagementOptimizes for impressions N/A
    Video viewsOptimizes for video viewsN/AOptimizes for impressions Optimizes for video views
    ConversionsLead generationOptimizes for lead gen submissionsOptimizes for lead gen submissions Optimizes for impressions N/A
    Website conversionsOptimizes for conversionsOptimizes for conversionsOptimizes for impressions N/A
    Job applicantsOptimizes for clicks to job adOptimizes for clicks to job adOptimizes 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.formatbidStrategyoptimizationTargetTypecostTypeBid TypeAudience ExpansionLANConversion Tracking
    STANDARD_UPDATEAUTOMAX_IMPRESSIONCPMCPMOptionalOptionalOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    SINGLE_VIDEOAUTOMAX_IMPRESSIONCPMCPMOptionalOptionalOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    CAROUSELAUTOMAX_IMPRESSIONCPMCPMOptionalDisallowedOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    TEXTCPCNONECPCCPCOptionalDisallowedOptional
    CPMNONECPMCPM
    SPOTLIGHTCPCNONECPCCPCDisallowedDisallowedOptional
    CPMNONECPMCPM
    FOLLOW_COMPANYCPCNONECPCCPCDisallowedDisallowedOptional
    CPMNONECPMCPM
    SPONSORED_INMAILCPS(measured as CPM x 1000)NONECPMCPMOptionalDisallowedOptional
    SPONSORED_MESSAGECPS(measured as CPM x 1000)NONECPMCPMOptionalDisallowedOptional
    JOBSCPMNONECPMCPMDisallowedDisallowedOptional



    Creative Engagement

    campaign.formatbidStrategyoptimizationTargetTypecostTypeBid TypeAudience ExpansionLANConversion Tracking
    STANDARD_UPDATEAUTOMAX_IMPRESSIONCPMCPMOptionalOptionalOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    CAROUSELAUTOMAX_IMPRESSIONCPMCPMOptionalDisallowedOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    SINGLE_VIDEOAUTOMAX_IMPRESSIONCPMCPMOptionalOptionalOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional

    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"
    }
    

    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",
        "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/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",
        "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:
  • ACTIVE
  • PAUSED
  • ARCHIVED
  • COMPLETED
  • CANCELED
  • DRAFT
  • PENDING_DELETION
  • REMOVED
  • search.type.values no Searches for campaigns with the provided status. The possible values are:
  • TEXT_AD
  • SPONSORED_UPDATES
  • SPONSORED_INMAILS
  • DYNAMIC
  • search.name.values no Searches for campaigns by name.
    search.test no Searches for campaigns based on test or non-test status.
  • True: for test campaigns
  • False: for non-test campaigns If not specified, searches for both test and non-test campaigns.
  • sortOrder no Specifies the sort order of the results. Results will be sorted by campaign id. Supported values include:
  • ASCENDING
  • DESCENDING The default is "ASCENDING".
  • 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

    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/rest/adAccounts/{{account_id}}/adCampaigns?q=search&search=(type:(values:List(SPONSORED_UPDATES)),status:(values:List(ACTIVE)))&sortOrder=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"
            }
        ],
        "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
    

    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",
                "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",
                "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.

    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.

    Create a Campaign

    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
    AwarenessBrand awarenessOptimizes for reach or impressionsN/AOptimizes for reach or impressions N/A
    ConsiderationWebsite visitsOptimizes for destination URL clicksOptimizes for destination URL clicksOptimizes for impressions N/A
    EngagementOptimizes for destination URL clicksOptimizes for engagementOptimizes for impressions N/A
    Video viewsOptimizes for video viewsN/AOptimizes for impressions Optimizes for video views
    ConversionsLead generationOptimizes for lead gen submissionsOptimizes for lead gen submissions Optimizes for impressions N/A
    Website conversionsOptimizes for conversionsOptimizes for conversionsOptimizes for impressions N/A
    Job applicantsOptimizes for clicks to job adOptimizes for clicks to job adOptimizes 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.formatbidStrategyoptimizationTargetTypecostTypeBid TypeAudience ExpansionLANConversion Tracking
    STANDARD_UPDATEAUTOMAX_IMPRESSIONCPMCPMOptionalOptionalOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    SINGLE_VIDEOAUTOMAX_IMPRESSIONCPMCPMOptionalOptionalOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    CAROUSELAUTOMAX_IMPRESSIONCPMCPMOptionalDisallowedOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    TEXTCPCNONECPCCPCOptionalDisallowedOptional
    CPMNONECPMCPM
    SPOTLIGHTCPCNONECPCCPCDisallowedDisallowedOptional
    CPMNONECPMCPM
    FOLLOW_COMPANYCPCNONECPCCPCDisallowedDisallowedOptional
    CPMNONECPMCPM
    SPONSORED_INMAILCPS(measured as CPM x 1000)NONECPMCPMOptionalDisallowedOptional
    SPONSORED_MESSAGECPS(measured as CPM x 1000)NONECPMCPMOptionalDisallowedOptional
    JOBSCPMNONECPMCPMDisallowedDisallowedOptional



    Creative Engagement

    campaign.formatbidStrategyoptimizationTargetTypecostTypeBid TypeAudience ExpansionLANConversion Tracking
    STANDARD_UPDATEAUTOMAX_IMPRESSIONCPMCPMOptionalOptionalOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    CAROUSELAUTOMAX_IMPRESSIONCPMCPMOptionalDisallowedOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    SINGLE_VIDEOAUTOMAX_IMPRESSIONCPMCPMOptionalOptionalOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional

    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"
    }
    

    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",
        "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/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",
        "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, 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 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/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.
    search.status.values no Searches for campaigns with the provided status. The possible values are:
  • ACTIVE
  • PAUSED
  • ARCHIVED
  • COMPLETED
  • CANCELED
  • DRAFT
  • PENDING_DELETION
  • REMOVED
  • search.type.values no Searches for campaigns with the provided status. The possible values are:
  • TEXT_AD
  • SPONSORED_UPDATES
  • SPONSORED_INMAILS
  • DYNAMIC
  • search.name.values no Searches for campaigns by name.
    search.test no Searches for campaigns based on test or non-test status.
  • True: for test campaigns
  • False: for non-test campaigns If not specified, searches for both test and non-test campaigns.
  • sort.field no, default=ID Field to sort search results by. Possible values are:
  • ACTIVATION_TIME
  • ID
  • NAME
  • sort.order no, default=ASCENDING Results sort order. Possible values are:
  • ASCENDING
  • DESCENDING
  • 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/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",
                "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",
                "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/rest/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
    AwarenessBrand awarenessOptimizes for reach or impressionsN/AOptimizes for reach or impressions N/A
    ConsiderationWebsite visitsOptimizes for destination URL clicksOptimizes for destination URL clicksOptimizes for impressions N/A
    EngagementOptimizes for destination URL clicksOptimizes for engagementOptimizes for impressions N/A
    Video viewsOptimizes for video viewsN/AOptimizes for impressions Optimizes for video views
    ConversionsLead generationOptimizes for lead gen submissionsOptimizes for lead gen submissions Optimizes for impressions N/A
    Website conversionsOptimizes for conversionsOptimizes for conversionsOptimizes for impressions N/A
    Job applicantsOptimizes for clicks to job adOptimizes for clicks to job adOptimizes 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.formatbidStrategyoptimizationTargetTypecostTypeBid TypeAudience ExpansionLANConversion Tracking
    STANDARD_UPDATEAUTOMAX_IMPRESSIONCPMCPMOptionalOptionalOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    SINGLE_VIDEOAUTOMAX_IMPRESSIONCPMCPMOptionalOptionalOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    CAROUSELAUTOMAX_IMPRESSIONCPMCPMOptionalDisallowedOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    TEXTCPCNONECPCCPCOptionalDisallowedOptional
    CPMNONECPMCPM
    SPOTLIGHTCPCNONECPCCPCDisallowedDisallowedOptional
    CPMNONECPMCPM
    FOLLOW_COMPANYCPCNONECPCCPCDisallowedDisallowedOptional
    CPMNONECPMCPM
    SPONSORED_INMAILCPS(measured as CPM x 1000)NONECPMCPMOptionalDisallowedOptional
    SPONSORED_MESSAGECPS(measured as CPM x 1000)NONECPMCPMOptionalDisallowedOptional
    JOBSCPMNONECPMCPMDisallowedDisallowedOptional



    Creative Engagement

    campaign.formatbidStrategyoptimizationTargetTypecostTypeBid TypeAudience ExpansionLANConversion Tracking
    STANDARD_UPDATEAUTOMAX_IMPRESSIONCPMCPMOptionalOptionalOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    CAROUSELAUTOMAX_IMPRESSIONCPMCPMOptionalDisallowedOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    SINGLE_VIDEOAUTOMAX_IMPRESSIONCPMCPMOptionalOptionalOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional

    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"
    }
    

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

    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/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/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",
        "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/rest/adCampaigns?q=search&search=(searchCriteria:(values:List(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:
  • ACTIVE
  • PAUSED
  • ARCHIVED
  • COMPLETED
  • CANCELED
  • DRAFT
  • PENDING_DELETION
  • REMOVED
  • search.type.values no Searches for campaigns with the provided status. The possible values are:
  • TEXT_AD
  • SPONSORED_UPDATES
  • SPONSORED_INMAILS
  • DYNAMIC
  • search.name.values no Searches for campaigns by name.
    search.test no Searches for campaigns based on test or non-test status.
  • True: for test campaigns
  • False: for non-test campaigns If not specified, searches for both test and non-test campaigns.
  • sort.field no, default=ID Field to sort search results by. Possible values are:
  • ACCOUNT
  • ACTIVATION_TIME
  • ID
  • NAME
  • sort.order no, default=ASCENDING Results sort order. Possible values are:
  • ASCENDING
  • DESCENDING
  • 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/rest/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/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/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/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/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/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/adCampaigns/{campaignID}
    

    To delete non DRAFT campaign:

    POST https://api.linkedin.com/rest/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/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/adCampaigns?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/rest/adCampaigns?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/rest/adCampaigns?ids=List(campaign_id1,campaign_id2)
    

    To delete non DRAFT campaigns:

    POST https://api.linkedin.com/rest/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
    AwarenessBrand awarenessOptimizes for reach or impressionsN/AOptimizes for reach or impressions N/A
    ConsiderationWebsite visitsOptimizes for destination URL clicksOptimizes for destination URL clicksOptimizes for impressions N/A
    EngagementOptimizes for destination URL clicksOptimizes for engagementOptimizes for impressions N/A
    Video viewsOptimizes for video viewsN/AOptimizes for impressions Optimizes for video views
    ConversionsLead generationOptimizes for lead gen submissionsOptimizes for lead gen submissions Optimizes for impressions N/A
    Website conversionsOptimizes for conversionsOptimizes for conversionsOptimizes for impressions N/A
    Job applicantsOptimizes for clicks to job adOptimizes for clicks to job adOptimizes 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.formatbidStrategyoptimizationTargetTypecostTypeBid TypeAudience ExpansionLANConversion Tracking
    STANDARD_UPDATEAUTOMAX_IMPRESSIONCPMCPMOptionalOptionalOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    SINGLE_VIDEOAUTOMAX_IMPRESSIONCPMCPMOptionalOptionalOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    CAROUSELAUTOMAX_IMPRESSIONCPMCPMOptionalDisallowedOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    TEXTCPCNONECPCCPCOptionalDisallowedOptional
    CPMNONECPMCPM
    SPOTLIGHTCPCNONECPCCPCDisallowedDisallowedOptional
    CPMNONECPMCPM
    FOLLOW_COMPANYCPCNONECPCCPCDisallowedDisallowedOptional
    CPMNONECPMCPM
    SPONSORED_INMAILCPS(measured as CPM x 1000)NONECPMCPMOptionalDisallowedOptional
    SPONSORED_MESSAGECPS(measured as CPM x 1000)NONECPMCPMOptionalDisallowedOptional
    JOBSCPMNONECPMCPMDisallowedDisallowedOptional



    Creative Engagement

    campaign.formatbidStrategyoptimizationTargetTypecostTypeBid TypeAudience ExpansionLANConversion Tracking
    STANDARD_UPDATEAUTOMAX_IMPRESSIONCPMCPMOptionalOptionalOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    CAROUSELAUTOMAX_IMPRESSIONCPMCPMOptionalDisallowedOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional
    CPMNONECPMCPM
    SINGLE_VIDEOAUTOMAX_IMPRESSIONCPMCPMOptionalOptionalOptional
    AUTOMAX_CLICKCPMCPC
    AUTOMAX_CONVERSIONCPMCPCRequired
    CPCENHANCED_CONVERSIONCPCCPC
    CPCNONECPCCPCOptional

    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"
    }
    

    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:

    GET https://api.linkedin.com/v2/adCampaignsV2/{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",
        "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:
  • ACTIVE
  • PAUSED
  • ARCHIVED
  • COMPLETED
  • CANCELED
  • DRAFT
  • PENDING_DELETION
  • REMOVED
  • search.type.values no Searches for campaigns with the provided status. The possible values are:
  • TEXT_AD
  • SPONSORED_UPDATES
  • SPONSORED_INMAILS
  • DYNAMIC
  • search.name.values no Searches for campaigns by name.
    search.test no Searches for campaigns based on test or non-test status.
  • True: for test campaigns
  • False: for non-test campaigns If not specified, searches for both test and non-test campaigns.
  • sort.field no, default=ID Field to sort search results by. Possible values are:
  • ACCOUNT
  • ACTIVATION_TIME
  • ID
  • NAME
  • sort.order no, default=ASCENDING Results sort order. Possible values are:
  • ASCENDING
  • DESCENDING
  • 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.