Deliver ads on specific placements, such as desktop News Feed only, or mobile News Feed plus Audience Network Rewarded Video. You can only use certain placement options depending on your campaign objective. See Validation.
You can use device_platforms
, publisher_platforms
, facebook_positions
, audience_network_positions
, instagram_positions
and messenger_positions
, see Device, Publisher and Positions.
curl -X POST \
-F 'name="My AdSet"' \
-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"
]
},
"publisher_platforms": [
"facebook"
],
"facebook_positions": [
"feed"
]
}' \
-F 'promoted_object={
"page_id": "<PAGE_ID>"
}' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v9.0/act_<AD_ACCOUNT_ID>/adsets
If you do not specify anything for a particular placement field, Facebook considers all possible default positions for that field. For example, if you select facebook
in publisher_platforms
, but select nothing for facebook_positions
, Facebook consider all default Facebook positions such as feed
, right_hand_column
, and so on. Or, if you do not select any publisher_platforms
, Facebook considers all default publisher_platforms
. Facebook may also automatically consider new positions or platforms as they become available.
On Audience Network, you can limit which publishers display your ads. Exclude publishers by category, or create a custom list of app store URLs or domain URLs to exclude.
You cannot use only right_hand_column
alone as a placement for video, collection or canvas ads.
Inventory Filter helps you control whether your ads display next to different types content in Facebook Instant Articles, Facebook In-Stream and Audience Network. To learn more about these content categories, see Ads Help Center, Inventory Filter. You can choose one value for Facebook Instant Articles and Facebook In-Stream combined and one value for Audience Network. Options include: Full
, Standard
and Limited
. For details, see brand_safety_content_filter_levels
below:
Name | Description |
---|---|
type: Array of strings values. | For Facebook Instant Articles and Facebook In-Stream, we allow these values:
For Audience Network, we allow these values:
For example: |
type: Array of strings values | Includes: |
type: Array of numeric strings | Each string is a list ID for exclusions. Create custom lists in Ads Manager or Marketing API, Publisher Block List |
For example, to use brand_safety_content_filter_levels
:
curl \ -F 'name=My AdSet' \ -F 'optimization_goal=REACH' \ -F 'billing_event=IMPRESSIONS' \ -F 'bid_amount=2' \ -F 'daily_budget=1000' \ -F 'campaign_id=CAMPAIGN_ID' \ -F 'targeting= { "geo_locations":{"countries":["US"]}, "brand_safety_content_filter_levels":["FACEBOOK_STRICT","AN_STANDARD"]}' \ -F 'status=ACTIVE' \ -F 'access_token=ACCESS_TOKEN' \ https://graph.facebook.com/VERSION/AD_ACCOUNT_ID/adsets
For In-Stream video, you can also exclude publishers by category:
Name | Description |
---|---|
type: Array of string values | Includes:
Example: |
Use these targeting specs subfields: device_platforms
, publisher_platforms
, facebook_positions
, audience_network_positions
and instagram_positions
. device_platforms
are device types someone has who sees your ad. Use publisher_platforms
for publishing channel such as Instagram. xxxxxx_positions
are positions on a certain publishing channel if there are multiple:
Name: Options | Comments |
---|---|
| Optional. Default: All. |
| Optional. Default: Facebook, Instagram, Audience Network, Messenger |
| Optional. Default: All. Notes:
|
| Optional. Default: All. You can target Instagram carousel ads for Instagram |
| Optional. Default: All. By default, we don't return |
| Optional. Default: Notes:
|
The logic for options in the same parameter is “OR”. For example, publisher_platforms=['facebook','instagram']
means deliver ads on Facebook and Instagram. The logic between parameters is “AND”. For example, publisher_platforms=['facebook']&device_platforms=['mobile']
means deliver these ads to Facebook Mobile only. If the logic results in targeting no one, such as publisher_platforms=['instagram']& device_platforms=['desktop']
, you see an error.
audience_network
cannot be selected by itself. audience_network
as a placement with the video views objective must be used with the THRUPLAYS
optimization goal.story
for facebook_positions
by itself. If you select story
for facebook_positions
, you must also select Facebook feed
or Instagram Story.story
for messenger_positions
by itself. If you select story
for messenger_positions
, you must also select either Facebook feed or Instagram Story.To use Facebook Stories as your placement:
curl \ -F 'name=My Ad Set' -F 'optimization_goal=CONVERSIONS' -F 'billing_event=IMPRESSIONS' -F 'bid_amount=2' -F 'daily_budget=1000' -F 'campaign_id=<AD_CAMPAIGN_ID>' -F 'targeting={"geo_locations":{"countries":["US"]}, "publisher_platforms":["messenger", "facebook"], "facebook_positions":["story"], "messenger_positions":["story"]}' -F 'status=ACTIVE' -F 'access_token=<ACCESS_TOKEN>' https://graph.facebook.com/API_VERSION/act_AD_ACCOUNT_ID/adsets
To create an ad set with only instream_video
placement that targets a supported country listed above:
curl \ -F 'name=My AdSet' \ -F 'optimization_goal=REACH' \ -F 'billing_event=IMPRESSIONS' \ -F 'bid_amount=2' \ -F 'daily_budget=1000' \ -F 'campaign_id=CAMPAIGN_ID' \ -F 'targeting={"geo_locations":{"countries":["US"]},"publisher_platforms":["facebook"], "facebook_positions":["instream_video"]}' \ -F 'status=ACTIVE' \ -F 'access_token=ACCESS_TOKEN' \ https://graph.facebook.com/API_VERSION/act_AD_ACCOUNT_ID/adsets
To use Instant Articles as your placement:
curl \ -F 'name=My 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", "instant_article"]}' \ -F 'status=ACTIVE' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/<APIVERSION>/act<AD_ACCOUNT_ID>/adsets
To target the Audience Network Rewarded Video placement:
curl \ -F 'name=My Ad Set' \ -F 'optimization_goal=OFFSITE_CONVERSIONS' \ -F 'billing_event=IMPRESSIONS' \ -F 'is_autobid=true' \ -F 'daily_budget=40000' \ -F 'campaign_id=<AD_CAMPAIGN_ID>' \ -F 'targeting={"app_install_state": "not_installed","geo_locations":{"countries":["US"]},"facebook_positions":["feed"],"device_platforms": ["mobile"],"audience_network_positions": ["classic","rewarded_video"],"user_device": ["Android_Smartphone","Android_Tablet"],"user_os": ["Android_ver_4.4_and_above"]}' \ -F 'promoted_object={"application_id": "<APPLICATION_ID>","custom_event_type": "PURCHASE","object_store_url": "<OBJECT_STORE_URL>"}' \ -F 'status=ACTIVE' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/<APIVERSION>/<AD_ACCOUNT_ID>/adsets
This returns:
{ "targeting": { "audience_network_positions": [ "classic", "rewarded_video" ], "effective_audience_network_positions": [ "classic", "rewarded_video" ] }, "id": "<AD_SET_ID>" }
You create ad sets with placements in target spec, however you did not always know if Facebook delivered your ad to the placements specified. This is because your selected placement may not apply to your chosen advertising objective. With the effective placements API for targeting, you can now determine which placements your ad will deliver to, given your targeting options, and receive validation messages to understand why some placements are filtered out. If you do not provide targeting, you can still determine the effective placement based on ad set and ad campaign settings, see Effective Placements.
To read an effective placement based on your targeting, simply put effective_
before the placement fields. For example:
curl -G \ -d "fields=targeting{effective_publisher_platforms,effective_facebook_positions,effective_device_platforms,effective_audience_network_positions,effective_instagram_positions}" \ -d "access_token=<access_token>" \ https://graph.facebook.com/<VERSION>/<AD_SET_ID>
To see why some placements got filtered out, in the recommendation
field, get a filtering message:
curl -G \ -d "fields=recommendations" \ -d "access_token=<access_token>" \ https://graph.facebook.com/<VERSION>/23842573364570019