Advantage+ Shopping Campaigns
Updated: Jun 16, 2026
Copy for LLM
Meta is introducing a new, unified, and streamlined process for creating campaigns, replacing the existing separate workflows for Manual, Advantage+ Shopping Campaigns (ASC), and Advantage+ App Campaigns.
As of v25.0, Marketing API developers will no longer be able to use the ASC API with the
smart_promotion_type=AUTOMATED_SHOPPING_ADS field to create ASC campaigns. Instead, developers will need to use Advantage+ audience, Advantage+ campaign budget, and Advantage+ placements to create campaigns with an advantage_state that reflects the type of Advantage+ campaign. Refer to the Advantage+ Campaigns documentation to start creating Advantage+ campaigns today and avoid disruption with the releases of v24.0 and v.25.0.Advantage+ shopping campaigns is a solution that enables ecommerce and retail direct-to-consumer and brand advertisers to potentially achieve better performance, greater personalization and more efficiency. These campaigns provide greater flexibility to control levers such as creative, targeting, placements, and budget, and more opportunities to optimize campaigns that drive conversions.
Advantage+ Shopping Campaigns empower advertisers to use automation and AI to:
- deliver campaigns at scale with sustained performance
- increase efficiency with minimum effort to set up and manage different campaigns
It replaces a portfolio of manual sales campaigns using a combination of targeting, bidding, destination, creative, placement, and budget set-ups within a single campaign to test up to 150 different combinations and optimize for the highest performing ads.
Learn more about the context and benefits of ASC in our blog.
Manual campaign setup compared to Advantage+ shopping campaigns
| Manual BAU Campaign Setup | Advantage+ Shopping Campaign |
|---|---|
Multiple BAU campaigns | BAU portfolio replacement |
Manual Targeting with 7 Targeting levers | Automated targeting, automation to increase setup efficiency with 1 country input |
Strict budget allocations in multiple campaigns | Budget liquidity within 1 campaign |
Test up to 50 creative combinations | Allows both dynamic and static ads with up to 150 creative combinations |
This document outlines the steps you need to follow to set up your integration for Advantage+ shopping campaigns. You will need to:
- Define Existing Customers
- Create Campaign
- Verify Campaign Creation
- Create Ad Set
- Provide Creative and Create Ads
- Set Minimum Age Constraint and Geo Exclusion (See Ad Account Controls reference doc)
- Have a
pixel_idto set up Advantage+ Shopping Campaigns
Learn more about Cross-Channel Conversion Optimization for Advantage+ shopping campaigns.
Step 1: Define your existing customers (optional)
Optionally, Advantage+ shopping campaigns allow you to define your existing customers as a collection of custom audience IDs. Your existing customers are users who are already familiar with your business/product. Once this definition is set up, you can use this to segment your budget for Advantage+ shopping campaigns to limit spend on existing customers via
existing_customer_budget_percentage. Meta also provides metrics reporting the performance of your campaigns among these different segments. This step is not required unless you plan on using existing_customer_budget_percentage.| Parameter | Description |
|---|---|
existing_customers
Array<string>
| Array of custom audience IDs that the ad account has access to. Currently the supported sources for the custom audience are website, app activity, customer list, catalog, and offline activity.
For information on how to create a custom audience, refer to this page. |
Example
curl -X POST \
-F 'existing_customers=[<CUSTOM_AUDIENCE_ID>, <CUSTOM_AUDIENCE_ID>]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>
For more information on tracking new and existing audiences in third-party tracking tools, see Audience Type URL Parameters.
Step 2: Create Campaign
Start by creating your ad campaign. To do this, make a
POST request to
/act_{ad_account_id}/campaigns.- Set
campaign_objectivetoOUTCOME_SALES - Set
smart_promotion_typetoAUTOMATED_SHOPPING_ADSto indicate that the campaign you’re creating is an ASC campaign
ASC can be created only with the
OUTCOME_SALES campaign objective.Parameters
| Parameter | Description |
|---|---|
namestring | Required Name for the Advantage+ shopping campaign |
objectiveenum | Required Campaign’s objective. Specify OUTCOME_SALES for this type of ad |
special_ad_categories
list<Object>
| Required Special ad categories associated with the Advantage+ shopping campaign |
adlabels
list<Object>
| Optional Ad Labels associated with the Advantage+ shopping campaign |
buying_typestring | Optional Advantage+ shopping campaigns only support the value AUCTION |
execution_options
list<enum>
| Optional Default value: set. Other options are:
If the call passes validation or review, the response will be {"success": true}. If the call does not pass, an error will be returned with more details. |
smart_promotion_typeenum | Required To specify this is an Advantage+ shopping campaign, the smart promotion type should be set to AUTOMATED_SHOPPING_ADS |
statusenum | Optional Valid options are: PAUSED and ACTIVE.If this status is PAUSED, all its active ad sets and ads will be paused and have an effective status CAMPAIGN_PAUSED |
Campaign create example
curl -X POST \
-F 'name=Advantage+ Shopping Campaign' \
-F 'objective=OUTCOME_SALES' \
-F 'status=ACTIVE' \
-F 'special_ad_categories=[]' \
-F 'smart_promotion_type=AUTOMATED_SHOPPING_ADS' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/campaigns
Response
{
"id": "<campaign_id>"
}
Updating
You can update a Campaign by making a
POST request to /{campaign_id}.Parameters
| Parameter | Description |
|---|---|
namestring | Name for the Advantage+ shopping campaign |
special_ad_categories
list<Object>
| Special ad categories associated with the Advantage+ shopping campaign |
adlabels
list<Object>
| Ad Labels associated with the Advantage+ shopping campaign |
execution_options
list<enum>
| Default value: set. Other options are:
If the call passes validation or review, the response will be {"success": true}. If the call does not pass, an error will be returned with more details. |
topline_idnumeric string or integer | Topline ID |
statusenum | You can use the following status for an update API call:
If an ad campaign is set to PAUSED, its active child objects will be paused and have an effective status CAMPAIGN_PAUSED. |
Campaign update example
curl -X POST \
-F 'name=Advantage+ Shopping Update Sample Campaign' \
-F 'status=PAUSED' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/<CAMPAIGN_ID>
Step 3: Verify campaign creation
To verify that you have successfully created an Advantage+ shopping campaign, you can make a
GET request to /<AD_CAMPAIGN_ID> with the field smart_promotion_type.A valid Advantage+ shopping campaign will return the field value
AUTOMATED_SHOPPING_ADS.Example
curl -X GET -G \
-d 'fields=smart_promotion_type' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/<AD_CAMPAIGN_ID>
Response
{
"smart_promotion_type": "AUTOMATED_SHOPPING_ADS",
"id": <AD_CAMPAIGN_ID>
}
Step 4: Create Ad Set
Once you have completed the campaign creation, you can create an ASC ad set. Make a
POST request to /act_{ad_account_id}/adsets.Only one Ad Set can be associated with each ASC campaign.
For ad sets targeting Taiwan, the
regional_regulated_categories and regional_regulation_identities fields must be set to identify the name of the individual or organization paying for and/or benefitting from the ad. Please see the Ad Set documentation for more details.For a lightweight Ad Set creation:
- Set performance goal to maximize the number of conversions (
optimization_goal=OFFSITE_CONVERSIONS) - Use auto-bidding (
bid_strategy=LOWEST_COST_WITHOUT_CAP) - Target by ISO country code using
geo_locationsfield - Choose either a
daily_budgetor alifetime_budget.If you choose to specify alifetime_budget, you must also set theend_time - Set the conversion location to website under the
promoted_objectby specifying thepixel_idfor your website and settingcustom_event_type=PURCHASE - Set
billing_event=IMPRESSIONS.This is the only supported billing event for ASC.
Parameters
| Parameter | Description |
|---|---|
campaign_idnumeric string or integer | Required A valid Advantage+ shopping campaign you wish to add this ad set to. |
namestring | Required Name for the Advantage+ shopping campaign |
promoted_objectObject | Required The object this ad set is promoting across all its ads. For Advantage+ shopping campaigns, provide:
Restrictions
There are 2 types of cross-channel conversion configurations in promoted_object. Cross-channel conversion is optional. For a Website-only conversion location, specify the pixel_id for your website and set custom_event_type=PURCHASE.
Learn more about and view configuration examples for cross-channel conversion optimization for Advantage+ shopping campaigns. |
targetingTargeting object | Required An Advantage+ shopping ad set’s targeting structure. Only geo_locations are allowed to be specified. |
geo_locationsarray | Required Used to limit the audience of the ad set by
|
daily_budgetint64 | Optional The daily budget defined in your account currency, allowed only for ad sets with a duration (difference between end_time and start_time) longer than 24 hours.
Either daily_budget or lifetime_budget must be greater than 0. |
lifetime_budgetint64 | Optional Lifetime budget, defined in your account currency. If specified, you must also specify an end_time.
Either daily_budget or lifetime_budget must be greater than 0. |
end_timedatetime | Required when lifetime_budget is specified.When creating an ad set with a daily_budget, specify end_time=0 to set the ad set as ongoing with no end date. UTC UNIX timestamp
Example: 2015-03-12 23:59:59-07:00 or 2015-03-12 23:59:59 PDT. |
optimization_goalenum | Optional Select OFFSITE_CONVERSIONS to target delivery to individuals more likely to take a specific action on your website.Select VALUE as the optimization goal if you want to target delivery to individuals who are more likely to make high-value purchases. In Ads Manager, we display Highest Value as your bid strategy.VALUE optimization goal is only available for Website conversion location and requires promoted_object to have a specified pixel_id for your website and the custom_event_type=PURCHASE. |
bid_strategyenum | Optional
Adherence to cost cap limits is not guaranteed. See Cost Cap. |
bid_amount | Required if bid_strategy is COST_CAP. |
bid_constraintsJSON object | Optional
|
billing_eventenum | Required A billing event for the ad set. Only IMPRESSIONS is supported for Advantage+ shopping campaigns. |
existing_customer_budget_percentagenumber | Optional Specifies the maximum percentage of the budget that can be spent on the existing customers associated with this ad account. Lower values may lead to higher costs per conversion. Valid values are between 0-100. |
adlabels
list<Object>
| Optional Specifies a list of labels to be associated with this object. |
start_timedatetime | Optional. The start time of the set. UTC UNIX timestamp Example: 2015-03-12 23:59:59-07:00 or 2015-03-12 23:59:59 PDT. |
time_startdatetime | Optional Time start |
time_stopdatetime | Optional Time stop |
attribution_spec
list<JSON Object>
| Optional Conversion attribution spec used for attributing conversions for optimization. |
Ad Set Create Example
curl -X POST \
-F 'name=Advantage+ Shopping Sample Ad Set' \
-F 'campaign_id=<CAMPAIGN_ID>' \
-F 'promoted_object={ "pixel_id": "<PIXEL_ID>", "CUSTOM_EVENT_TYPE": "PURCHASE" }' \
-F 'daily_budget=<NUM>' \
-F 'existing_customer_budget_percentage=<NUM>' \
-F 'billing_event=IMPRESSIONS' \
-F 'targeting={"geo_locations": {"countries": ["US"]}}' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/adsets
Example Response
"id": "<adset_id>"
Ad Set Create Example where bid_strategy=COST_CAP:
curl \
-F 'name=My Ad Set' \
-F 'optimization_goal=OFFSITE_CONVERSIONS \
-F 'billing_event=IMPRESSIONS'
-F 'bid_strategy=COST_CAP'
-F 'bid_amount=200' \
-F 'daily_budget=1000' \
-F 'campaign_id=<CAMPAIGN_ID>' \
-F 'targeting={"geo_locations":{"countries":["US"]}}' \
-F 'status=PAUSED' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/<VERSION>/act_<AD_ACCOUNT_ID>/adsets
Ad Set Create Example where bid_strategy=LOWEST_COST_WITH_MIN_ROAS:
curl \
-F 'name=My Ad Set' \
-F 'optimization_goal=OFFSITE_CONVERSIONS \
-F 'billing_event=IMPRESSIONS'
-F 'bid_strategy=LOWEST_COST_WITH_MIN_ROAS
-F 'bid_constraints={"roas_average_floor": 1000} \
-F 'daily_budget=1000' \
-F 'campaign_id=<CAMPAIGN_ID>' \
-F 'targeting={"geo_locations":{"countries":["US"]}}' \
-F 'status=PAUSED' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/<VERSION>/act_<AD_ACCOUNT_ID>/adsets
Updating
Parameters
| Parameter | Description |
|---|---|
adlabels
list<Object>
| Specifies a list of labels to be associated with this object. This field is optional. |
daily_budgetint64 | The daily budget defined in your account currency, allowed only for ad sets with a duration (difference between end_time and start_time) longer than 24 hours.
Either daily_budget or lifetime_budget must be greater than 0. |
existing_customer_budget_percentagenumber | Specifies the maximum percentage of the budget that can be spent on the existing customers associated with this ad account. Lower values may lead to higher costs per conversion. Valid values are between 0-100. |
end_timedatetime | End time, required when lifetime_budget is specified.
Example: 2015-03-12 23:59:59-07:00 or 2015-03-12 23:59:59 PDTWhen creating an ad set with a daily budget, specify end_time=0 to set the ad set as ongoing with no end date.
UTC UNIX timestamp. |
execution_options
list<enum>
| Default value: set. Other options are:
If the call passes validation or review, the response will be {"success": true}. If the call does not pass, an error will be returned with more details. |
start_timedatetime | The start time of the set. Must be provided in UTC UNIX timestamp.
Example: 2015-03-12 23:59:59-07:00 or 2015-03-12 23:59:59 PDT. |
statusenum | Available options for updates:
If it is set to PAUSED, all its active ads will be paused and have an effective status ADSET_PAUSED. |
lifetime_budgetint64 | Lifetime budget, defined in your account currency. If specified, you must also specify an end_time.
Either daily_budget or lifetime_budget must be greater than 0. |
time_startdatetime | Time start |
time_stopdatetime | Time stop |
targetingTargeting object | Targeting structure for your ad set. Valid values for targeting are geo_locations. |
geo_locationsarray | Required Used to limit the audience of the ad set by
|
attribution_spec
list<JSON Object>
| Optional Conversion attribution spec used for attributing conversions for optimization. |
Ad Set Update Example
curl -X POST \
-F 'name=Advantage+ Shopping Sample Updated Ad Set' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/<AD_SET_ID>
Step 5: Provide Creative and Create Ads
Once you have an ad set, you can create your ad by posting to the
/act_{ad_account_id}/ads endpoint. Creating Ads in Advantage+ Shopping Campaigns follows the same process as in manual sales campaigns. Please refer to the links below to create Ads under Advantage+ Shopping Campaigns:- Manual Ads (non-Catalog Ads)
- Advantage+ Catalog Ads (formerly known as Dynamic Ads)
- Shops Ads
- Localized Catalogs (or Advantage+ Catalog Ads for Multiple Languages or Countries)
Parameters
| Parameter | Description |
|---|---|
namestring | Required Name of the ad |
adset_idint64 | Required The ID of the ad set, required on creation. |
creativeAdCreative | Required The creative spec or the ID of the ad creative to be used by this ad. Valid fields are:
You can read more about creatives here Provide the creative in the following format: {"creative_id": <CREATIVE_ID>}Or provide a creative spec: |
statusenum | Optional Only ACTIVE and PAUSED are valid during creation. During testing, it is recommended to set ads to a PAUSED status so as to not incur accidental spend. |
adlabels
list<Object>
| Optional Ad Labels associated with this ad |
execution_options
list<enum>
| Optional Default value: set.
If the call passes validation or review, the response will be {"success": true}. If the call does not pass, an error will be returned with more details. |
Ad Create Example
curl -X POST \
-F 'name=Advantage+ Shopping campaign Sample Ad' \
-F 'adset_id=<ADSET_ID>' \
-F 'creative={"name": <NAME>, "object_story_spec": <SPEC>}' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/ads
Individual Ad Scheduling
Individual Ad Scheduling allows advertisers to have more granular control to run their Ads during a specific time period by scheduling the start and end time. This feature is available for all campaign types.
Example
{
"ad_schedule_end_time": "2024-07-30T09:00:00+0100",
"ad_schedule_start_time": "2024-07-26T12:00:32+0100"
}
These are the parameters.
Creative Fields
For a full list of Ad Creative fields, see here.
| Field | Description |
|---|---|
Required Use if you want to create a new unpublished page post and turn the post into an ad. The Page ID and the content to create a new unpublished page post. | |
use_page_actor_overrideAdCreative | Required If true, we display the Facebook page associated with the Advantage shopping ads. |
Create Creative Example
curl -X POST \
-F 'object_story_spec=<SPEC>' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/adcreatives
Updating
Parameters
| Parameter | Description |
|---|---|
namestring | New name of the ad |
adlabels
list<Object>
| Ad labels associated with this ad. |
execution_options
list<enum>
| Default value: set. Other options are:
If the call passes validation or review, the response will be {"success": true}. If the call does not pass, an error will be returned with more details. |
statusenum | Options are:
During testing, it is recommended to set ads to a PAUSED status so as to not incur accidental spend. |
creativeAdCreative | The creative spec of the ad creative to be used by this ad. Valid fields are object_story_spec, asset_feed_spec, and use_page_actor_override and can be viewed here. You can read more about creatives hereProvide the creative in the following format: |
Ad Update Example
curl -X POST \
-F 'name=Advantage+ Shopping campaign Sample Update Ad' \
-F 'creative={"name": <NAME>, "object_story_spec": <SPEC>}' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/<AD_ID>
Step 6: Ad Account Controls (Optional)
If your business has constraints, such as unable to show ads to people under a certain age, or is restricted to some countries, you can use Ad Account controls to choose how your ads are delivered. These constraints will apply across all new and existing campaigns (manual sales and ASC) across the account.
You can set the following optional features at the Ad Account Control level:
- Minimum Age Constraint: You can set the minimum age from 18 to 25. You cannot set the maximum age.
- Exclude Geo Locations: You can exclude certain locations from ad delivery based on country, state/province, city, DMA or zip code. See targeting search for available values.
- Geo Inclusions: You can include locations at the country level.
- Placement Exclusions: You can exclude certain placements to prevent ads appearing on specific surfaces. Available placements for exclusions are Audience Network, Facebook Marketplace, and Facebook’s Right Column. See available values on the Marketing API.
Define Constraints
Make a
POST request to /act_{ad_account_id}/account_controls:- Set
age_minto a value between 18 - 25 - Exclude locations you do not want your Ads to deliver in using
exclude_geo_locations - Exclude ad placements where you do not want your Ads to appear using
placement_exclusions - Include a specific country
Example Request
curl -X POST \
-F 'audience_controls={
"age_min": 20,
"excluded_geo_locations": {"countries": ["US"]}' \
"geo_locations":{"countries": ["GB"]} \
-F 'placement_controls = {"placement_exclusions": ["facebook_marketplace"]} \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/account_controls
Example Response
{
"id": "<ad_account_business_constraints_id>",
"success": true
}