A campaign is the highest level organizational structure within an ad account and should represent a single objective for an advertiser, for example, to drive page post engagement. Setting objective of the campaign will enforce validation on any ads added to the campaign to ensure they also have the correct objective.
The date_preset = lifetime parameter is disabled in Graph API v10.0 and replaced with date_preset = maximum, which returns a maximum of 37 months of data. For v9.0 and below, date_preset = maximum will be enabled on May 25, 2021, and any lifetime calls will default to maximum and return only 37 months of data.
All businesses using the Marketing API must identify whether or not new and edited campaigns belong to a Special Ad Category. Current available categories are: housing, employment, credit, or issues, elections, and politics. Businesses whose ads do not belong to a Special Ad Category must indicate NONE or send an empty array in the special_ad_categories field.
Businesses running housing, employment, or credit ads must comply with targeting and audience restrictions. Targeting for ads about social issues, elections or politics are not affected by the special_ad_categories label.
As of Marketing API 7.0, the special_ad_category parameter on the POST /act_<ad_account_id>/campaigns endpoint has been deprecated and replaced with a new special_ad_categories parameter. The new special_ad_categories parameter is required and accepts an array.
If you use the special_ad_category parameter, it will still return a string, but you should use GET /{campaign-id}?fields=special_ad_categories to get an array back. Refer to Special Ad Category for additional information.
A campaign is a grouping of ad sets which are organized by the same business objective. Each campaign has an objective that must be valid across the ad sets within that campaign.
After your ads begin delivering, you can query stats for ad campaigns. The statistics returned will be unique stats, deduped across the ad sets. You can also get reports and statistics for all ad sets and ads in an campaign simultaneously.GET v24.0/...?fields={fieldname_of_type_Campaign} HTTP/1.1 Host: graph.facebook.com/* PHP SDK v5.0.0 */ /* make the API call */ try { // Returns a `Facebook\FacebookResponse` object $response = $fb->get( '...?fields={fieldname_of_type_Campaign}', '{access-token}' ); } catch(Facebook\Exceptions\FacebookResponseException $e) { echo 'Graph returned an error: ' . $e->getMessage(); exit; } catch(Facebook\Exceptions\FacebookSDKException $e) { echo 'Facebook SDK returned an error: ' . $e->getMessage(); exit; } $graphNode = $response->getGraphNode(); /* handle the result *//* make the API call */ FB.api( "...?fields={fieldname_of_type_Campaign}", function (response) { if (response && !response.error) { /* handle the result */ } } );/* make the API call */ new GraphRequest( AccessToken.getCurrentAccessToken(), "...?fields={fieldname_of_type_Campaign}", null, HttpMethod.GET, new GraphRequest.Callback() { public void onCompleted(GraphResponse response) { /* handle the result */ } } ).executeAsync();/* make the API call */ FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"...?fields={fieldname_of_type_Campaign}" parameters:params HTTPMethod:@"GET"]; [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { // Handle the result }];| Parameter | Description |
|---|---|
date_presetenum{today, yesterday, this_month, last_month, this_quarter, maximum, data_maximum, last_3d, last_7d, last_14d, last_28d, last_30d, last_90d, last_week_mon_sun, last_week_sun_sat, last_quarter, last_year, this_week_mon_today, this_week_sun_today, this_year} | Date Preset |
time_range{'since':YYYY-MM-DD,'until':YYYY-MM-DD} | Time Range. Note if time range is invalid, it will be ignored. |
| Field | Description |
|---|---|
idnumeric string | Campaign's ID |
account_idnumeric string | ID of the ad account that owns this campaign |
adlabels | Ad Labels associated with this campaign |
enum {LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP, LOWEST_COST_WITH_MIN_ROAS} | Bid strategy for this campaign when you enable campaign budget optimization and when you use
|
boosted_object_idnumeric string | The Boosted Object this campaign has associated, if any |
brand_lift_studies | Automated Brand Lift V2 studies for this ad set. |
budget_rebalance_flagbool | Whether to automatically rebalance budgets daily for all the adsets under this campaign. This has been deprecated on Marketing API V7.0. |
budget_remainingnumeric string | Remaining budget |
buying_typestring | Buying type, possible values are: |
campaign_group_active_timenumeric string | campaign_group_active_time this is only for Internal, This will have the active running length of Campaign Groups |
can_create_brand_lift_studybool | If we can create a new automated brand lift study for the ad set. |
can_use_spend_capbool | Whether the campaign can set the spend cap |
configured_statusenum {ACTIVE, PAUSED, DELETED, ARCHIVED} | If this status is |
created_timedatetime | Created Time |
daily_budgetnumeric string | The daily budget of the campaign |
effective_statusenum {ACTIVE, PAUSED, DELETED, ARCHIVED, IN_PROCESS, WITH_ISSUES} | IN_PROCESS is available for version 4.0 or higher |
has_secondary_skadnetwork_reportingbool | has_secondary_skadnetwork_reporting |
is_adset_budget_sharing_enabledbool | Whether the child ad sets are managed under ad set budget sharing |
is_budget_schedule_enabledbool | Whether budget scheduling is enabled for the campaign group |
is_skadnetwork_attributionbool | When set to |
Issues for this campaign that prevented it from deliverying | |
last_budget_toggling_timedatetime | Last budget toggling time |
lifetime_budgetnumeric string | The lifetime budget of the campaign |
namestring | Campaign's name |
objectivestring | Campaign's objective See the Outcome Ad-Driven Experience Objective Validation section below for more information. |
pacing_typelist<string> | Defines pacing type of the campaign. The value is an array of options: "standard". |
primary_attributionenum | primary_attribution |
promoted_object | The object this campaign is promoting across all its ads |
smart_promotion_typeenum | Smart Promotion Type. guided_creation or smart_app_promotion(the choice under APP_INSTALLS objective). |
source_campaign | The source campaign that this campaign is copied from |
source_campaign_idnumeric string | The source campaign id that this campaign is copied from |
list<enum> | special ad categories |
special_ad_categoryenum | The campaign's Special Ad Category. One of |
list<enum> | Country field for Special Ad Category. |
spend_capnumeric string | A spend cap for the campaign, such that it will not spend more than this cap. Expressed as integer value of the subunit in your currency. |
start_timedatetime | Merging of |
statusenum {ACTIVE, PAUSED, DELETED, ARCHIVED} | If this status is |
stop_timedatetime | Merging of |
topline_idnumeric string | Topline ID |
updated_timedatetime | Updated Time. If you update |
| Edge | Description |
|---|---|
Edge<AdStudy> | The ad studies containing this campaign |
Edge<AdRule> | Ad rules that govern this campaign - by default, this only returns rules that either directly mention the campaign by id or indirectly through the set entity_type |
Edge<Adgroup> | Ads under this campaign |
Edge<AdCampaign> | The ad sets under this campaign |
Edge<AdCampaignGroup> | The copies of this campaign |
| Error | Description |
|---|---|
| 100 | Invalid parameter |
| 80004 | There have been too many calls to this ad-account. Wait a bit and try again. For more info, please refer to https://developers.facebook.com/docs/graph-api/overview/rate-limiting#ads-management. |
| 613 | Calls to this api have exceeded the rate limit. |
| 190 | Invalid OAuth 2.0 Access Token |
| 104 | Incorrect signature |
| 2500 | Error parsing graph query |
| 3018 | The start date of the time range cannot be beyond 37 months from the current date |
| 200 | Permissions error |
| 2635 | You are calling a deprecated version of the Ads API. Please update to the latest version. |
async_batch_requests edge from the following paths: | Parameter | Description |
|---|---|
adbatchlist<Object> | JSON encoded batch reqeust Required |
nameUTF-8 encoded string | Name of the batch request for tracking purposes. Required |
id in the return type.id: numeric string, | Error | Description |
|---|---|
| 194 | Missing at least one required parameter |
| 100 | Invalid parameter |
| 2500 | Error parsing graph query |
copies edge from the following paths: | Parameter | Description |
|---|---|
deep_copyboolean | Default value: falseWhether to copy all the child ads. Limits: the total number of children ads to copy should not exceed 3 for a synchronous call and 51 for an asynchronous call. |
end_timedatetime | For deep copy, the end time of the sets under the copied campaign, e.g. |
parameter_overridesCampaign spec | parameter_overrides |
rename_optionsJSON or object-like arrays | Rename options |
start_timedatetime | For deep copy, the start time of the sets under the copied campaign, e.g. |
status_optionenum {ACTIVE, PAUSED, INHERITED_FROM_SOURCE} | Default value: PAUSED
|
copied_campaign_id in the return type.copied_campaign_id: numeric string, ad_object_ids: List [ad_object_type: enum {unique_adcreative, ad, ad_set, campaign, opportunities, privacy_info_center, topline, ad_account, product}, source_id: numeric string, copied_id: numeric string, | Error | Description |
|---|---|
| 100 | Invalid parameter |
| 190 | Invalid OAuth 2.0 Access Token |
| 200 | Permissions error |
campaigns edge from the following paths: POST /v24.0/act_<AD_ACCOUNT_ID>/campaigns HTTP/1.1 Host: graph.facebook.com name=My+campaign&objective=OUTCOME_TRAFFIC&status=PAUSED&special_ad_categories=%5B%5D&is_adset_budget_sharing_enabled=0/* PHP SDK v5.0.0 */ /* make the API call */ try { // Returns a `Facebook\FacebookResponse` object $response = $fb->post( '/act_<AD_ACCOUNT_ID>/campaigns', array ( 'name' => 'My campaign', 'objective' => 'OUTCOME_TRAFFIC', 'status' => 'PAUSED', 'special_ad_categories' => '[]', 'is_adset_budget_sharing_enabled' => '0', ), '{access-token}' ); } catch(Facebook\Exceptions\FacebookResponseException $e) { echo 'Graph returned an error: ' . $e->getMessage(); exit; } catch(Facebook\Exceptions\FacebookSDKException $e) { echo 'Facebook SDK returned an error: ' . $e->getMessage(); exit; } $graphNode = $response->getGraphNode(); /* handle the result *//* make the API call */ FB.api( "/act_<AD_ACCOUNT_ID>/campaigns", "POST", { "name": "My campaign", "objective": "OUTCOME_TRAFFIC", "status": "PAUSED", "special_ad_categories": "[]", "is_adset_budget_sharing_enabled": "0" }, function (response) { if (response && !response.error) { /* handle the result */ } } );Bundle params = new Bundle(); params.putString("name", "My campaign"); params.putString("objective", "OUTCOME_TRAFFIC"); params.putString("status", "PAUSED"); params.putString("special_ad_categories", "[]"); params.putString("is_adset_budget_sharing_enabled", "0"); /* make the API call */ new GraphRequest( AccessToken.getCurrentAccessToken(), "/act_<AD_ACCOUNT_ID>/campaigns", params, HttpMethod.POST, new GraphRequest.Callback() { public void onCompleted(GraphResponse response) { /* handle the result */ } } ).executeAsync();NSDictionary *params = @{ @"name": @"My campaign", @"objective": @"OUTCOME_TRAFFIC", @"status": @"PAUSED", @"special_ad_categories": @"[]", @"is_adset_budget_sharing_enabled": @"0", }; /* make the API call */ FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"/act_<AD_ACCOUNT_ID>/campaigns" parameters:params HTTPMethod:@"POST"]; [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { // Handle the result }];curl -X POST \ -F 'name="My campaign"' \ -F 'objective="OUTCOME_TRAFFIC"' \ -F 'status="PAUSED"' \ -F 'special_ad_categories=[]' \ -F 'is_adset_budget_sharing_enabled=0' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v24.0/act_<AD_ACCOUNT_ID>/campaigns| Parameter | Description |
|---|---|
adlabelslist<Object> | Ad Labels associated with this campaign |
enum{LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP, LOWEST_COST_WITH_MIN_ROAS} | Choose bid strategy for this campaign to suit your specific business goals. Each strategy has tradeoffs and may be available for certain Notes:
|
budget_schedule_specslist<JSON or object-like arrays> | Initial high demand periods to be created with the campaign. |
buying_typestring | Default value: AUCTIONThis field will help Facebook make optimizations to delivery, pricing, and limits. All ad sets in this campaign must match the buying type. Possible values are: |
campaign_optimization_typeenum{NONE, ICO_ONLY} | campaign_optimization_type |
daily_budgetint64 | Daily budget of this campaign. All adsets under this campaign will share this budget. You can either set budget at the campaign level or at the adset level, not both. |
execution_optionslist<enum{validate_only, include_recommendations}> | Default value: SetAn execution setting |
is_skadnetwork_attributionboolean | To create an iOS 14 campaign, enable SKAdNetwork attribution for this campaign. |
is_using_l3_scheduleboolean | is_using_l3_schedule |
iterative_split_test_configslist<Object> | Array of Iterative Split Test Configs created under this campaign . |
lifetime_budgetint64 | Lifetime budget of this campaign. All adsets under this campaign will share this budget. You can either set budget at the campaign level or at the adset level, not both. |
namestring | Name for this campaign Supports Emoji |
objectiveenum{APP_INSTALLS, BRAND_AWARENESS, CONVERSIONS, EVENT_RESPONSES, LEAD_GENERATION, LINK_CLICKS, LOCAL_AWARENESS, MESSAGES, OFFER_CLAIMS, OUTCOME_APP_PROMOTION, OUTCOME_AWARENESS, OUTCOME_ENGAGEMENT, OUTCOME_LEADS, OUTCOME_SALES, OUTCOME_TRAFFIC, PAGE_LIKES, POST_ENGAGEMENT, PRODUCT_CATALOG_SALES, REACH, STORE_VISITS, VIDEO_VIEWS} | Campaign's objective. If it is specified the API will validate that any ads created under the campaign match that objective. |
promoted_objectObject | The object this campaign is promoting across all its ads. It’s required for Meta iOS 14+ app promotion (SKAdNetwork or Aggregated Event Measurement) campaign creation. Only |
source_campaign_idnumeric string or integer | Used if a campaign has been copied. The ID from the original campaign that was copied. |
array<enum {NONE, EMPLOYMENT, HOUSING, CREDIT, ISSUES_ELECTIONS_POLITICS, ONLINE_GAMBLING_AND_GAMING, FINANCIAL_PRODUCTS_SERVICES}> | special_ad_categories Required |
array<enum {AC, AD, AE, AF, AG, AI, AL, AM, AN, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW}> | special_ad_category_country |
spend_capint64 | A spend cap for the campaign, such that it will not spend more than this cap. Defined as integer value of subunit in your currency with a minimum value of $100 USD (or approximate local equivalent). Set the value to 922337203685478 to remove the spend cap. Not available for Reach and Frequency or Premium Self Serve campaigns |
start_timedatetime | start_time |
statusenum{ACTIVE, PAUSED, DELETED, ARCHIVED} | Only |
stop_timedatetime | stop_time |
topline_idnumeric string or integer | Topline ID |
id in the return type.id: numeric string, success: bool, | Error | Description |
|---|---|
| 100 | Invalid parameter |
| 613 | Calls to this api have exceeded the rate limit. |
| 200 | Permissions error |
| 2635 | You are calling a deprecated version of the Ads API. Please update to the latest version. |
| 190 | Invalid OAuth 2.0 Access Token |
| 80004 | There have been too many calls to this ad-account. Wait a bit and try again. For more info, please refer to https://developers.facebook.com/docs/graph-api/overview/rate-limiting#ads-management. |
| 300 | Edit failure |
/{campaign_id}.| Parameter | Description |
|---|---|
adlabelslist<Object> | Ad Labels associated with this campaign |
adset_bid_amountsJSON object {numeric string : int64} | A map of child adset IDs to their respective bid amounts required in the process of toggling campaign from autobid to manual bid |
adset_budgetsarray<JSON object> | An array of maps containing all the non-deleted child adset IDs and either daily_budget or lifetime_budget, required in the process of toggling between campaign budget and adset budget |
enum{LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP, LOWEST_COST_WITH_MIN_ROAS} | Choose bid strategy for this campaign to suit your specific business goals. Each strategy has tradeoffs and may be available for certain Notes:
|
budget_rebalance_flagboolean | Whether to automatically rebalance budgets daily for all the adsets under this campaign. |
campaign_optimization_typeenum{NONE, ICO_ONLY} | campaign_optimization_type |
daily_budgetint64 | Daily budget of this campaign. All adsets under this campaign will share this budget. You can either set budget at the campaign level or at the adset level, not both. |
execution_optionslist<enum{validate_only, include_recommendations}> | Default value: SetAn execution setting |
is_adset_budget_sharing_enabledboolean | Whether the child ad sets are managed under ad set budget sharing. With ad set budget sharing, advertisers can now share up to 20% of their budget with other ad sets in the same campaign. |
is_skadnetwork_attributionboolean | Flag to indicate that the campaign will be using SKAdNetwork, which also means that it will only be targeting iOS 14.x and above |
is_using_l3_scheduleboolean | is_using_l3_schedule |
iterative_split_test_configslist<Object> | Array of Iterative Split Test Configs created under this campaign . |
lifetime_budgetint64 | Lifetime budget of this campaign. All adsets under this campaign will share this budget. You can either set budget at the campaign level or at the adset level, not both. |
namestring | Name for this campaign Supports Emoji |
objectiveenum{APP_INSTALLS, BRAND_AWARENESS, CONVERSIONS, EVENT_RESPONSES, LEAD_GENERATION, LINK_CLICKS, LOCAL_AWARENESS, MESSAGES, OFFER_CLAIMS, OUTCOME_APP_PROMOTION, OUTCOME_AWARENESS, OUTCOME_ENGAGEMENT, OUTCOME_LEADS, OUTCOME_SALES, OUTCOME_TRAFFIC, PAGE_LIKES, POST_ENGAGEMENT, PRODUCT_CATALOG_SALES, REACH, STORE_VISITS, VIDEO_VIEWS} | Campaign's objective. If it is specified the API will validate that any ads created under the campaign match that objective. See the Outcome Ad-Driven Experience Objective Validation section below for more information. |
promoted_objectObject | The object this campaign is promoting across all its ads. Only |
smart_promotion_typeenum{GUIDED_CREATION, SMART_APP_PROMOTION} | smart_promotion_type |
special_ad_categoryenum{NONE, EMPLOYMENT, HOUSING, CREDIT, ISSUES_ELECTIONS_POLITICS, ONLINE_GAMBLING_AND_GAMING, FINANCIAL_PRODUCTS_SERVICES} | special_ad_category |
array<enum {AC, AD, AE, AF, AG, AI, AL, AM, AN, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XK, YE, YT, ZA, ZM, ZW}> | special_ad_category_country |
spend_capint64 | A spend cap for the campaign, such that it will not spend more than this cap. Defined as integer value of subunit in your currency with a minimum value of $100 USD (or approximate local equivalent). Set the value to 922337203685478 to remove the spend cap. Not available for Reach and Frequency or Premium Self Serve campaigns |
start_timedatetime | start_time |
statusenum{ACTIVE, PAUSED, DELETED, ARCHIVED} | Only |
stop_timedatetime | stop_time |
success: bool, | Error | Description |
|---|---|
| 100 | Invalid parameter |
| 200 | Permissions error |
| 613 | Calls to this api have exceeded the rate limit. |
| 80004 | There have been too many calls to this ad-account. Wait a bit and try again. For more info, please refer to https://developers.facebook.com/docs/graph-api/overview/rate-limiting#ads-management. |
| 2635 | You are calling a deprecated version of the Ads API. Please update to the latest version. |
| 190 | Invalid OAuth 2.0 Access Token |
| 801 | Invalid operation |
/{campaign_id}.success: bool, | Error | Description |
|---|---|
| 200 | Permissions error |
| 80004 | There have been too many calls to this ad-account. Wait a bit and try again. For more info, please refer to https://developers.facebook.com/docs/graph-api/overview/rate-limiting#ads-management. |
| 100 | Invalid parameter |
| 190 | Invalid OAuth 2.0 Access Token |
/act_{ad_account_id}/campaigns.| Parameter | Description |
|---|---|
before_datedatetime | Set a before date to delete campaigns before this date |
delete_strategyenum{DELETE_ANY, DELETE_OLDEST, DELETE_ARCHIVED_BEFORE} | Delete strategy Required |
object_countinteger | Object count |
objects_left_to_delete_count: unsigned int32, deleted_object_ids: List [| Error | Description |
|---|---|
| 100 | Invalid parameter |
These older objectives are deprecated with the release of Marketing API v17.0. Please refer to the Outcome-Driven Ads Experiences mapping table below to find the new objectives and their corresponding destination types, optimization goals and promoted objects.
Your campaign objective choice can limit the settings available to you.
Certain campaign objectives support only certain ad set optimization_goals. See Bidding Overview, Validation.
See our ads guide for a list of creatives supported per objective. In the API, the objective determines which ad creatives are valid.
| Objective | Creative Fields |
|---|---|
|
|
|
Notes:
|
|
|
|
|
|
Notes:
|
|
|
|
|
|
Note: Creative cannot include link ads pointing to an app store. |
|
|
Tracking specs are applied by default based on the objective specified, please see the full list of defaults by objective here.
There are two important scenarios to take into account:
CONVERSIONS.To specify to track an install or app event, set the following in your ad:
tracking_specs=[{'action.type':['mobile_app_install'],'application':[{your_app_id}]},{'action.type':['app_custom_event'],'application':[{your_app_id}]}]Certain objectives require the promoted_object to be set in ad sets. See Promoted Object for more information.
| Objective | Required promoted_object Fields |
|---|---|
|
|
|
|
| For mobile app or Instant Experiences app engagement link clicks: |
|
|
|
|
|
|
Certain types of ad placements are valid only for specific objectives or creatives. See Business Help Center, Available ad placements for marketing objectives.
The table below shows some placements and their compatible objectives or creatives. You can pick a combination of those compatible placements. Note that:
LEAD_GENERATION, device_platforms: desktop cannot be selected together with publisher_platforms: instagram.story for facebook_positions does not support destination_type: messenger.story for messenger_positions does not support destination_type: messenger. ig_search and explore_home for instagram_positions do not support destination_type: whatsapp & messenger.| Objective | Creative | Placement |
|---|---|---|
| Desktop app ads |
|
| Photo or video mobile app ads |
|
| all |
|
| Photo or video link ads from a page | We support
Exception: |
| Link ads not connected to a page |
|
| Photo or video mobile app ads |
|
| Event ads | As of 3.0, you cannot use |
| Page post ads |
As of 3.0, you cannot use |
| Page post ads |
instagram_positions: stream As of 3.0, you cannot use |
| Photo or video link ads from a page | All, including |
| Link ads not connected to a page |
|
| Desktop app ads |
|
| Photo or video mobile app ads |
|
| Video creatives |
As of 3.0, you cannot use |
| Page post ads with video or photo |
As of 3.0, you cannot use |
| Page post ads with text only |
As of 3.0, you cannot use |
| New campaign |
As of 3.0, you cannot use |
| dynamic ads | All, including |
| Reach ads | All except Includes |
| store visit ads |
As of 3.0, you cannot use |
| Video ads |
Includes As of 3.0, you cannot use |
attribution_specUse click-through and view-through attribution windows for ad set to track conversions then use for ads delivery optimization. This is different from the attribution window you use for ads reporting. With attribution_spec, select a combination of click-through or view-through windows of 1 day or 7 days. The combinations you can use depend on your ad set's optimization_goal and campaign's objective.
Recommended Default attribution_spec
You may not have provided attribution_spec when you created ads sets optimized for Value Optimization. This is an optimization available for conversions, app installs, and product catalog sales objectives. In the past, we defaulted to a 1-day click through attribution window.
| Objective | Optimization Goal | Allowed Combination |
|---|---|---|
|
| 1-day click 7-day click 1-day click and 1-day view 7-day click and 1-day view |
|
| 1-day click 7-day click |
|
| 1-day click 1-day click and 1-day engaged-view 1-day click and 1-day view 1-day click and 1-day engaged-view and 1-day view |
|
| Null click, Null view |
For all other optimization_goal and objective combinations, you can only use 1-day click for attribution_spec.
From v20.0 onwards, Impressions optimization goal is deprecated for the legacy Post Engagement objective and the ON_POST destination_type.
The following are newer objectives:
OUTCOME_APP_PROMOTIONOUTCOME_AWARENESSOUTCOME_ENGAGEMENTOUTCOME_LEADSOUTCOME_SALESOUTCOME_TRAFFICThese newer objectives will eventually replace the original objectives APP_INSTALLS, BRAND_AWARENESS, CONVERSIONS, EVENT_RESPONSES, LEAD_GENERATION, LINK_CLICKS, LOCAL_AWARENESS, MESSAGES, OFFER_CLAIMS, PAGE_LIKES, POST_ENGAGEMENT, PRODUCT_CATALOG_SALES, REACH, STORE_VISITS, VIDEO_VIEWS. We will continue supporting these original objectives throughout 2022.
OUTCOME_APP_PROMOTION, OUTCOME_AWARENESS, OUTCOME_ENGAGEMENT, OUTCOME_LEADS, OUTCOME_SALES, OUTCOME_TRAFFIC) may throw an error.Outcome-Driven Ads Experiences
curl -X POST \ -F 'name="New ODAX Campaign"' \ -F 'objective="OUTCOME_ENGAGEMENT"' \ -F 'status="PAUSED"' \ -F 'special_ad_categories=[]' \ -F 'access_token=ACCESS_TOKEN \ https://graph.facebook.com/v11.0/ act_AD_ACCOUNT_ID/campaigns |
Legacy
curl -X POST \ -F 'name="New Campaign"' \ -F 'objective="APP_INSTALLS"' \ -F 'status="PAUSED"' \ -F 'special_ad_categories=[]' \ -F 'access_token=ACCESS_TOKEN \ https://graph.facebook.com/v11.0/ act_AD_ACCOUNT_ID/campaigns |
| Old Objective | New Objective | Destination Type | Optimization Goal | Promoted Object |
|---|---|---|---|---|
BRAND_AWARENESS | OUTCOME_AWARENESS | — | AD_RECALL_LIFT | page_id |
REACH | OUTCOME_AWARENESS | — | REACH | page_id |
IMPRESSIONS | page_id | |||
LINK_CLICKS | OUTCOME_TRAFFIC | — | LINK_CLICKS | application_id, object_store_url |
LANDING_PAGE_VIEWS | — | |||
REACH | application_id, object_store_url | |||
IMPRESSIONS | — | |||
MESSENGER | LINK_CLICKS | — | ||
REACH | — | |||
IMPRESSIONS | — | |||
WHATSAPP | LINK_CLICKS | page_id | ||
REACH | page_id | |||
IMPRESSIONS | page_id | |||
PHONE_CALL | QUALITY_CALL | — | ||
LINK_CLICKS | — | |||
POST_ENGAGEMENT | OUTCOME_ENGAGEMENT | ON_POST | POST_ENGAGEMENT | — |
REACH | — | |||
IMPRESSIONS | — | |||
PAGE_LIKES | OUTCOME_ENGAGEMENT | ON_PAGE | PAGE_LIKES | page_id |
EVENT_RESPONSES | OUTCOME_ENGAGEMENT | ON_EVENT | EVENT_RESPONSES | — |
POST_ENGAGEMENT | — | |||
REACH | — | |||
IMPRESSIONS | — | |||
APP_INSTALL | OUTCOME_APP_PROMOTION | — | LINK_CLICKS | application_id, object_store_url |
OFFSITE_CONVERSIONS | application_id, object_store_url | |||
APP_INSTALLS | application_id, object_store_url | |||
VIDEO_VIEWS | OUTCOME_AWARENESS | — | THRUPLAY | page_id |
TWO_SECOND_CONTINUOUS_VIDEO_VIEWS | page_id | |||
OUTCOME_ENGAGEMENT | ON_VIDEO | THRUPLAY | — | |
TWO_SECOND_CONTINUOUS_VIDEO_VIEWS | — | |||
LEAD_GENERATION | OUTCOME_LEADS | ON_AD | LEAD_GENERATION | page_id |
QUALITY_LEAD | page_id | |||
LEAD_FROM_MESSENGER | LEAD_GENERATION | page_id | ||
LEAD_FROM_IG_DIRECT | LEAD_GENERATION | page_id | ||
PHONE_CALL | QUALITY_CALL | page_id | ||
MESSAGES | OUTCOME_ENGAGEMENT | MESSENGER | CONVERSATIONS | page_id |
LINK_CLICKS | page_id | |||
MESSENGER | LEAD_GENERATION | page_id | ||
CONVERSIONS(See Available conversion locations and events by objective in Meta Ads Manager for more information on available conversion events by objective.) | OUTCOME_ENGAGEMENT | — | OFFSITE_CONVERSIONS | pixel_id, custom_event_type |
application_id, object_store_url | ||||
LINK_CLICKS | pixel_id, custom_event_type | |||
application_id, object_store_url | ||||
REACH | pixel_id, custom_event_type | |||
application_id, object_store_url | ||||
LANDING_PAGE_VIEWS | pixel_id, custom_event_type | |||
IMPRESSIONS | pixel_id, custom_event_type | |||
OUTCOME_LEADS | — | OFFSITE_CONVERSIONS | pixel_id, custom_event_type | |
application_id, object_store_url | ||||
LINK_CLICKS | pixel_id, custom_event_type | |||
application_id, object_store_url | ||||
REACH | pixel_id, custom_event_type | |||
application_id, object_store_url | ||||
LANDING_PAGE_VIEWS | pixel_id, custom_event_type | |||
IMPRESSIONS | pixel_id, custom_event_type | |||
OUTCOME_SALES | — | OFFSITE_CONVERSIONS | pixel_id, custom_event_type | |
application_id, object_store_url | ||||
MESSENGER | CONVERSATIONS | page_id, pixel_id, custom_event_type | ||
PHONE_CALL | QUALITY_CALL | page_id | ||
PRODUCT_CATALOG_SALES | OUTCOME_SALES | WEBSITE | LINK_CLICKS | Campaign: product_catalog_idAd set: product_set_id, custom_event_type |
STORE_VISITS | OUTCOME_AWARENESS | — | REACH | place_page_set_id |