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 IMPRESSIONSpacing_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>/adsetsThis 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>/adsetsroas_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.