Due to the launch of iOS 14.5, the following changes have been made:
target_cost
bid strategy has been deprecated with Marketing API v9. Campaigns using this bid strategy will no longer be supported and the delivery will be paused. Instead of target_cost
, we recommend that you use cost cap bidding.COST_CAP
or LOWEST_COST_WITH_MIN_ROAS
, the duration must be set to at least 3 days.Please visit our changelog for more information about iOS 14.5 changes.
This page explains how bid strategies affect your bid and your cost controls over Meta ads, and how to set them up.
LOWEST_COST_WITHOUT_CAP
: Facebook automatically bids on your behalf and gets you the lowest cost results. Automatically increase your effective bid as needed to get the results you want based on your given optimization_goal
. If you choose Value
as an optimization_goal
, in Ads Manager, we display Highest Value
as your bid strategy.COST_CAP
: Get the most results possible while we strive to meet the cost per action you set. Note: Adherence to cost cap limits is not guaranteed. See Cost Cap.LOWEST_COST_WITH_MIN_ROAS
: Specific bidding option for value optimization. You must specify a roas_average_floor
, which is the minimum return wanted from ads spend. See Minimum Return on Advertiser Spend Bidding.LOWEST_COST_WITH_BID_CAP
: We automatically bid for you and get the lowest costs. We automatically increase your bid as needed to get the results you want, however do not surpass your specified limit.See the table below for more details on each strategy:
Bid Strategy | Compatible Objectives | When To Use | Considerations |
---|---|---|---|
|
| You want to spend your full budget. You need to understand what bid and cost to use for other bid options. You need to spend your given budget as efficiently as possible. | No control over your cost. Costs can rise as you exhaust least expensive opportunities or as you increase budget. |
| You want to maximize the results with controlling the cost-efficiency of avgera cost per conversion. For iOS 14.5 campaigns, duration must be set to 3 days. | Cost may rise as you run out of cheapest opportunities. May not spend full budget once you hit the cap. | |
| If Return On Ad Spend is the primary measure of success, and you are able to pass back transaction values to our platform. | Specific to value optimization. Setting the benchmark too high may lead to under-delivery. For iOS 14.5 campaigns, duration must be set to 3 days. | |
| You want to set a max bid across auctions to control cost and reach as many users as possible at that bid. | Need to spend more time managing bids to control cost. Costs can rise as you exhaust cheaper opportunities or increase your budget. May not spend full budget. Bid is not the cost you’ll see in reporting. |
LOWEST_COST_WITH_MIN_ROAS
, COST_CAP
, and LOWEST_COST_WITH_BID_CAP
are also called manual bidding and it enables you to add additional cost controls. For background, see Ads Help Center, About bid strategies: Lowest cost.
To read bid_strategy
from an ad set:
curl -G \ -d 'fields=bid_strategy' \ -d 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/<VERSION>/<AD_SET_ID>
To update an ad set's bid strategy to LOWEST_COST_WITH_BID_CAP
with a bid cap of $3 USD:
curl -F 'bid_strategy=LOWEST_COST_WITH_BID_CAP' \ -F 'bid_amount=300' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/<VERSION>/<AD_SET_ID>
In earlier versions of the API, you choose bidding strategy by setting is_autobid
, is_average_price_pacing
and bid_amount
.
is_autobid
and is_average_price_pacing
were boolean flags which indicated if you choose automatic bidding or average price bids. Both were deprecated with the release of Marketing API version 3.0.
Cost cap is a cost-based bid feature that enables advertisers to express and optimize against the actual cost (CPA/CPI) of conversions. This feature allows advertisers to get the most results possible while we strive to meet their desired cost, allowing them to maximize cost efficiency, reducing complexities of managing bids, and helping advertisers scale more profitably and confidently. Note: Adherence to cost cap limits is not guaranteed.
To use cost cap:
billing_event
must be IMPRESSIONS
pacing_type
must be standardoptimization_goal
must be compatible with cost capTo use a cost cap bid strategy in campaign budget optimization, in addition to the requirements listed above, your objective should also work with cost cap. For more information about compatible objectives, see Your Guide to Facebook Bid Stategies, Cost Cap.
For example, to use a cost cap at the ad campaign level:
curl -F "name"="L3 With Lifetime Budget" \ -F "objective"="LINK_CLICKS" \ -F "lifetime_budget=100000" \ -F "bid_strategy"="COST_CAP" \ -F "access_token"="ACCESS_TOKEN" \ https://graph.facebook.com/VERSION/AD_ACCOUNT_ID/campaigns
To set a cost cap at the ad set level:
curl \ -F 'name=My Ad Set' \ -F 'optimization_goal=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
This is a specific bidding option for value optimization. As such, you must already be eligible for value optimization, which has several prerequisites:
optimization_goal
must be VALUE
.The account should have access to value optimization, which you can query from your ad account:
CAN_USE_ROAS_VALUE_OPTIMIZATION
- Account is eligible to value optimization when campaign objective = “Website Conversion”
ADS_NEKO_MAI_ROAS
- Account is eligible to value optimization when campaign objective = “App Install”
CAN_USE_DYNAMIC_ADS_VALUE_OPTIMIZATION
- Account is eligible to value optimization when campaign objective = “Catalog Sales”
Min ROAS bidding uses bid_constraints
to pass the “ROAS floor”
, but you cannot use with bid_constraints
. Instead use roas_average_floor
.
Notes about roas_average_floor
:
roas_average_floor
represents “the mininum roas” = “total conversion purchase value” / “total spend”
; for example, “return on ads spend”
roas_average_floor
is an integer and scaled up 10000x. So roas_average_floor = 100
means “the minimum roas” = 0.01 (or 1%), and roas_average_floor = 23300
means “the mininum roas” = 2.33 (or 233%). For example, to set minimum ROAS to be 1.5
, the corresponding API spec should be bid_constraints = {"roas_average_floor": 15000}
.roas_average_floor
is [100, 10000000]
, inclusive. This means that the valid range of “minimum ROAS” is [0.01, 1000.0]
or [1%, 100000.0%]
, inclusive.bid_info
or bid_amount
with the minimun ROAS bidding ad set. You can only set the 'bid'
of minimum ROAS through roas_average_floor
in bid_constraints
.{ "bid_strategy": "LOWEST_COST_WITH_MIN_ROAS", "bid_constraints": { "roas_average_floor": <roas_average_floor number> }, }
The API call below creates a min ROAS bidding ad set, with campaign objective = “website conversion” and ROAS floor = 1.0
(or 100%).
curl \ -F 'name=minRoasBiddingDemo' \ -F 'daily_budget=2000' \ -F 'optimization_goal=VALUE' \ -F 'promoted_object={"pixel_id": "<PIXEL_ID>", "custom_event_type": "PURCHASE"}' \ -F 'targeting={"geo_locations":{"countries":["US"]}}' \ -F 'campaign_id=<CAMPAIGN_ID>' \ -F 'status=PAUSED' \ -F 'start_time=2018-12-10T12:45:26-0700' \ *-F 'bid_strategy=LOWEST_COST_WITH_MIN_ROAS' \ -F 'bid_constraints={"roas_average_floor": 10000}' \* -F 'billing_event=IMPRESSIONS' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/<VERSION>/act_<AD_ACCOUNT_ID>/adsets
roas_average_floor
from minimum ROAS bidding ad setcurl \ -F bid_strategy=LOWEST_COST_WITHOUT_CAP \ -F 'bid_constraints={}' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/<VERSION>/act_<AD_ACCOUNT_ID>/<ad set ID>
roas_average_floor
to value optimization ad setThis example sets the minimum ROAS to 1.23
(123%):
curl \ -F 'bid_strategy=LOWEST_COST_WITH_MIN_ROAS' \ -F 'bid_constraints={"roas_average_floor": 12300}' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/<VERSION>/act_<AD_ACCOUNT_ID>/<ad set ID>
roas_average_floor
for existing minimum ROAS bidding ad setThis API call changes the ad set's roas_average_floor
to 2.23
(223%).
curl \ -F 'bid_constraints={"roas_average_floor": 22300}' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/<VERSION>/act_<AD_ACCOUNT_ID>/<ad set ID>
LOWEST_COST_WITH_BID_CAP
is also called manual bidding and it enables you to add additional cost controls in the bid_amount
field.COST_CAP
, you must provide a cap number in the bid_amount
field.bid_amount
if you are using the LOWEST_COST_WITH_MIN_ROAS
strategy.