Cost Per Actions (CPA) allows you to specify conversion events and get charged by the amount of conversions. CPA for video views is also called CPV.
An alternative to CPA is oCPM, which charges per impressions served.
Your bid is defined for an ad set. These fields must follow the restrictions below:
| Name | Description |
|---|---|
| Defines the action you pay on. Set to |
| Defines the action you optimize for. Set to same value as your |
| Value you place on the objective, specified in cents, minimum 1 cent. For example, |
| For those ads which optimize for connections including |
Starting on v9, CPA billing for app ads is deprecated, you cannot set both billing event and optimization goal to APP_INSTALLS. Instead, we recommend using the impression billing events. You can still specify APP_INSTALLS under billing_event or optimization_goal, but not both at the same time.
See ad set document on allowed updates to ad sets.
The example below creates a CPA bidded ad set. Note that for CPA ad sets, you must set a promoted_object.
curl -X POST \
-F 'name="A CPA Ad Set"' \
-F 'campaign_id="<AD_CAMPAIGN_ID>"' \
-F 'daily_budget=5000' \
-F 'start_time="2025-11-18T14:06:35-0800"' \
-F 'end_time="2025-11-25T14:06:35-0800"' \
-F 'billing_event="IMPRESSIONS"' \
-F 'optimization_goal="REACH"' \
-F 'bid_amount=1000' \
-F 'promoted_object={
"page_id": "<PAGE_ID>"
}' \
-F 'targeting={
"facebook_positions": [
"feed"
],
"geo_locations": {
"countries": [
"US"
]
}
}' \
-F 'user_os="iOS"' \
-F 'publisher_platforms="facebook"' \
-F 'device_platforms="mobile"' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/act_<AD_ACCOUNT_ID>/adsets
After that, you can create ads and put them into this ad set following the creation flow here.
Change the bid to a CPA ad set:
curl -X POST \
-F 'billing_event="IMPRESSIONS"' \
-F 'optimization_goal="LINK_CLICKS"' \
-F 'bid_amount=200' \
-F 'targeting={
"geo_locations": {
"countries": [
"US"
]
},
"facebook_positions": [
"feed"
]
}' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/<AD_SET_ID>/
To create an ad bidding CPV, or CPA for video views, first create an ad campaign with objective=VIDEO_VIEWS.
curl -X POST \
-F 'name="Video Views campaign"' \
-F 'objective="OUTCOME_ENGAGEMENT"' \
-F 'status="PAUSED"' \
-F 'special_ad_categories=[]' \
-F 'is_adset_budget_sharing_enabled=0' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/act_<AD_ACCOUNT_ID>/campaigns
Then, set the CPA for video views bid_info at the ad set:
curl \
-F 'name=A CPV Ad Set' \
-F 'campaign_id=<CAMPAIGN_ID>' \
-F 'daily_budget=500' \
-F 'start_time=2018-02-06T04:45:29+0000' \
-F 'end_time=2018-02-13T04:45:29+0000' \
-F 'billing_event=VIDEO_VIEWS' \
-F 'optimization_goal=VIDEO_VIEWS' \
-F 'bid_amount=100' \
-F 'targeting={
"device_platforms": ["mobile"],
"geo_locations": {"countries":["US"]},
"publisher_platforms": ["facebook"]
}' \
-F 'status=PAUSED' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/act_<AD_ACCOUNT_ID>/adsets