Beginning September 2, 2025, we will start to roll out more proactive restrictions on custom audiences and custom conversions that may suggest information not permitted under our terms. For example, any custom audience or custom conversions suggesting specific health conditions (e.g., "arthritis", "diabetes") or financial status (e.g., "credit score", "high income") will be flagged and prevented from being used to run ad campaigns.
What these restrictions mean for your campaigns:
For API developers:
issues_info list will be populated with one issue per flagged items.More information on this update and how to resolve flagged custom audiences can be found here, while information for resolving flagged custom conversions is available here.
An ad set is a group of ads that share the same daily or lifetime budget, schedule, bid type, bid info, and targeting data. Ad sets enable you to group ads according to your criteria, and you can retrieve the ad-related statistics that apply to a set. See Optimized CPM and Promoted Object.
For example, create an ad set with a daily budget:
curl -X POST \
-F 'name="My Reach Ad Set"' \
-F 'optimization_goal="REACH"' \
-F 'billing_event="IMPRESSIONS"' \
-F 'bid_amount=2' \
-F 'daily_budget=1000' \
-F 'campaign_id="<AD_CAMPAIGN_ID>"' \
-F 'targeting={
"geo_locations": {
"countries": [
"US"
]
},
"facebook_positions": [
"feed"
]
}' \
-F 'status="PAUSED"' \
-F 'promoted_object={
"page_id": "<PAGE_ID>"
}' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/act_<AD_ACCOUNT_ID>/adsetsCreate an ad set with a lifetime budget
curl -X POST \
-F 'name="My First Adset"' \
-F 'lifetime_budget=20000' \
-F 'start_time="2025-11-02T01:36:02-0700"' \
-F 'end_time="2025-11-12T01:36:02-0800"' \
-F 'campaign_id="<AD_CAMPAIGN_ID>"' \
-F 'bid_amount=100' \
-F 'billing_event="LINK_CLICKS"' \
-F 'optimization_goal="LINK_CLICKS"' \
-F 'targeting={
"facebook_positions": [
"feed"
],
"geo_locations": {
"countries": [
"US"
]
},
"publisher_platforms": [
"facebook",
"audience_network"
]
}' \
-F 'status="PAUSED"' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/act_<AD_ACCOUNT_ID>/adsetsThe following are the limits on ad sets
| Limit | Value |
|---|---|
Maximum number of ad sets per regular ad account | 5000 non-deleted ad sets |
Maximum number of ad sets per bulk ad account | 10000 non-deleted ad sets |
Maximum number of ads per ad set | 50 non-archived ads |
Facebook is committed to protecting people from discrimination, and we are continually improving our ability to detect and deter potential abuse. It’s already against our policies to discriminate by wrongfully targeting or excluding specific groups of people. As part of a historic settlement agreement, we are making changes to the way we manage housing, employment and credit ads.
Advertisers must specify a special_ad_category for ad campaigns that market housing, employment, and credit. In doing so, the set of targeting options available for ads in these campaigns will be restricted. See Special Ad Category for more information.
If an ad set contains one or more custom lookalike audiences flagged with an operation_status of 471, the issues_info list will be populated with one issue per flagged audience as warning.
Example
{
"effective_status": "ACTIVE",
"issues_info": [
{
"level": "AD_SET",
"error_code": 2460003,
"error_summary": "Custom Audience is blocked",
"error_message": "Custom Audience is blocked: Some of this ad set’s custom audiences and/or lookalikes are blocked because they suggest the use of information (e.g., health, financial) not allowed under Meta’s terms. Go to Audience Manager for more details, and you can either review each custom audience or lookalike and remove prohibited information, or choose a different one for your ad set or create a new one and make sure it does not include potentially prohibited information. You can also request a review in Audience Manager if you think any don’t use restricted information.",
"error_type": "SOFT_ERROR",
"additional_info": "Custom Audience ID: 120231141155310247"
},
{
"level": "AD_SET",
"error_code": 2460003,
"error_summary": "Custom Audience is blocked",
"error_message": "Custom Audience is blocked: Some of this ad set’s custom audiences and/or lookalikes are blocked because they suggest the use of information (e.g., health, financial) not allowed under Meta’s terms. Go to Audience Manager for more details, and you can either review each custom audience or lookalike and remove prohibited information, or choose a different one for your ad set or create a new one and make sure it does not include potentially prohibited information. You can also request a review in Audience Manager if you think any don’t use restricted information.",
"error_type": "SOFT_ERROR",
"additional_info": "Custom Audience ID: 120232742978230247"
},
{
"level": "AD_SET",
"error_code": 2460004,
"error_summary": "Custom Conversion is blocked",
"error_message": "Custom Conversion is blocked: This ad set’s custom conversion is blocked because it suggests the use of information (e.g., health, financial) not allowed under Meta’s terms. You can’t edit this custom conversion, but you can choose a different one for this ad set or create a new one that doesn’t use prohibited information. You can also request a review if you think your custom conversion doesn’t use prohibited information.",
"error_type": "SOFT_ERROR",
"additional_info": "Custom Conversion ID: 730362226205831"
}
],
"id": "120228591637010247"
}
In addition, attempting to create or modify ad sets containing any flagged custom audience, lookalike audience or custom conversion will fail with an error. The error will contain the list of IDs for the restricted assets.
{
"error": {
"error_subcode": 246003,
"error_data": {
"Restricted Custom Audience IDs": [
"<CUSTOM_AUDIENCE_ID1>",
"<CUSTOM_AUDIENCE_ID2>"
]
}
"error_user_title": "Your custom audience is currently blocked",
"error_user_msg": " This custom audience is blocked because it may contain information (e.g., health, financial) not allowed under Meta’s terms. Visit the audience manager to appeal this decision, edit your audience and remove prohibited information, or choose a different audience."
},
}
{
"error": {
"error_subcode": 246004,
"error_data": {
"Restricted Custom Conversion ID": "<CUSTOM_CONVERSION_ID>"
}
"error_user_title": "Your custom conversion is currently blocked",
"error_user_msg": "This custom conversion is blocked because it may contain information (e.g., health, financial) not allowed under Meta’s terms. Visit the events manager to appeal this decision, edit your custom conversion and remove prohibited information, or choose a different custom conversion."
},
}
If your custom or lookalike audiences are flagged, consider these options.
To resolve flagged custom audiences:
To resolve flagged lookalike audiences:
If you believe your custom audience or lookalike audience has been flagged in error and doesn't include non-permitted information, you can request a review via Ads Manager under the campaigns table or, or in Audience Manager by clicking on individual audiences and under the summary tab of the impacted audience.
If any of your custom conversions are flagged for suggesting information that is not allowed under our terms, you may want to consider the following options.
To resolve a flagged custom conversion in a new campaign creation:
To resolve a flagged custom conversion in an existing campaign:
If you believe your custom conversion has been flagged in error and doesn't include non-permitted information, you can request a review via Ads Manager under the campaigns table, or in Events Manager under the custom conversions page.
Beginning Tuesday, May 16, 2023 advertisers who include the European Union (EU), associated territories, or select global/worldwide in their ad targeting on Facebook and Instagram will be asked to include information about who benefits from the ad (the beneficiary) and who is paying for the ad (the payor) for each ad set. Advertisers will be prompted for this information in all ads buying surfaces including Ads Manager and the Marketing API. Beginning Wednesday, August 16, 2023, if beneficiary and payer information is not provided, the ad will not be published.
We are launching this requirement to respond to the EU Digital Services Act (DSA) which goes into full effect for Facebook and Instagram later this year.
Ad sets targeted to the EU and/or associated territories (see here for a complete list) are required to provide beneficiary information (who benefits from the ad running), and payer information (who pays for the ad). This applies to new ads, duplicated ads, or significantly edited ads from May 16 forward, and without the required information, the API will respond with a wrong parameter error. For convenience the advertiser can set a saved beneficiary and payor in their ad account, which will be auto-populated during ad set creation, copying, and updating targets to include EU locations and ads under existing ad seta without configured the payor and beneficiary.. For more information about the ad account level parameters, default_dsa_payor and default_dsa_beneficiary, see to the check the Ad Account reference document.
To facilitate the creation of ad sets targeting the EU, we're offering a new API which allows developers to get a list of likely beneficiary/payer strings, based on ad account activity. See Ad Account DSA Recommendations for more information.
Notice: To facilitate the creation of ad sets targeting the EU, we're offering a new API which allows developers to get a list of likely beneficiary/payer strings, based on ad account activity. See Ad Account Dsa Recommendations for more information.
default_dsa_payor is payor_default and default_dsa_beneficiary is beneficiary_default. During ad set creation, if only dsa_payor is passed with the payor, the dsa_beneficiary will be automatically filled with value of beneficiary_default instead of dsa_payor.payer and the beneficiary fields are only for ad sets targeting the EU and/or associated territories.
An ad set is a group of ads that share the same daily or lifetime budget, schedule, bid type, bid info, and targeting data. Ad sets enable you to group ads according to your criteria, and you can retrieve the ad-related statistics that apply to a set.
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.
curl -X GET \
-d 'fields="name,status"' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/<AD_SET_ID>/To retrieve date-time related fields in a UNIX timestamp format, use the date_format parameter:
curl -X GET \
-d 'fields="id,name,start_time,end_time"' \
-d 'date_format="U"' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/<AD_SET_ID>/To retrieve information for multiple ad sets:
To read all ad sets from one ad account:
To read the names of ad sets with status paused in an ad account
To read the end_time of multiple ad sets.
GET /v24.0/<AD_SET_ID>/?fields=adset_schedule 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(
'/<AD_SET_ID>/?fields=adset_schedule',
'{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(
"/<AD_SET_ID>/",
{
"fields": "adset_schedule"
},
function (response) {
if (response && !response.error) {
/* handle the result */
}
}
);Bundle params = new Bundle();
params.putString("fields", "adset_schedule");
/* make the API call */
new GraphRequest(
AccessToken.getCurrentAccessToken(),
"/<AD_SET_ID>/",
params,
HttpMethod.GET,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
/* handle the result */
}
}
).executeAsync();NSDictionary *params = @{
@"fields": @"adset_schedule",
};
/* make the API call */
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
initWithGraphPath:@"/<AD_SET_ID>/"
parameters:params
HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
id result,
NSError *error) {
// Handle the result
}];curl -X GET -G \
-d 'fields="adset_schedule"' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/<AD_SET_ID>/| 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 | ID for the Ad Set |
account_idnumeric string | ID for the Ad Account associated with this Ad Set |
adlabels | Ad Labels associated with this ad set |
adset_schedulelist<DayPart> | Ad set schedule, representing a delivery schedule for a single day |
asset_feed_idnumeric string | The ID of the asset feed that constains a content to create ads |
attribution_speclist<AttributionSpec> | Conversion attribution spec used for attributing conversions for optimization. Supported window lengths differ by optimization goal and campaign objective. See Objective, Optimization Goal and |
bid_adjustments | Map of bid adjustment types to values |
bid_amountunsigned int32 | Bid cap or target cost for this ad set. The bid cap used in a lowest cost bid strategy is defined as the maximum bid you want to pay for a result based on your The bid amount's unit is cents for currencies like USD, EUR, and the basic unit for currencies like JPY, KRW. The bid amount for ads with |
bid_constraints | Choose bid constraints for ad set to suit your specific business goals. It usually works together with |
bid_infomap<string, unsigned int32> | Map of bid objective to bid value. |
enum {LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP, LOWEST_COST_WITH_MIN_ROAS} | Bid strategy for this ad set when you use
|
billing_eventenum {APP_INSTALLS, CLICKS, IMPRESSIONS, LINK_CLICKS, NONE, OFFER_CLAIMS, PAGE_LIKES, POST_ENGAGEMENT, THRUPLAY, PURCHASE, LISTING_INTERACTION} | The billing event for this ad set: |
brand_safety_configBrandSafetyCampaignConfig | brand_safety_config |
budget_remainingnumeric string | Remaining budget of this Ad Set |
campaign | The campaign that contains this ad set |
campaign_active_timenumeric string | Campaign running length |
campaign_attributionenum | campaign_attribution, a new field for app ads campaign, used to indicate a campaign's attribution type, eg: SKAN or AEM |
campaign_idnumeric string | The ID of the campaign that contains this ad set |
configured_statusenum {ACTIVE, PAUSED, DELETED, ARCHIVED} | The status set at the ad set level. It can be different from the effective status due to its parent campaign. Prefer using 'status' instead of this. |
contextual_bundling_specContextualBundlingSpec | specs of contextual bundling Ad Set setup, including signal of opt-in/out the feature |
created_timedatetime | Time when this Ad Set was created |
creative_sequencelist<numeric string> | Order of the adgroup sequence to be shown to users |
daily_budgetnumeric string | The daily budget of the set defined in your account currency. |
daily_min_spend_targetnumeric string | Daily minimum spend target of the ad set defined in your account currency. To use this field, daily budget must be specified in the Campaign. This target is not a guarantee but our best effort. |
daily_spend_capnumeric string | Daily spend cap of the ad set defined in your account currency. To use this field, daily budget must be specified in the Campaign. |
destination_typestring | Destination of ads in this Ad Set. Options include: The |
dsa_beneficiarystring | The beneficiary of all ads in this ad set. |
dsa_payorstring | The payor of all ads in this ad set. |
effective_statusenum {ACTIVE, PAUSED, DELETED, CAMPAIGN_PAUSED, ARCHIVED, IN_PROCESS, WITH_ISSUES} | The effective status of the adset. The status could be effective either
because of its own status, or the status of its parent campaign. |
end_timedatetime | End time, in UTC UNIX timestamp |
frequency_control_specs | An array of frequency control specs for this ad set. Writes to this field are only available in ad sets where |
numeric string | Represents your Instagram account id, used for ads, including dynamic creative ads on Instagram. |
bool | Whether this ad set is a dynamic creative ad set. dynamic creative ad can be created only under ad set with this field set to be true. |
is_incremental_attribution_enabledbool | Whether the campaign should use incremental attribution optimization. |
Issues for this ad set that prevented it from deliverying | |
learning_stage_info | Info about whether the ranking or delivery system is still learning for this ad set. While the ad set is still in learning , we might unstablized delivery performances. |
lifetime_budgetnumeric string | The lifetime budget of the set defined in your account currency. |
lifetime_impsint32 | Lifetime impressions. Available only for campaigns with |
lifetime_min_spend_targetnumeric string | Lifetime minimum spend target of the ad set defined in your account currency. To use this field, lifetime budget must be specified in the Campaign. This target is not a guarantee but our best effort. |
lifetime_spend_capnumeric string | Lifetime spend cap of the ad set defined in your account currency. To use this field, lifetime budget must be specified in the Campaign. |
min_budget_spend_percentagenumeric string | min_budget_spend_percentage |
multi_optimization_goal_weightstring | multi_optimization_goal_weight |
namestring | Name of the ad set |
optimization_goalenum {NONE, APP_INSTALLS, AD_RECALL_LIFT, ENGAGED_USERS, EVENT_RESPONSES, IMPRESSIONS, LEAD_GENERATION, QUALITY_LEAD, LINK_CLICKS, OFFSITE_CONVERSIONS, PAGE_LIKES, POST_ENGAGEMENT, QUALITY_CALL, REACH, LANDING_PAGE_VIEWS, VISIT_INSTAGRAM_PROFILE, VALUE, THRUPLAY, DERIVED_EVENTS, APP_INSTALLS_AND_OFFSITE_CONVERSIONS, CONVERSATIONS, IN_APP_VALUE, MESSAGING_PURCHASE_CONVERSION, SUBSCRIBERS, REMINDERS_SET, MEANINGFUL_CALL_ATTEMPT, PROFILE_VISIT, PROFILE_AND_PAGE_ENGAGEMENT, ADVERTISER_SILOED_VALUE, AUTOMATIC_OBJECTIVE, MESSAGING_APPOINTMENT_CONVERSION} | The optimization goal this ad set is using. |
optimization_sub_eventstring | Optimization sub event for a specific optimization goal. For example: Sound-On event for Video-View-2s optimization goal. |
pacing_typelist<string> | Defines the pacing type, standard or using ad scheduling |
promoted_object | The object this ad set is promoting across all its ads. |
recommendationslist<AdRecommendation> | If there are recommendations for this ad set, this field includes them. Otherwise, will not be included in the response. This field is not included in redownload mode. |
recurring_budget_semanticsbool | If this field is |
regional_regulated_categorieslist<enum> | This param is used to specify
If an ad set is a Financial Service Ad and it targets Taiwan, it needs to declare both Example: |
regional_regulation_identitiesRegionalRegulationIdentities | This param is used to specify regional_regulation_identities used to represent the ad set. Currently it supports the following fields:
Example:
During creation and update, the passed identities fields need to correspond to declared categories. Both beneficiary and payer identities must be included, and they can use the same identity ID. To update an existing ad set identities, you need to pass new values for both categories and identities to overwrite the identity id or For example: Upon creation,
For update, passing will remove |
review_feedbackstring | Reviews for dynamic creative ad |
rf_prediction_idid | Reach and frequency prediction ID |
source_adset | The source ad set that this ad set was copied from |
source_adset_idnumeric string | The source ad set id that this ad set was copied from |
start_timedatetime | Start time, in UTC UNIX timestamp |
statusenum {ACTIVE, PAUSED, DELETED, ARCHIVED} | The status set at the ad set level. It can be different from the
effective status due to its parent campaign. The field returns the same
value as |
targetingTargeting | Targeting |
list<KeyValue:string,int32> | Targeting options that are relaxed and used as a signal for optimization |
time_based_ad_rotation_id_blockslist<list<integer>> | Specify ad creative that displays at custom date ranges in a campaign
as an array. A list of Adgroup IDs. The list of ads to display for each
time range in a given schedule. For example display first ad in Adgroup
for first date range, second ad for second date range, and so on. You
can display more than one ad per date range by providing more than
one ad ID per array. For example set
|
time_based_ad_rotation_intervalslist<unsigned int32> | Date range when specific ad creative displays during a campaign.
Provide date ranges in an array of UNIX timestamps where each
timestamp represents the start time for each date range. For example a
3-day campaign from May 9 12am to May 11 11:59PM PST can have three
date ranges, the first date range starts from May 9 12:00AM to
May 9 11:59PM, second date range starts from May 10 12:00AM to
May 10 11:59PM and last starts from May 11 12:00AM to May 11 11:59PM.
The first timestamp should match the campaign start time. The last
timestamp should be at least 1 hour before the campaign end time. You
must provide at least two date ranges. All date ranges must cover the
whole campaign length, so any date range cannot exceed campaign length.
Use with |
updated_timedatetime | Time when the Ad Set was updated |
use_new_app_clickbool | If set, allows Mobile App Engagement ads to optimize for LINK_CLICKS |
value_rule_set_idnumeric string | value_rule_set_id |
| Edge | Description |
|---|---|
Edge<AdActivity> | The activities of this ad set |
Edge<AdStudy> | The ad studies containing this ad set |
Edge<AdCreative> | The creatives of this ad set |
Edge<AdRule> | Ad rules that govern this ad set - by default, this only returns rules that either directly mention the ad set by id or indirectly through the set |
Edge<Adgroup> | The ads under this ad set |
Edge<AdAsyncRequest> | Async ad requests for this ad set |
Edge<AdCampaign> | The copies of this ad set |
Edge<AdCampaignDeliveryEstimate> | The delivery estimate for this ad set |
Edge<MessageDeliveryEstimate> | Delivery estimation of the marketing message campaign |
Edge<TargetingSentenceLine> | The targeting description sentence for this ad set |
| Error | Description |
|---|---|
| 2635 | You are calling a deprecated version of the Ads API. Please update to the latest version. |
| 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. |
| 190 | Invalid OAuth 2.0 Access Token |
| 200 | Permissions error |
| 2500 | Error parsing graph query |
For v20.0+, the Impressions optimization goal is deprecated for the legacy Post Engagement objective and the ON_POST destination_type.
Validate an ad set with a daily budget where the campaign objective is set to APP_INSTALLS.
curl -X POST \
-F 'name="Mobile App Installs Ad Set"' \
-F 'daily_budget=1000' \
-F 'bid_amount=2' \
-F 'billing_event="IMPRESSIONS"' \
-F 'optimization_goal="APP_INSTALLS"' \
-F 'campaign_id="<AD_CAMPAIGN_ID>"' \
-F 'promoted_object={
"application_id": "<APP_ID>",
"object_store_url": "<APP_STORE_URL>"
}' \
-F 'targeting={
"device_platforms": [
"mobile"
],
"facebook_positions": [
"feed"
],
"geo_locations": {
"countries": [
"US"
]
},
"publisher_platforms": [
"facebook",
"audience_network"
],
"user_os": [
"IOS"
]
}' \
-F 'status="PAUSED"' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/act_<AD_ACCOUNT_ID>/adsets
Note:
Budget amounts shown are for illustrative purposes only and can change based on situation.
If bid_strategy is set to LOWEST_COST_WITHOUT_CAP in the ad set:
| Billing Event | Minimum Daily Budget |
|---|---|
Impressions | $0.50 |
Clicks/Likes/Video Views | $2.50 |
Low-frequency Actions | $40 |
If bid_strategy is set to LOWEST_COST_WITH_BID_CAP in the ad set:
| Billing Event | Minimum Daily Budget |
|---|---|
Impressions | At least the |
Clicks/Actions | 5x the |
Budgets in non-USD currencies will be converted and validated upon time of ad set creation.
For ads belonging to ad accounts from countries in the list below, the minimum values are 2x the ones in the tables. For example, if the billing event is an Impression, the minimum daily budget is $0.50, but in the the following countries the minimum would be $1.00:
Australia, Austria, Belgium, Canada, Denmark, Finland, France, Germany, Greece, Hong Kong, Israel, Italy, Japan, Netherlands, New Zealand, Norway, Singapore, South Korea, Spain, Sweden, Switzerland, Taiwan, United Kingdom, United States of America.
The only exception to this rule are Low-Frequency Actions when bid_strategy is LOWEST_COST_WITHOUT_CAP.
If you promote a Page post which has been targeted by locale the ad set targeting must include the same, or a subset of, locale targeting as the Page post.
E.g. if the Page post is targeted at locales 6 (US English) and 24 (UK English), then the ad set must be targeted at one or more of the same locales.
Mobile app ad sets should
MOBILE_APP_* objective on the campaignDesktop app ad sets must
'page_types':['desktopfeed'] or'page_types':['rightcolumn'] or'page_types':['desktop'] along with the other targeting options you have selected.CANVAS_APP_* objectiveBeginning with v13.0, for newly created ad sets that optimize for value, conversions, or app events, lookalike expansion will be turned on by default and cannot be disabled. When getting an ad set that optimizes for value, conversions, or app events, we will return a new lookalike property in the targeting_optimization_types map that indicates lookalike expansion is enabled and complements the existing detailed_targeting property for the detailed targeting expansion.
For ad sets targeting the EU and/or associated territories, the dsa_payor and dsa_beneficiary fields are required. The information provided in these 2 fields will be shown to end users to indicate who is paying for the ad and who is the beneficiary of the ad.
Request
Include the following fields in an API call to the /{adset_id} endpoint.
{
"dsa_payor": "<PAYOR_NAME>",
"dsa_beneficiary": "<BENEFICIARY_NAME>"
...
}
Fields
| Name | Description |
|---|---|
string (max 512 char) | The payor of all ads in this ad set. |
string (max 512 char) | The beneficiary of all ads in this ad set. |
If these fields are not provided, the API may returns the following errors:
Payor missing error
{
"error": {
"message": "Invalid parameter",
"type": "FacebookApiException",
"code": 100,
"error_data": "{\"blame_field_specs\":[[\"dsa_payor\"]]}",
"error_subcode": 3858079,
"is_transient": false,
"error_user_title": "No payor provided in DSA regulated region",
"error_user_msg": "The DSA requires ads to provide payor information in regulated regions. Updating/creating ad needs to provide payor of the ad.",
"fbtrace_id": "fbtrace_id"
},
"__fb_trace_id__": "fbtrace_id",
"__www_request_id__": "request_id"
}
Beneficiary missing error
{
"error": {
"message": "Invalid parameter",
"type": "FacebookApiException",
"code": 100,
"error_data": "{\"blame_field_specs\":[[\"dsa_beneficiary\"]]}",
"error_subcode": 3858081,
"is_transient": false,
"error_user_title": "No payor/beneficiary provided in DSA regulated location",
"error_user_msg": "The DSA requires ads to provide beneficiary information in regulated regions. Updating/creating ad needs to provide beneficiary of the ad.",
"fbtrace_id": "fbtrace_id"
},
"__fb_trace_id__": "fbtrace_id",
"__www_request_id__": "request_id"
}
copies edge from the following paths: | Parameter | Description |
|---|---|
campaign_idnumeric string or integer | Single ID of a campaign to make parent of the copy. The copy inherits all campaign settings, such as budget from the parent.Ignore if you want to keep the copy under the original campaign parent. |
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 | The end time of the set, e.g. |
rename_optionsJSON or object-like arrays | Rename options |
start_timedatetime | The start time of the set, e.g. |
status_optionenum {ACTIVE, PAUSED, INHERITED_FROM_SOURCE} | Default value: PAUSED
|
copied_adset_id in the return type.copied_adset_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 |
| 200 | Permissions error |
| 190 | Invalid OAuth 2.0 Access Token |
| 2695 | The ad set creation reached its campaign group(ios14) limit. |
| 2635 | You are calling a deprecated version of the Ads API. Please update to the latest version. |
adsets edge from the following paths: POST /v24.0/act_<AD_ACCOUNT_ID>/adsets HTTP/1.1
Host: graph.facebook.com
name=My+First+Adset&lifetime_budget=20000&start_time=2025-11-02T01%3A36%3A02-0700&end_time=2025-11-12T01%3A36%3A02-0800&campaign_id=%3CAD_CAMPAIGN_ID%3E&bid_amount=100&billing_event=LINK_CLICKS&optimization_goal=LINK_CLICKS&targeting=%7B%22facebook_positions%22%3A%5B%22feed%22%5D%2C%22geo_locations%22%3A%7B%22countries%22%3A%5B%22US%22%5D%7D%2C%22publisher_platforms%22%3A%5B%22facebook%22%2C%22audience_network%22%5D%7D&status=PAUSED/* PHP SDK v5.0.0 */
/* make the API call */
try {
// Returns a `Facebook\FacebookResponse` object
$response = $fb->post(
'/act_<AD_ACCOUNT_ID>/adsets',
array (
'name' => 'My First Adset',
'lifetime_budget' => '20000',
'start_time' => '2025-11-02T01:36:02-0700',
'end_time' => '2025-11-12T01:36:02-0800',
'campaign_id' => '<AD_CAMPAIGN_ID>',
'bid_amount' => '100',
'billing_event' => 'LINK_CLICKS',
'optimization_goal' => 'LINK_CLICKS',
'targeting' => '{"facebook_positions":["feed"],"geo_locations":{"countries":["US"]},"publisher_platforms":["facebook","audience_network"]}',
'status' => 'PAUSED',
),
'{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>/adsets",
"POST",
{
"name": "My First Adset",
"lifetime_budget": "20000",
"start_time": "2025-11-02T01:36:02-0700",
"end_time": "2025-11-12T01:36:02-0800",
"campaign_id": "<AD_CAMPAIGN_ID>",
"bid_amount": "100",
"billing_event": "LINK_CLICKS",
"optimization_goal": "LINK_CLICKS",
"targeting": "{\"facebook_positions\":[\"feed\"],\"geo_locations\":{\"countries\":[\"US\"]},\"publisher_platforms\":[\"facebook\",\"audience_network\"]}",
"status": "PAUSED"
},
function (response) {
if (response && !response.error) {
/* handle the result */
}
}
);Bundle params = new Bundle();
params.putString("name", "My First Adset");
params.putString("lifetime_budget", "20000");
params.putString("start_time", "2025-11-02T01:36:02-0700");
params.putString("end_time", "2025-11-12T01:36:02-0800");
params.putString("campaign_id", "<AD_CAMPAIGN_ID>");
params.putString("bid_amount", "100");
params.putString("billing_event", "LINK_CLICKS");
params.putString("optimization_goal", "LINK_CLICKS");
params.putString("targeting", "{\"facebook_positions\":[\"feed\"],\"geo_locations\":{\"countries\":[\"US\"]},\"publisher_platforms\":[\"facebook\",\"audience_network\"]}");
params.putString("status", "PAUSED");
/* make the API call */
new GraphRequest(
AccessToken.getCurrentAccessToken(),
"/act_<AD_ACCOUNT_ID>/adsets",
params,
HttpMethod.POST,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
/* handle the result */
}
}
).executeAsync();NSDictionary *params = @{
@"name": @"My First Adset",
@"lifetime_budget": @"20000",
@"start_time": @"2025-11-02T01:36:02-0700",
@"end_time": @"2025-11-12T01:36:02-0800",
@"campaign_id": @"<AD_CAMPAIGN_ID>",
@"bid_amount": @"100",
@"billing_event": @"LINK_CLICKS",
@"optimization_goal": @"LINK_CLICKS",
@"targeting": @"{\"facebook_positions\":[\"feed\"],\"geo_locations\":{\"countries\":[\"US\"]},\"publisher_platforms\":[\"facebook\",\"audience_network\"]}",
@"status": @"PAUSED",
};
/* make the API call */
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
initWithGraphPath:@"/act_<AD_ACCOUNT_ID>/adsets"
parameters:params
HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
id result,
NSError *error) {
// Handle the result
}];curl -X POST \
-F 'name="My First Adset"' \
-F 'lifetime_budget=20000' \
-F 'start_time="2025-11-02T01:36:02-0700"' \
-F 'end_time="2025-11-12T01:36:02-0800"' \
-F 'campaign_id="<AD_CAMPAIGN_ID>"' \
-F 'bid_amount=100' \
-F 'billing_event="LINK_CLICKS"' \
-F 'optimization_goal="LINK_CLICKS"' \
-F 'targeting={
"facebook_positions": [
"feed"
],
"geo_locations": {
"countries": [
"US"
]
},
"publisher_platforms": [
"facebook",
"audience_network"
]
}' \
-F 'status="PAUSED"' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/act_<AD_ACCOUNT_ID>/adsets| Parameter | Description |
|---|---|
adlabelslist<Object> | Specifies list of labels to be associated with this object. This field is optional |
adset_schedulelist<Object> | Ad set schedule, representing a delivery schedule for a single day |
anchor_event_attribution_window_daysint64 | anchor_event_attribution_window_days |
attribution_speclist<JSON object> | Conversion attribution spec used for attributing conversions for optimization. Supported window lengths differ by optimization goal and campaign objective. |
automatic_manual_stateenum{UNSET, AUTOMATIC, MANUAL} | automatic_manual_state |
bid_amountinteger | Bid cap or target cost for this ad set. The bid cap used in a lowest cost bid strategy is defined as the maximum bid you want to pay for a result based on your |
enum{LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP, LOWEST_COST_WITH_MIN_ROAS} | Choose bid strategy for this ad set to suit your specific business goals.
Each strategy has tradeoffs and may be available for certain Notes:
|
billing_eventenum{APP_INSTALLS, CLICKS, IMPRESSIONS, LINK_CLICKS, NONE, OFFER_CLAIMS, PAGE_LIKES, POST_ENGAGEMENT, THRUPLAY, PURCHASE, LISTING_INTERACTION} | The billing event that this ad set is using: |
budget_schedule_specslist<JSON or object-like arrays> | Initial high demand periods to be created with the ad set. |
budget_sourceenum{NONE, RMN} | budget_source |
budget_split_set_idnumeric string or integer | budget_split_set_id |
campaign_attributionenum{} | campaign_attribution |
campaign_idnumeric string or integer | The ad campaign you wish to add this ad set to. |
campaign_specCampaign spec | Provide |
contextual_bundling_specObject | settings of Contextual Bundle to support ads serving in Facebook contextual surfaces |
creative_sequencelist<numeric string or integer> | Order of the adgroup sequence to be shown to users |
daily_budgetint64 | The daily budget defined in your account currency, allowed only for ad sets with a duration (difference between |
daily_impsint64 | Daily impressions. Available only for campaigns with |
daily_min_spend_targetint64 | Daily minimum spend target of the ad set defined in your account currency. To use this field, daily budget must be specified in the Campaign. This target is not a guarantee but our best effort. |
daily_spend_capint64 | Daily spend cap of the ad set defined in your account currency. To use this field, daily budget must be specified in the Campaign. Set the value to 922337203685478 to remove the spend cap. |
destination_typeenum{WEBSITE, APP, MESSENGER, APPLINKS_AUTOMATIC, WHATSAPP, INSTAGRAM_DIRECT, FACEBOOK, MESSAGING_MESSENGER_WHATSAPP, MESSAGING_INSTAGRAM_DIRECT_MESSENGER, MESSAGING_INSTAGRAM_DIRECT_MESSENGER_WHATSAPP, MESSAGING_INSTAGRAM_DIRECT_WHATSAPP, SHOP_AUTOMATIC, ON_AD, ON_POST, ON_EVENT, ON_VIDEO, ON_PAGE, INSTAGRAM_PROFILE, FACEBOOK_PAGE, INSTAGRAM_PROFILE_AND_FACEBOOK_PAGE, INSTAGRAM_LIVE, FACEBOOK_LIVE, IMAGINE} | Destination of ads in this Ad Set. Options include: Website, App, Messenger, |
dsa_beneficiarystring | dsa_beneficiary |
dsa_payorstring | dsa_payor |
end_timedatetime | End time, required when |
execution_optionslist<enum{validate_only, include_recommendations}> | Default value: SetAn execution setting |
existing_customer_budget_percentageint64 | existing_customer_budget_percentage |
frequency_control_specslist<Object> | An array of frequency control specs for this ad set. Writes to this field are only available in ad sets where |
boolean | Indicates the ad set must only be used for dynamic creatives. Dynamic creative ads can be created in this ad set. Defaults to |
is_sac_cfca_terms_certifiedboolean | is_sac_cfca_terms_certified |
lifetime_budgetint64 | Lifetime budget, defined in your account currency. If specified, you must also specify an |
lifetime_impsint64 | Lifetime impressions. Available only for campaigns with |
lifetime_min_spend_targetint64 | Lifetime minimum spend target of the ad set defined in your account currency. To use this field, lifetime budget must be specified in the Campaign. This target is not a guarantee but our best effort. |
lifetime_spend_capint64 | Lifetime spend cap of the ad set defined in your account currency. To use this field, lifetime budget must be specified in the Campaign. Set the value to 922337203685478 to remove the spend cap. |
max_budget_spend_percentageint64 | max_budget_spend_percentage |
min_budget_spend_percentageint64 | min_budget_spend_percentage |
multi_optimization_goal_weightenum{UNDEFINED, BALANCED, PREFER_INSTALL, PREFER_EVENT} | multi_optimization_goal_weight |
namestring | Ad set name, max length of 400 characters. RequiredSupports Emoji |
optimization_goalenum{NONE, APP_INSTALLS, AD_RECALL_LIFT, ENGAGED_USERS, EVENT_RESPONSES, IMPRESSIONS, LEAD_GENERATION, QUALITY_LEAD, LINK_CLICKS, OFFSITE_CONVERSIONS, PAGE_LIKES, POST_ENGAGEMENT, QUALITY_CALL, REACH, LANDING_PAGE_VIEWS, VISIT_INSTAGRAM_PROFILE, VALUE, THRUPLAY, DERIVED_EVENTS, APP_INSTALLS_AND_OFFSITE_CONVERSIONS, CONVERSATIONS, IN_APP_VALUE, MESSAGING_PURCHASE_CONVERSION, SUBSCRIBERS, REMINDERS_SET, MEANINGFUL_CALL_ATTEMPT, PROFILE_VISIT, PROFILE_AND_PAGE_ENGAGEMENT, ADVERTISER_SILOED_VALUE, AUTOMATIC_OBJECTIVE, MESSAGING_APPOINTMENT_CONVERSION} | What the ad set is optimizing for. |
optimization_sub_eventenum{NONE, VIDEO_SOUND_ON, TRIP_CONSIDERATION, TRAVEL_INTENT, TRAVEL_INTENT_NO_DESTINATION_INTENT, TRAVEL_INTENT_BUCKET_01, TRAVEL_INTENT_BUCKET_02, TRAVEL_INTENT_BUCKET_03, TRAVEL_INTENT_BUCKET_04, TRAVEL_INTENT_BUCKET_05, POST_INTERACTION} | Optimization sub event for a specific optimization goal (ex: Sound-On event for Video-View-2s optimization goal) |
pacing_typelist<string> | Defines the pacing type, standard by default or using ad scheduling |
promoted_objectObject | The object this ad set is promoting across all its ads.
Required with certain campaign objectives.
optimization_goal is OFFSITE_CONVERSIONS
optimization_goal is LEAD_GENERATION, page_id needs to be passed as promoted_object.
Please refer to the Outcome-Driven Ads Experiences mapping table to find new objectives and their corresponding destination types, optimization goals and promoted objects. |
rf_prediction_idnumeric string or integer | Reach and frequency prediction ID |
source_adset_idnumeric string or integer | The source adset id that this ad is copied from (if applicable). |
start_timedatetime | The start time of the set, e.g. |
statusenum{ACTIVE, PAUSED, DELETED, ARCHIVED} | Only |
targetingTargeting object | An ad set's targeting structure. "countries" is required. See targeting. |
time_based_ad_rotation_id_blockslist<list<int64>> | Specify ad creative that displays at custom date ranges in a campaign
as an array. A list of Adgroup IDs. The list of ads to display for each
time range in a given schedule. For example display first ad in Adgroup
for first date range, second ad for second date range, and so on. You
can display more than one ad per date range by providing more than
one ad ID per array. For example set
|
time_based_ad_rotation_intervalslist<int64> | Date range when specific ad creative displays during a campaign.
Provide date ranges in an array of UNIX timestamps where each
timestamp represents the start time for each date range. For example a
3-day campaign from May 9 12am to May 11 11:59PM PST can have three
date ranges, the first date range starts from May 9 12:00AM to
May 9 11:59PM, second date range starts from May 10 12:00AM to
May 10 11:59PM and last starts from May 11 12:00AM to May 11 11:59PM.
The first timestamp should match the campaign start time. The last
timestamp should be at least 1 hour before the campaign end time. You
must provide at least two date ranges. All date ranges must cover the
whole campaign length, so any date range cannot exceed campaign length.
Use with |
time_startdatetime | Time start |
time_stopdatetime | Time stop |
tune_for_categoryenum{NONE, EMPLOYMENT, HOUSING, CREDIT, ISSUES_ELECTIONS_POLITICS, ONLINE_GAMBLING_AND_GAMING, FINANCIAL_PRODUCTS_SERVICES} | tune_for_category |
value_rule_set_idnumeric string or integer | Value Rule Set ID |
value_rules_appliedboolean | value_rules_applied |
id in the return type.id: numeric string, success: bool, | Error | Description |
|---|---|
| 100 | Invalid parameter |
| 200 | Permissions error |
| 2635 | You are calling a deprecated version of the Ads API. Please update to the latest version. |
| 368 | The action attempted has been deemed abusive or is otherwise disallowed |
| 2695 | The ad set creation reached its campaign group(ios14) 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. |
| 2641 | Your ad includes or excludes locations that are currently restricted |
| 190 | Invalid OAuth 2.0 Access Token |
| 900 | No such application exists. |
curl -X POST \
-F 'billing_event="IMPRESSIONS"' \
-F 'optimization_goal="LINK_CLICKS"' \
-F 'bid_amount=200' \
-F 'targeting={
"geo_locations": {
"countries": [
"US"
]
},
"facebook_positions": [
"feed"
]
}' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/<AD_SET_ID>/To update the end_time of an ad set, using ISO-8601 date-time format
use FacebookAds\Object\AdSet;
$adset = new AdSet('<AD_SET_ID>');
$adset->end_time = '2013-10-02T00:00:00-0700';
$adset->update();To update the status of an ad set to paused
use FacebookAds\Object\AdSet;
$adset = new AdSet('<AD_SET_ID>');
$adset->campaign_status = AdSet::STATUS_PAUSED;
$adset->update();An archived ad set can only update two fields: name and campaign_status. The campaign_status field can only be changed to DELETED.
A deleted ad set can only change its name.
There are two considerations to take into account when adjusting an ad set's budget value or budget type:
v2.4, ad sets have a minimum required budget. Any update must take that into consideration. Check the details at the Create Considerations section from this page.curl -X DELETE \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/<AD_SET_ID>//{ad_set_id}.DELETE /v24.0/<AD_SET_ID>/ HTTP/1.1
Host: graph.facebook.com/* PHP SDK v5.0.0 */
/* make the API call */
try {
// Returns a `Facebook\FacebookResponse` object
$response = $fb->delete(
'/<AD_SET_ID>/',
array (),
'{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(
"/<AD_SET_ID>/",
"DELETE",
function (response) {
if (response && !response.error) {
/* handle the result */
}
}
);/* make the API call */
new GraphRequest(
AccessToken.getCurrentAccessToken(),
"/<AD_SET_ID>/",
null,
HttpMethod.DELETE,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
/* handle the result */
}
}
).executeAsync();/* make the API call */
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
initWithGraphPath:@"/<AD_SET_ID>/"
parameters:params
HTTPMethod:@"DELETE"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
id result,
NSError *error) {
// Handle the result
}];curl -X DELETE -G \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/<AD_SET_ID>/success: bool, | Error | Description |
|---|---|
| 200 | Permissions error |
| 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. |
Outcome-Driven Ads Experiences (Engagement Outcome + ON_PAGE destination_type)
curl -i -X POST \
-d "name=New ODAX Adset" \
-d "autobid=true" \
-d "optimization_goal=PAGE_LIKES" \
-d "destination_type=ON_PAGE" \
-d "billing_event=IMPRESSIONS" \
-d "daily_budget=500" \
-d "targeting={\"geo_locations\": {\"countries\": [\"US\"]}}" \
-d "promoted_object={\"page_id\": PAGE_ID}" \
-d "campaign_id=CAMPAIGN_ID" \
-d "status=PAUSED" \
-d "access_token=ACCESS_TOKEN" \
https://graph.facebook.com/v11.0/
act_AD_ACCOUNT_ID/adsets
|
Legacy
curl -i -X POST \
-d "name=New ODAX Adset" \
-d "autobid=true" \
-d "optimization_goal=PAGE_LIKES" \
-d "billing_event=IMPRESSIONS" \
-d "daily_budget=500" \
-d "targeting={\"geo_locations\": {\"countries\": [\"US\"]}}" \
-d "promoted_object={\"page_id\": PAGE_ID}" \
-d "campaign_id=CAMPAIGN_ID" \
-d "status=PAUSED" \
-d "access_token=ACCESS_TOKEN" \
https://graph.facebook.com/v11.0/
act_AD_ACCOUNT_ID/adsets
|
There will be new restrictions on Outcome-Driven Ads Experiences (ODAX) campaigns as outlined in the table below. Refer to the Outcome-Driven Ads Experiences mapping table to find the new objectives and their corresponding destination types, optimization goals and promoted objects.
| ODAX Objectives | Conversion Location (L2) | Conversion Events (L2) | Optimization Goals (L2) | Legacy Objectives |
|---|---|---|---|---|
Awareness | N/A | N/A | Ad Recall Lift, Reach, Impressions API enum { | Reach, Brand Awareness |
Traffic | Facebook Shops (closed beta) | N/A | Link Clicks API enum { | Traffic |
Website | N/A | Landing Page Views, Link Clicks, Impressions, Daily Unique Reach API enum { | Traffic | |
App | N/A | Link Clicks, Daily Unique Reach API enum { | Traffic | |
Messenger | N/A | Link Clicks, Impressions, Daily Unique Reach API enum { | Traffic | |
N/A | Link Clicks, Impressions, Daily Unique Reach API enum { | Traffic | ||
Engagement | On Video | N/A | ThruPlay, 2 second continuous view API enum { | Video Views |
On Post | N/A | Post Engagement, Impressions, Daily Unique Reach API enum { | Post Engagement | |
On Event | N/A | Event Response, Impressions, Post Engagement, Daily Unique Reach API enum { | Event Responses | |
Messenger | N/A | Conversations, Link Clicks API enum { | Messages | |
N/A | Conversations, Link Clicks API enum { | Messages | ||
N/A | Conversations, Link Clicks API enum { | Messages | ||
Website | AddToWishlist, Contact, CustomizeProduct, Donate, FindLocation,, Schedule, Search, StartTrial, SubmitApplication, Subscribe, ViewContent | Conversions, Landing Page Views, Link Clicks, Impressions, Daily Unique Reach API enum { | Conversions | |
App | Achieve Level, Activate App, Add to Wishlist, Complete Tutorial, Contact, Customize Product, Donate, Find Location, In-App Ad Click, In-App Ad Impression, Rate, Schedule, Search, Spent Credits, Start Trial, Submit Application, Subscribe, Unlock Achievement, View Content | App Events, Link Clicks, Daily Unique Reach API enum { | Conversions | |
On Page | N/A | Page Likes API enum { | Engagement | |
Leads | Website | Lead, CompleteRegistration, Contact, FindLocation, Schedule, StartTrial, SubmitApplication, Subscribe | Conversions, Landing Page Views, Link Clicks, Impressions, Daily Unique Reach API enum { | Conversions |
Instant Forms | N/A | Leads API enum { | Lead Generation | |
Messenger | N/A | Leads API enum { | Messages | |
Calls | N/A | Calls API enum { | Lead Generation | |
App | Complete Registration, Complete Tutorial, Contact, Find Location, Schedule, Start Trial, Submit Application, Subscribe | App Events, Link Clicks, Daily Unique Reach API enum { | Conversions | |
App Promotion | N/A | All app events, including all custom events | Non-AAA: Link Clicks, App Installs, App Events, Value API enum { AAA: App Installs, App Installs w/ App Events, App Events, Value API enum { | App Installs |
Sales | Website & Facebook Shops (closed beta) | Purchase, InitiateCheckout, AddPaymentInfo, AddToCart, CompleteRegistration, Donate, StartTrial, Subscribe, ViewContent | (source of truth: same as today's Conversions objective + web and shop) API enum { | Conversions |
Website | Purchase, InitiateCheckout, AddPaymentInfo, AddToCart, CompleteRegistration, Donate, StartTrial, Subscribe, ViewContent | Conversions, Value, Landing Page Views, Link Clicks, Impressions, Daily Unique Reach API enum { | Conversions | |
App | Purchase, Initiate Checkout, Add Payment Info, Add to Cart, Complete Registration, Donate, In-App Ad Click, In-App Ad Impression, Spent Credits, Start Trial, Subscribe, View Content | App Events, Link Clicks, Daily Unique Reach API enum { | Conversions | |
Website & App | Purchase, InitiateCheckout, AddPaymentInfo, AddToCart, CompleteRegistration, Donate, StartTrial, Subscribe, ViewContent | Conversions API enum { | Conversions | |
Messenger | Purchase, InitiateCheckout, AddPaymentInfo, AddToCart, CompleteRegistration, Donate, StartTrial, Subscribe, ViewContent | Conversations, Conversions, Link Clicks, Impressions, Reach API enum { | Conversions | |
Purchase, InitiateCheckout, AddPaymentInfo, AddToCart, CompleteRegistration, Donate, StartTrial, Subscribe, ViewContent | Conversions, Link Clicks, Impressions, Reach API enum { | Conversions |