Graph API Version

Ad Set

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:

  • You won’t be able to use flagged custom audiences or custom conversions when creating new campaigns.
  • If you have an active campaign using flagged custom audiences or custom conversions, you should promptly review and resolve the issues by following the resolution steps to avoid delivery and performance issues.

For API developers:

  • Starting September 2, 2025, if an ad set contains one or more flagged custom audiences and custom conversions, the issues_info list will be populated with one issue per flagged items.
  • Creation and editing of ad sets that contain flagged custom audiences and custom conversions will not be blocked, but campaign delivery and performance may be impacted unless the flags are resolved.

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/v26.0/act_<AD_ACCOUNT_ID>/adsets

Create an ad set with a lifetime budget

curl -X POST \
  -F 'name="My First Adset"' \
  -F 'lifetime_budget=20000' \
  -F 'start_time="2025-12-04T20:32:30-0800"' \
  -F 'end_time="2025-12-14T20:32:30-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/v26.0/act_<AD_ACCOUNT_ID>/adsets

Limits

The 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

Housing, Employment and Credit 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.

Flagged custom conversions, custom audiences and/or lookalike audiences

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.

For flagged custom audiences
{
  "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."
  },
}
For flagged custom conversions
{
  "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."
  },
}

To resolve flagged audiences

If your custom or lookalike audiences are flagged, consider these options.

To resolve flagged custom audiences:

  • Review flagged audiences: Use Audience Manager to review your custom audience along with other information included in an audience, and remove any information that is not allowed under edit the audience to comply with Meta's terms.
  • Create new or choose different audiences: Alternatively, you can create a new custom audience or choose a different existing custom audience and make sure that it does not include information not allowed under our terms and use that to run campaigns.

To resolve flagged lookalike audiences:

  • Resolve issues with the underlying custom audience: If the underlying custom audience (also known as the seed audience) of your lookalike audience is flagged, you will need to resolve the issue with the underlying custom audience on which the lookalike audience is built. Please refer to the preceding section on how to resolve flagged custom audiences.
  • Create new audiences: Consider developing new lookalike audiences and make sure that they don't include information that is not allowed under our terms.
Request a review

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.

To resolve flagged custom conversions

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:

  • Create new custom conversion: Use a new custom conversion and make sure that it does not include information that is not allowed under our terms.
  • Choose a different custom conversion: Select a different existing custom conversion and make sure it does not include information that is not allowed under our terms.

To resolve a flagged custom conversion in an existing campaign:

  • Duplicate your campaign and select an existing custom conversion: If you have a running campaign that is flagged due to a flagged custom conversion, consider duplicating the campaign and selecting a different custom conversion that is not flagged before publishing the new duplicated campaign. Note: Once the campaign is published, you cannot remove or select a different custom conversion.
Request a review

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.

Targeting European Union Ads

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:

  • When the default values are set in the ad account, during ad set creation, updating, and ad creation under an existing ad set, if one of them is not provided, the API will automatically fill the default value listed in the ad account. Do not pass only one of them and expect the API to set the other one to be the same value. For example, in the ad account settings, 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.
  • If no saved default values are set or the values are unset, without explicitly passing the payor or beneficiary during ad set creation or when making updates, it will trigger an error and the request will fail.
  • The payer and the beneficiary fields are only for ad sets targeting the EU and/or associated territories.
  • For ad sets targeting regions other than the EU and/or associated territories, that information will not be saved even if it is provided.

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.

Reading

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.

Examples

curl -X GET \
  -d 'fields="name,status"' \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v26.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/v26.0/<AD_SET_ID>/

Example

Graph API Explorer
GET /v26.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/v26.0/<AD_SET_ID>/
If you want to learn how to use the Graph API, read our Using Graph API guide.

Parameters

ParameterDescription
date_preset
enum{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.

since
datetime

A date in the format of "YYYY-MM-DD", which means from the beginning midnight of that day.

until
datetime

A date in the format of "YYYY-MM-DD", which means to the beginning midnight of the following day.

Fields

FieldDescription
id
numeric string

id

account_id
numeric string

account_id

ad_set_goal

The ad set's customer-acquisition goal. Present only when the ad set has a goal; otherwise absent. On read, type is returned as an integer: 0 BROAD, 1 EXCLUDE_EXISTING_AND_ENGAGED_CUSTOMERS, 2 EXCLUDE_EXISTING_CUSTOMERS. Type and applicable exclusion fields (existing_customers_exclusions, engaged_audiences_exclusions) are exposed.

adlabels

adlabels

adset_schedule
list<DayPart>

adset_schedule

anchor_event_attribution_window_days
int32

anchor_event_attribution_window_days

asset_feed_id
numeric string

asset_feed_id

attribution_count_type
enum

attribution_count_type

attribution_spec
list<AttributionSpec>

attribution_spec

automatic_manual_state
enum

automatic_manual_state

bid_adjustments

bid_adjustments

bid_amount
unsigned int32

bid_amount

bid_constraints

bid_constraints

bid_info
map<string, unsigned int32>

bid_info

bid_strategy
enum {LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP, LOWEST_COST_WITH_MIN_ROAS}

bid_strategy

billing_event
enum {APP_INSTALLS, CLICKS, IMPRESSIONS, LINK_CLICKS, NONE, OFFER_CLAIMS, PAGE_LIKES, POST_ENGAGEMENT, THRUPLAY, PURCHASE, LISTING_INTERACTION}

billing_event

brand_safety_config
BrandSafetyCampaignConfig

brand_safety_config

budget_remaining
numeric string

budget_remaining

campaign

campaign

campaign_active_time
numeric string

campaign_active_time

campaign_attribution
enum

campaign_attribution

campaign_id
numeric string

campaign_id

configured_status
enum {ACTIVE, PAUSED, DELETED, ARCHIVED}

configured_status

contextual_bundling_spec
ContextualBundlingSpec

contextual_bundling_spec

cost_bidding_mode
enum

cost_bidding_mode

created_time
datetime

created_time

creative_diversity_label
list<numeric string>

creative_diversity_label

creative_diversity_score
list<numeric string>

creative_diversity_score

creative_sequence
list<numeric string>

creative_sequence

creative_sequence_repetition_pattern
enum

creative_sequence_repetition_pattern

daily_budget
numeric string

daily_budget

daily_min_spend_target
numeric string

daily_min_spend_target

daily_spend_cap
numeric string

daily_spend_cap

destination_type
string

destination_type

dsa_beneficiary
string

dsa_beneficiary

dsa_payor
string

dsa_payor

effective_status
enum {ACTIVE, PAUSED, DELETED, CAMPAIGN_PAUSED, ARCHIVED, IN_PROCESS, WITH_ISSUES}

effective_status

end_time
datetime

end_time

existing_customer_budget_percentage
unsigned int32

existing_customer_budget_percentage

frequency_control_specs

frequency_control_specs

full_funnel_exploration_mode
enum

full_funnel_exploration_mode

instagram_user_id
numeric string

instagram_user_id

is_ba_skip_delayed_eligible
bool

is_ba_skip_delayed_eligible

is_budget_schedule_enabled
bool

is_budget_schedule_enabled

is_dc_follow_optimized
bool

is_dc_follow_optimized

is_dynamic_creative
bool

is_dynamic_creative

is_incremental_attribution_enabled
bool

is_incremental_attribution_enabled

is_organic_ad_joint_optimized
bool

is_organic_ad_joint_optimized

is_sequenced_conversion_creation
bool

is_sequenced_conversion_creation

issues_info

issues_info

learning_stage_info

learning_stage_info

lifetime_budget
numeric string

lifetime_budget

lifetime_imps
int32

lifetime_imps

lifetime_min_spend_target
numeric string

lifetime_min_spend_target

lifetime_spend_cap
numeric string

lifetime_spend_cap

live_video_ad_campaign_config
LiveVideoAdCampaignConfig

live_video_ad_campaign_config

low_creative_reach
list<numeric string>

low_creative_reach

max_budget_spend_percentage
numeric string

max_budget_spend_percentage

meta_moment_maker_spec
MetaMomentMakerConfig

meta_moment_maker_spec

min_budget_spend_percentage
numeric string

min_budget_spend_percentage

multi_event_conversion_attribution_window_seconds
int32

multi_event_conversion_attribution_window_seconds

multi_optimization_goal_weight
string

multi_optimization_goal_weight

name
string

name

optimization_goal
enum {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, ENGAGED_PAGE_VIEWS, VALUE, THRUPLAY, DERIVED_EVENTS, APP_INSTALLS_AND_OFFSITE_CONVERSIONS, CONVERSATIONS, IN_APP_VALUE, MESSAGING_PURCHASE_CONVERSION, MESSAGING_DEEP_CONVERSATION_AND_FOLLOW, SUBSCRIBERS, REMINDERS_SET, MEANINGFUL_CALL_ATTEMPT, PROFILE_VISIT, PROFILE_AND_PAGE_ENGAGEMENT, ADVERTISER_SILOED_VALUE, AUTOMATIC_OBJECTIVE, MESSAGING_APPOINTMENT_CONVERSION}

optimization_goal

optimization_sub_event
string

optimization_sub_event

pacing_type
list<string>

pacing_type

promoted_object

promoted_object

recommendations
list<AdRecommendation>

recommendations

recurring_budget_semantics
bool

recurring_budget_semantics

regional_regulated_categories
list<enum>

regional_regulated_categories

regional_regulation_identities
RegionalRegulationIdentities

regional_regulation_identities

relative_value
string

relative_value

review_feedback
string

review_feedback

rf_prediction_id
id

rf_prediction_id

source_adset

source_adset

source_adset_id
numeric string

source_adset_id

special_ad_categories
list<enum>

special_ad_categories

start_time
datetime

start_time

status
enum {ACTIVE, PAUSED, DELETED, ARCHIVED}

status

targeting

targeting

targeting_optimization_types
list<KeyValue:string,int32>

targeting_optimization_types

time_based_ad_rotation_id_blocks
list<list<integer>>

time_based_ad_rotation_id_blocks

time_based_ad_rotation_intervals
list<unsigned int32>

time_based_ad_rotation_intervals

trending_topics_spec
TrendingTopicsSpec

trending_topics_spec

updated_time
datetime

updated_time

use_new_app_click
bool

use_new_app_click

value_rule_set_id
numeric string

value_rule_set_id

value_rules_applied
bool

value_rules_applied

Edges

EdgeDescription
Edge<AdActivity>

activities

Edge<AdStudy>

ad_studies

Edge<AdCreative>

adcreatives

Edge<AdRule>

adrules_governed

Edge<Adgroup>

ads

Edge<AdAsyncRequest>

asyncadrequests

Edge<AdCampaign>

copies

Edge<AdCampaignDeliveryEstimate>

delivery_estimate

Edge<MessageDeliveryEstimate>

message_delivery_estimate

Edge<TargetingSentenceLine>

targetingsentencelines

Error Codes

ErrorDescription
2635You are calling a deprecated version of the Ads API. Please update to the latest version.
100Invalid parameter
80004There 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.
190Invalid OAuth 2.0 Access Token
200Permissions error
2500Error parsing graph query

Creating

For v20.0+, the Impressions optimization goal is deprecated for the legacy Post Engagement objective and the ON_POST destination_type.

Examples

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/v26.0/act_<AD_ACCOUNT_ID>/adsets

Considerations

Bid/Budget Validations

Note:

  • All values in this section are in US Dollars.
  • Differenct currencies have different minimum daily budget limits.
  • Minimum values are defined in terms of the daily budget but apply to lifetime budgets as well.
  • Minimum budget takes the total spent budget into account.
When creating an ad set, there will be a minimum budget for different billing events (Clicks, Impressions, Actions). If the minimum daily budget is $5, a campaign lasting 5 days will need at least $25 for budget.

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
(Includes mobile app installs, offer claims, or canvas app installs)

$40
Important: This minimum daily budget is the same for all countries.

If bid_strategy is set to LOWEST_COST_WITH_BID_CAP in the ad set:

Billing Event Minimum Daily Budget

Impressions

At least the bid_amount. For example, if the bid amount is $10, then $10 will be the minimum budget required.

Clicks/Actions

5x the bid_amount for a Click or Action. For example, if the bid amount is $5 per click/action, then $25 will be the minimum budget required.

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.

Locale targeted page post

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 Ads

Mobile app ad sets should

  • be used in conjunction with targeting spec fields user_device and user_os
  • have a MOBILE_APP_* objective on the campaign

Desktop App Ads

Desktop app ad sets must

  • include a targeting spec of either
    • 'page_types':['desktopfeed'] or
    • 'page_types':['rightcolumn'] or
    • 'page_types':['desktop'] along with the other targeting options you have selected.
  • include a CANVAS_APP_* objective

Lookalike Expansion

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

Targeting DSA Regulated Locations (EU)

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

NameDescription

dsa_payor

string (max 512 char)

The payor of all ads in this ad set.

dsa_beneficiary

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

You can make a POST request to copies edge from the following paths:
When posting to this edge, an AdSet will be created.

Parameters

ParameterDescription
campaign_id
numeric 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_copy
boolean
Default value: false

Whether 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_time
datetime

The end time of the set, e.g. 2015-03-12 23:59:59-07:00 or 2015-03-12 23:59:59 PDT. UTC UNIX timestamp. When creating a set with a daily budget, specify end_time=0 to set the set to be ongoing without end date. If not set, the copied adset will inherit the end time from the original set

rename_options
JSON or object-like arrays

Rename options

rename_strategy
enum {DEEP_RENAME, ONLY_TOP_LEVEL_RENAME, NO_RENAME}
Default value: ONLY_TOP_LEVEL_RENAME

DEEP_RENAME: will change this object's name and children's names in the copied object. ONLY_TOP_LEVEL_RENAME: will change the this object's name but won't change the children's name in the copied object. NO_RENAME: will change no name in the copied object

rename_prefix
string

A prefix to copy names. Defaults to null if not provided.

rename_suffix
string

A suffix to copy names. Defaults to null if not provided and appends a localized string of - Copy based on the ad account locale.

start_time
datetime

The start time of the set, e.g. 2015-03-12 23:59:59-07:00 or 2015-03-12 23:59:59 PDT. UTC UNIX timestamp. If not set, the copied adset will inherit the start time from the original set

status_option
enum {ACTIVE, PAUSED, INHERITED_FROM_SOURCE}
Default value: PAUSED

ACTIVE: the copied adset will have active status. PAUSED: the copied adset will have paused status. INHERITED_FROM_SOURCE: the copied adset will have the status from the original set.

Return Type

This endpoint supports read-after-write and will read the node represented by copied_adset_id in the return type.
Struct {
copied_adset_id: numeric string,
ad_object_ids: List [
Struct {
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 Codes

ErrorDescription
100Invalid parameter
200Permissions error
190Invalid OAuth 2.0 Access Token
2695The ad set creation reached its campaign group(ios14) limit.
2635You are calling a deprecated version of the Ads API. Please update to the latest version.

Updating

Examples

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/v26.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();
from facebookads.objects import AdSet

adset = AdSet('<AD_SET_ID>')
adset[AdSet.Field.end_time] = '2013-10-02T00:00:00-0700'
adset.remote_update()
curl \
-F "end_time=2013-10-02T00:00:00-0700" \
-F "access_token=<ACCESS_TOKEN>" \
"https://graph.facebook.com/<API_VERSION>/<AD_SET_ID>"

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();
from facebookads.objects import AdSet

adset = AdSet('<AD_SET_ID>')
adset[AdSet.Field.status] = AdSet.Status.paused
adset.remote_update()
curl \
-F "campaign_status=PAUSED" \
-F "access_token=<ACCESS_TOKEN>" \
"https://graph.facebook.com/<API_VERSION>/<AD_SET_ID>"

Remarks

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:

  • When updating a set's lifetime or daily budget to a lower value, the new value must be at least 10% greater than the current amount spent already. For example: if an ad set has a $1000 lifetime budget and has spend $300 so far, the lowest new lifetime budget would be $330.
  • Since 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.
Note: When using the Reservation buying type, some fields may not be available to be updated through the API.
You can't perform this operation on this endpoint.

Deleting

Examples

curl -X DELETE \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v26.0/<AD_SET_ID>/

You can delete an AdSet by making a DELETE request to /{ad_set_id}.

Example

Graph API Explorer
DELETE /v26.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/v26.0/<AD_SET_ID>/
If you want to learn how to use the Graph API, read our Using Graph API guide.

Parameters

This endpoint doesn't have any parameters.

Return Type

Struct {
success: bool,
}

Error Codes

ErrorDescription
200Permissions error
100Invalid parameter
80004There 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

Example

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

Restrictions

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 ObjectivesConversion Location (L2)Conversion Events (L2)Optimization Goals (L2)Legacy Objectives

Awareness
Reach the largest number of people who are likely to remember your ad.

N/A

N/A

Ad Recall Lift, Reach, Impressions


API enum {AD_RECALL_LIFT, REACH, IMPRESSIONS}

Reach, Brand Awareness

Traffic
Send people to a destination like your website, app or Shop.

Facebook Shops (closed beta)

N/A

Link Clicks


API enum {LINK_CLICKS}

Traffic

Website

N/A

Landing Page Views, Link Clicks, Impressions, Daily Unique Reach


API enum {LANDING_PAGE_VIEWS, LINK_CLICKS, IMPRESSIONS, REACH}

Traffic

App

N/A

Link Clicks, Daily Unique Reach


API enum {LINK_CLICKS, REACH}

Traffic

Messenger

N/A

Link Clicks, Impressions, Daily Unique Reach


API enum {LINK_CLICKS, IMPRESSIONS, REACH}

Traffic

WhatsApp

N/A

Link Clicks, Impressions, Daily Unique Reach


API enum {LINK_CLICKS, IMPRESSIONS, REACH}

Traffic

Engagement
Find people likely to interact with your business online, and take actions like starting a conversation or commenting on posts.

On Video

N/A

ThruPlay, 2 second continuous view


API enum {THRUPLAY, TWO_SECOND_CONTINUOUS_VIDEO_VIEWS}

Video Views

On Post

N/A

Post Engagement, Impressions, Daily Unique Reach


API enum {POST_ENGAGEMENT, IMPRESSIONS, REACH}

Post Engagement

On Event

N/A

Event Response, Impressions, Post Engagement, Daily Unique Reach


API enum {EVENT_RESPONSES, IMPRESSIONS, POST_ENGAGEMENT, REACH}

Event Responses

Messenger

N/A

Conversations, Link Clicks


API enum {CONVERSATIONS, LINK_CLICKS}

Messages

WhatsApp

N/A

Conversations, Link Clicks


API enum {CONVERSATIONS, LINK_CLICKS}

Messages

Instagram

N/A

Conversations, Link Clicks


API enum {CONVERSATIONS, LINK_CLICKS}

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 {OFFSITE_CONVERSIONS, ONSITE_CONVERSIONS, LANDING_PAGE_VIEWS, LINK_CLICKS, IMPRESSIONS, REACH}

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 {APP_INSTALLS_AND_OFFSITE_CONVERSIONS, LINK_CLICKS, REACH}

Conversions

On Page

N/A

Page Likes


API enum {PAGE_LIKES}

Engagement

Leads
Find people interested in your business who are likely to share their contact information.

Website

Lead, CompleteRegistration, Contact, FindLocation, Schedule, StartTrial, SubmitApplication, Subscribe

Conversions, Landing Page Views, Link Clicks, Impressions, Daily Unique Reach


API enum {OFFSITE_CONVERSIONS, ONSITE_CONVERSIONS, LANDING_PAGE_VIEWS, LINK_CLICKS, IMPRESSIONS, REACH}

Conversions

Instant Forms

N/A

Leads


API enum {LEAD_GENERATION, QUALITY_LEAD}

Lead Generation

Messenger

N/A

Leads


API enum {LEAD_GENERATION, QUALITY_LEAD}

Messages

Calls

N/A

Calls


API enum {QUALITY_CALL}

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 {APP_INSTALLS_AND_OFFSITE_CONVERSIONS, LINK_CLICKS, REACH}

Conversions

App Promotion
Find people likely to install your app.

N/A

All app events, including all custom events

Non-AAA: Link Clicks, App Installs, App Events, Value


API enum {LINK_CLICKS, APP_INSTALLS, APP_INSTALLS_AND_OFFSITE_CONVERSIONS, VALUE}


AAA: App Installs, App Installs w/ App Events, App Events, Value


API enum {APP_INSTALLS, APP_INSTALLS_AND_OFFSITE_CONVERSIONS, VALUE}

App Installs

Sales
Find people likely to make purchases or take other important actions online or in store.

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 {OFFSITE_CONVERSIONS, VALUE, LINK_CLICKS, LANDING_PAGE_VIEWS, LINK_CLICKS, IMPRESSIONS, REACH}

Conversions

Website

Purchase, InitiateCheckout, AddPaymentInfo, AddToCart, CompleteRegistration, Donate, StartTrial, Subscribe, ViewContent

Conversions, Value, Landing Page Views, Link Clicks, Impressions, Daily Unique Reach


API enum {OFFSITE_CONVERSIONS, VALUE, LANDING_PAGE_VIEWS, LINK_CLICKS, IMPRESSIONS, REACH}

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 {OFFSITE_CONVERSIONS, LINK_CLICKS, REACH}

Conversions

Website & App

Purchase, InitiateCheckout, AddPaymentInfo, AddToCart, CompleteRegistration, Donate, StartTrial, Subscribe, ViewContent

Conversions


API enum {OFFSITE_CONVERSIONS}

Conversions

Messenger

Purchase, InitiateCheckout, AddPaymentInfo, AddToCart, CompleteRegistration, Donate, StartTrial, Subscribe, ViewContent

Conversations, Conversions, Link Clicks, Impressions, Reach


API enum {CONVERSATIONS, OFFSITE_CONVERSIONS, LINK_CLICKS, IMPRESSIONS, REACH}

Conversions

WhatsApp

Purchase, InitiateCheckout, AddPaymentInfo, AddToCart, CompleteRegistration, Donate, StartTrial, Subscribe, ViewContent

Conversions, Link Clicks, Impressions, Reach


API enum {OFFSITE_CONVERSIONS, LINK_CLICKS, IMPRESSIONS, REACH}

Conversions