Shops ads is a solution that improves your ad performance by sending potential customers to either your website or your shop, depending on where we think they are more likely to make a purchase.
To create a product catalog sale or conversion ad using the website and shop conversion location, you will need:
Start by creating your ad campaign with a POST
request to /act_{ad_account_id}/campaigns
.
At this level, you must set your advertising goal through the objective field. For Shops ads, the supported objectives are PRODUCT_CATALOG_SALES
and CONVERSIONS
for non-Outcome-Driven Ad Experience (ODAX) and OUTCOME_SALES
objective for ODAX.
PRODUCT_CATALOG_SALES
objective, the promoted_object
is product catalog ID. Note the product catalog has to be connected to an onsite shop to be eligible for Shops ads.CONVERSIONS
objective, the promoted_object
field is not required.Example of creating a campaign with the PRODUCT_CATALOG_SALES
objective
curl \
-F 'name=Product Catalog Sales Campaign' \
-F 'objective=PRODUCT_CATALOG_SALES' \
-F 'promoted_object={"product_catalog_id":"<PRODUCT_CATALOG_ID>"}' \
-F 'status=PAUSED' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0
/act_<AD_ACCOUNT_ID>/campaigns
Example of creating a campaign with the CONVERSIONS
objective
curl \
-F 'name=Conversion Campaign' \
-F 'objective=CONVERSIONS' \
-F 'status=PAUSED' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0
/act_<AD_ACCOUNT_ID>/campaigns
Example of creating a PRODUCT_CATALOG_SALES
campaign with the OUTCOME_SALES
objective
curl \
-F 'name=Conversion Campaign' \
-F 'objective=OUTCOME_SALES' \
-F 'promoted_object={"product_catalog_id":"<PRODUCT_CATALOG_ID>"}' \
-F 'status=PAUSED' \
-F 'special_ad_categories=[]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0
/act_<AD_ACCOUNT_ID>/campaigns
Example of creating a CONVERSIONS
campaign with the OUTCOME_SALES
objective
curl \
-F 'name=Conversion Campaign' \
-F 'objective=OUTCOME_SALES' \
-F 'status=PAUSED' \
-F 'special_ad_categories=[]'
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0
/act_<AD_ACCOUNT_ID>/campaigns
For Shops ads, you must specify the destination type as SHOP_AUTOMATIC
for your ad set.
PRODUCT_CATALOG_SALES
, you must provide a product set ID in promoted_object
to promote products from that product set.CONVERSIONS
, define your promoted_object
to be a commerce account with onsite checkout enabled.Other requirements for Shops ads:
PURCHASE
as a conversion event (CUSTOM_EVENT_TYPE
) in the product set (if the objective is PRODUCT_CATALOG_SALES
) or in the Meta Pixel (if the objective is CONVERSIONS
).OFFSITE_CONVERSIONS
as optimization_goal
).Example of creating a Shops ads ad set with a campaign with the PRODUCT_CATALOG_SALES
objective that is billed on IMPRESSIONS
curl \
-F 'name=Product Catalog Sales Adset' \
-F 'bid_amount=3000' \
-F 'billing_event=IMPRESSIONS' \
-F 'daily_budget=15000' \
-F 'bid_strategy=LOWEST_COST_WITHOUT_CAP' \
-F 'campaign_id=<CAMPAIGN_ID>' \
-F 'targeting={"geo_locations": {"countries":["US"]} }' \
-F 'destination_type=SHOP_AUTOMATIC' \
-F 'promoted_object={"product_set_id":"<PRODUCT_SET_ID>","custom_event_type": "PURCHASE"}' \
-F 'status=PAUSED' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0
/act_<AD_ACCOUNT_ID>/adsets
Example of creating a Shops ads ad set with a campaign with the CONVERSIONS
objective that is billed on IMPRESSIONS
curl \
-F 'name=Conversion Adset' \
-F 'bid_amount=3000' \
-F 'billing_event=IMPRESSIONS' \
-F 'daily_budget=15000' \
-F 'bid_strategy=LOWEST_COST_WITHOUT_CAP' \
-F 'campaign_id=<CAMPAIGN_ID>' \
-F 'targeting={"geo_locations": {"countries":["US"]}}' \
-F 'destination_type=SHOP_AUTOMATIC' \
-F 'promoted_object={"omnichannel_object":{"onsite":[{"commerce_merchant_settings_id":"<COMMERCE_ACCOUNT_ID>"}],
"pixel":[{"pixel_id": "<PIXEL_ID>","custom_event_type": "PURCHASE"}]}}' \
-F 'status=PAUSED' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0
/act_<D_ACCOUNT_ID>/adsets
With Shops ads ad sets, you can create
CONVERSIONS
)Shops ads do not support the following:
PRODUCT_CATALOG_SALES
CONVERSIONS
You can create a carousel ad just like non-Shops ads. If the objective of your campaign is CONVERSIONS
, you can also create an image/video ad.
The page_id
and/or instagram_actor_id
specified in object_story_spec
must have at least one shop belonging to the commerce account you chose to promote in your ad set or the catalog you chose to promote in your campaign. They must also be connected to the same commerce account.
Additionally for Shops ads, you need to specify an onsite destination as an alternative destination for your offsite landing page. To do this, set the onsite_destination
field in the asset_feed_spec
of your creative.
Onsite destination must be one of:
Shop storefront page
The shop must belong to the commerce account you promote in your ad set.
A product set
The product set must belong to the catalog of the commerce account you promote in your ad set and must contain at least one visible in stock product.
A product
The product must belong to the catalog of the commerce account you promote in your ad set.
Example onsite_destinations
field in asset_feed_spec
set to shop storefront page
asset_feed_spec= { "onsite_destinations": [ { "storefront_shop_id": "<SHOP_STOREFRONT_ID>" } ] }
Example onsite_destinations
field in asset_feed_spec
set to product set
asset_feed_spec= { "onsite_destinations": [ { "shop_collection_product_set_id": "<PRODUCT_SET_ID>" } ] }
Example onsite_destinations
field in asset_feed_spec
set to a specific product
asset_feed_spec= { "onsite_destinations": [ { "details_page_product_id": "<PRODUCT_ID>" } ] }
Example of a creative for an image ad
curl \
-F 'name=Sample Creative' \
-F 'asset_feed_spec= {
"onsite_destinations": [
{
"storefront_shop_id": "<SHOP_STOREFRONT_ID>"
}
]
}' \
-F 'object_story_spec={
"link_data": {
"image_hash": "<IMAGE_HASH>",
"link": "<OFFSITE_LANDING_URL>",
"message": "try it out"
},
"page_id": "<PAGE_ID>",
"instagram_actor_id" : "<INSTAGRAM_ACTOR_ID>"
}' \
-F 'degrees_of_freedom_spec={
"creative_features_spec": {
"standard_enhancements": {
"enroll_status": "OPT_OUT"
}
}
}' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0
/act_<AD_ACCOUNT_ID>/adcreatives
To create a carousel ad promoting products from a product set, you can follow Get Started with Advantage+ Catalog Ads - Step 3: Provide an Ad Creative.
The page_id
and/or instagram_actor_id
specified in object_story_spec
must have at least one shop belonging to the commerce account you chose to promote in your ad set or the catalog you chose to promote in your campaign. They must also be connected to the same commerce account.
For the product set in the creative:
PRODUCT_CATALOG_SALES
as the objective, the product set you choose must belong to the catalog you set in your campaign and must be the same as the product set you choose to promote in your ad set.CONVERSIONS
as the objective, the product set you choose must belong to the catalog of the commerce account you choose to promote in your ad set.The additional features supported for Shops ads are optimizations for shops. If we think that it might improve your ad performance, we will automatically add different optimizations to your ads. To opt-in to this, set shops_bundle
to true
in the asset_feed_spec
of your creative (This includes both automated product tags and reasons to shop at the moment, and potentially other optimizations in the future.)
Current supported shop optimizations are:
To opt-in to automated product tags, set automated_product_tags
to true
in the template_data
of the object_story_spec
. To opt-in to reasons to shop, set reasons_to_shop
to true
in the asset_feed_spec
of your creative.
Opting in to shops_bundle
curl \
-F 'name=Sample Creative' \
-F 'product_set_id="<PRODUCT_SET_ID>"' \
-F 'asset_feed_spec= {
"shops_bundle": true
}'\
-F 'object_story_spec={
"template_data": {
"call_to_action": {
"type": "SHOP_NOW"
},
"link": "<OFFSITE_LANDING_URL>",
"multi_share_end_card": false,
"name": "{{product.name}}"
},
"page_id": "<PAGE_ID>",
"instagram_actor_id": "<INSTAGRAM_ACTOR_ID>"
}' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0
/act_<AD_ACCOUNT_ID>/adcreatives
Opting in to automated_product_tags
curl \
-F 'name=Sample Creative' \
-F 'product_set_id="<PRODUCT_SET_ID>"' \
-F 'object_story_spec={
"template_data": {
"automated_product_tags": true
"call_to_action": {
"type": "SHOP_NOW"
},
"link": "<OFFSITE_LANDING_URL>",
"multi_share_end_card": false,
"name": "{{product.name}}"
},
"page_id": "<PAGE_ID>",
"instagram_actor_id": "<INSTAGRAM_ACTOR_ID>"
}' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0
/act_<AD_ACCOUNT_ID>/adcreatives
Opting in to reasons_to_shop
curl \
-F 'name=Sample Creative' \
-F 'product_set_id="<PRODUCT_SET_ID>"' \
-F 'asset_feed_spec= {
"reasons_to_shop": true
}'\
-F 'object_story_spec={
"template_data": {
"call_to_action": {
"type": "SHOP_NOW"
},
"link": "<OFFSITE_LANDING_URL>",
"multi_share_end_card": false,
"name": "{{product.name}}"
},
"page_id": "<PAGE_ID>",
"instagram_actor_id": "<INSTAGRAM_ACTOR_ID>"
}' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0
/act_<AD_ACCOUNT_ID>/adcreatives
Note:
Shops ads also support Advantage+ creative for catalog. This feature displays different formats and ad creatives to different Account Center accounts based on what they are most likely to respond to.
You can follow the instructions in Advantage+ Creative for Catalog - Step 3: Provide Ad Creative to set up your creative.
The page_id
and/or instagram_actor_id
specified in object_story_spec
must have at least one shop belonging to the commerce account you chose to promote in your ad set or the catalog you chose to promote in your campaign. They must also be connected to the same commerce account.
For the product set in the creative:
PRODUCT_CATALOG_SALES
as the objective, the product set you choose must belong to the catalog you set in your campaign and must be the same as the product set you choose to promote in your ad set.CONVERSIONS
as objective, the product set you choose must belong to the catalog of the commerce account you choose to promote in your ad set.Example of an Advantage+ creative for catalog
curl \
-F 'name=Sample Creative' \
-F 'product_set_id="<PRODUCT_SET_ID>"' \
-F 'asset_feed_spec= {
"optimization_type":"FORMAT_AUTOMATION",
"ad_formats": ["CAROUSEL", "COLLECTION"],
"images": [{"hash": "<CUSTOMIZED_IMAGE_HASH>"}],
"descriptions": [{"text": "{{product.description}}", "From {{product.current_price}}", ...]
}
}'\
-F 'object_story_spec={
"template_data": {
"call_to_action": {
"type": "SHOP_NOW"
},
"link": "<OFFSITE_LANDING_URL>",
"multi_share_end_card": false,
"name": "{{product.name}}"
},
"page_id": "<PAGE_ID>",
“instagram_actor_id” : “<INSTAGRAM_ACTOR_ID>”
}' \
-F 'degrees_of_freedom_spec={
"creative_features_spec": {
"standard_enhancements": {
"enroll_status": "OPT_OUT"
}
}
}' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0
/act_<AD_ACCOUNT_ID>/adcreatives
Finally, you can create an ad referencing an ad creative.
curl \
-F 'status=PAUSED' \
-F 'name=Test' \
-F 'adset_id=<ADSET_ID>' \
-F 'creative= {
"creative_id": "<CREATIVE_ID>"
},
}' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0
/act_<AD_ACCOUNT_ID>/ads
Shops ads are supported together with Advantage+ shopping campaigns, which is believed to drive an even better performance when combined together.
To create an Advantage+ shopping campaign with Shops ads, follow the steps in Advantage+ Shopping Campaigns - Step 2: Create Campaign to create a campaign first.
When creating an ad set for Advantage+ shopping campaigns with Shops ads, similar to Shops ads alone, set the destination_type
to be SHOP_AUTOMATIC
and specify your commerce account in promoted_object
.
curl \
-F 'name=Advantage+ Shopping Adset' \
-F 'bid_amount=3000' \
-F 'billing_event=IMPRESSIONS' \
-F 'daily_budget=15000' \
-F 'bid_strategy=LOWEST_COST_WITHOUT_CAP' \
-F 'campaign_id=<CAMPAIGN_ID>' \
-F 'targeting={"geo_locations": {"countries":["US"]}}' \
-F 'destination_type=SHOP_AUTOMATIC' \
-F 'promoted_object={"omnichannel_object":{"onsite":[{"commerce_merchant_settings_id":"<COMMERCE_ACCOUNT_ID>"}],"pixel":[{"pixel_id": "<PIXEL_ID>","custom_event_type": "PURCHASE"}]}}' \
-F 'status=PAUSED' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0
/act_<AD_ACCOUNT_ID>/adsets
See Cross-Channel Conversion Optimization for Advantage+ Shopping Campaigns for more information.
When creating a creative and an ad for Advantage+ shopping campaigns with Shops ads, the spec is the same as Shops ads alone. See Step 3: Provide a creative above for more detail.
In order to get relevant IDs for Shops ads, you need to the catalog_management
permission from your client.
To create Shops ads for a Page, the Page has to have an onsite visible shop. You can get this from
curl -i -X GET \
"https://graph.facebook.com/v21.0
/<PAGE_ID>/commerce_merchant_settings?fields=id,shops{id,fb_sales_channel{status,fb_page{id,name}},is_onsite_enabled,shop_status}&access_token=<PAGE_ACCESS_TOKEN>"
Sample Response
{ "id":"<commerce_account_id>", "shops": { "data": [ { "fb_sales_channel": { "status": "STAGING", "fb_page": { "name": "Page 1", "id": "<page_id>" } }, "id": "<shop_id_1>", "is_onsite_enabled": true, "shop_status": "INACTIVE" }, { "fb_sales_channel": { "status": "ENABLED", "fb_page": { "name": "Page 2", "id": "<page_id>" } }, "id": "<shop_id_2>", "is_onsite_enabled": true, "shop_status": "ACTIVE" } ], // … }
For the Page you wish to create Shops ads with, check if both is_onsite_enabled
is true
and shop_status
is ACTIVE
. If so, you will be able to create Shops ads for the Page through the instructions in the rest of this guide.
To create a Shops ad for a Page, you need:
You can get the Commerce Account ID and Shop ID by running the previous query.
curl -i -X GET \
"https://graph.facebook.com/v21.0
/<PAGE_ID>/commerce_merchant_settings?fields=id,shops{id,fb_sales_channel{fb_page{id,name}}}&access_token=<PAGE_ACCESS_TOKEN>"
A commerce account might have multiple shops, you need to get the one with the Page you want to create Shops ads with.
For catalog ID, product set ID and product ID
curl -i -X GET \
"https://graph.facebook.com/v21.0
/<PAGE_ID>/commerce_merchant_settings?fields=id,product_catalogs{id,product_sets}&access_token=<PAGE_ACCESS_TOKEN>"
Sample Response
{ "id": "<commerce_account_id>", "product_catalogs": { "data": [ { "id": "<product_catalog_id>", "product_sets": { "data": [ { "id": "<product_set_id>", "name": "Product Set 1", "filter": "{\"product_item_id\":{\"is_any\":[]}}" }, ], } } ] } }