billing_event
defines events you want to pay for such as impressions, clicks, or various actions. Billing depends on the size of your audience and your budget.
For example, to optimize for POST_ENGAGEMENT
and pay per IMPRESSIONS
:
curl -X POST \
-F 'name="My First Adset"' \
-F 'lifetime_budget=20000' \
-F 'start_time="2024-05-20T06:15:04-0700"' \
-F 'end_time="2024-05-30T06:15:04-0700"' \
-F 'campaign_id="<AD_CAMPAIGN_ID>"' \
-F 'bid_amount=500' \
-F 'billing_event="IMPRESSIONS"' \
-F 'optimization_goal="POST_ENGAGEMENT"' \
-F 'targeting={
"facebook_positions": [
"feed"
],
"geo_locations": {
"countries": [
"US"
],
"regions": [
{
"key": "4081"
}
],
"cities": [
{
"key": 777934,
"radius": 10,
"distance_unit": "mile"
}
]
},
"genders": [
1
],
"age_max": 24,
"age_min": 20,
"behaviors": [
{
"id": 6002714895372,
"name": "All travelers"
}
],
"life_events": [
{
"id": 6002714398172,
"name": "Newlywed (1 year)"
}
],
"publisher_platforms": [
"facebook"
],
"device_platforms": [
"desktop"
]
}' \
-F 'status="PAUSED"' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v19.0/act_<AD_ACCOUNT_ID>/adsets
'use strict';
const bizSdk = require('facebook-nodejs-business-sdk');
const AdAccount = bizSdk.AdAccount;
const AdSet = bizSdk.AdSet;
const access_token = '<ACCESS_TOKEN>';
const app_secret = '<APP_SECRET>';
const app_id = '<APP_ID>';
const id = '<AD_ACCOUNT_ID>';
const api = bizSdk.FacebookAdsApi.init(access_token);
const showDebugingInfo = true; // Setting this to true shows more debugging info.
if (showDebugingInfo) {
api.setDebug(true);
}
const logApiCallResult = (apiCallName, data) => {
console.log(apiCallName);
if (showDebugingInfo) {
console.log('Data:' + JSON.stringify(data));
}
};
let fields, params;
fields = [
];
params = {
'name' : 'My First Adset',
'lifetime_budget' : '20000',
'start_time' : '2024-04-01T11:26:40-0700',
'end_time' : '2024-04-11T11:26:40-0700',
'campaign_id' : '<adCampaignLinkClicksID>',
'bid_amount' : '500',
'billing_event' : 'IMPRESSIONS',
'optimization_goal' : 'POST_ENGAGEMENT',
'targeting' : {'facebook_positions':['feed'],'geo_locations':{'countries':['US'],'regions':[{'key':'4081'}],'cities':[{'key':777934,'radius':10,'distance_unit':'mile'}]},'genders':[1],'age_max':24,'age_min':20,'behaviors':[{'id':6002714895372,'name':'All travelers'}],'life_events':[{'id':6002714398172,'name':'Newlywed (1 year)'}],'publisher_platforms':['facebook'],'device_platforms':['desktop']},
'status' : 'PAUSED',
};
const adsets = (new AdAccount(id)).createAdSet(
fields,
params
);
logApiCallResult('adsets api call complete.', adsets);
require __DIR__ . '/vendor/autoload.php';
use FacebookAds\Object\AdAccount;
use FacebookAds\Object\AdSet;
use FacebookAds\Api;
use FacebookAds\Logger\CurlLogger;
$access_token = '<ACCESS_TOKEN>';
$app_secret = '<APP_SECRET>';
$app_id = '<APP_ID>';
$id = '<AD_ACCOUNT_ID>';
$api = Api::init($app_id, $app_secret, $access_token);
$api->setLogger(new CurlLogger());
$fields = array(
);
$params = array(
'name' => 'My First Adset',
'lifetime_budget' => '20000',
'start_time' => '2024-04-01T11:26:40-0700',
'end_time' => '2024-04-11T11:26:40-0700',
'campaign_id' => '<adCampaignLinkClicksID>',
'bid_amount' => '500',
'billing_event' => 'IMPRESSIONS',
'optimization_goal' => 'POST_ENGAGEMENT',
'targeting' => array('facebook_positions' => array('feed'),'geo_locations' => array('countries' => array('US'),'regions' => array(array('key' => '4081')),'cities' => array(array('key' => 777934,'radius' => 10,'distance_unit' => 'mile'))),'genders' => array(1),'age_max' => 24,'age_min' => 20,'behaviors' => array(array('id' => 6002714895372,'name' => 'All travelers')),'life_events' => array(array('id' => 6002714398172,'name' => 'Newlywed (1 year)')),'publisher_platforms' => array('facebook'),'device_platforms' => array('desktop')),
'status' => 'PAUSED',
);
echo json_encode((new AdAccount($id))->createAdSet(
$fields,
$params
)->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount
from facebook_business.adobjects.adset import AdSet
from facebook_business.api import FacebookAdsApi
access_token = '<ACCESS_TOKEN>'
app_secret = '<APP_SECRET>'
app_id = '<APP_ID>'
id = '<AD_ACCOUNT_ID>'
FacebookAdsApi.init(access_token=access_token)
fields = [
]
params = {
'name': 'My First Adset',
'lifetime_budget': '20000',
'start_time': '2024-04-01T11:26:40-0700',
'end_time': '2024-04-11T11:26:40-0700',
'campaign_id': '<adCampaignLinkClicksID>',
'bid_amount': '500',
'billing_event': 'IMPRESSIONS',
'optimization_goal': 'POST_ENGAGEMENT',
'targeting': {'facebook_positions':['feed'],'geo_locations':{'countries':['US'],'regions':[{'key':'4081'}],'cities':[{'key':777934,'radius':10,'distance_unit':'mile'}]},'genders':[1],'age_max':24,'age_min':20,'behaviors':[{'id':6002714895372,'name':'All travelers'}],'life_events':[{'id':6002714398172,'name':'Newlywed (1 year)'}],'publisher_platforms':['facebook'],'device_platforms':['desktop']},
'status': 'PAUSED',
}
print AdAccount(id).create_ad_set(
fields=fields,
params=params,
)
import com.facebook.ads.sdk.*;
import java.io.File;
import java.util.Arrays;
public class SAMPLE_CODE_EXAMPLE {
public static void main (String args[]) throws APIException {
String access_token = \"<ACCESS_TOKEN>\";
String app_secret = \"<APP_SECRET>\";
String app_id = \"<APP_ID>\";
String id = \"<AD_ACCOUNT_ID>\";
APIContext context = new APIContext(access_token).enableDebug(true);
new AdAccount(id, context).createAdSet()
.setName(\"My First Adset\")
.setLifetimeBudget(20000L)
.setStartTime(\"2024-04-01T11:26:40-0700\")
.setEndTime(\"2024-04-11T11:26:40-0700\")
.setCampaignId(\"<adCampaignLinkClicksID>\")
.setBidAmount(500L)
.setBillingEvent(AdSet.EnumBillingEvent.VALUE_IMPRESSIONS)
.setOptimizationGoal(AdSet.EnumOptimizationGoal.VALUE_POST_ENGAGEMENT)
.setTargeting(
new Targeting()
.setFieldAgeMax(24L)
.setFieldAgeMin(20L)
.setFieldBehaviors(Arrays.asList(
new IDName()
.setFieldId(6002714895372L)
.setFieldName(\"All travelers\")
))
.setFieldDevicePlatforms(Arrays.asList(Targeting.EnumDevicePlatforms.VALUE_DESKTOP))
.setFieldFacebookPositions(Arrays.asList(\"feed\"))
.setFieldGenders(Arrays.asList(1L))
.setFieldGeoLocations(
new TargetingGeoLocation()
.setFieldCities(Arrays.asList(
new TargetingGeoLocationCity()
.setFieldDistanceUnit(\"mile\")
.setFieldKey(777934L)
.setFieldRadius(10L)
))
.setFieldCountries(Arrays.asList(\"US\"))
.setFieldRegions(Arrays.asList(
new TargetingGeoLocationRegion()
.setFieldKey(\"4081\")
))
)
.setFieldLifeEvents(Arrays.asList(
new IDName()
.setFieldId(6002714398172L)
.setFieldName(\"Newlywed (1 year)\")
))
.setFieldPublisherPlatforms(Arrays.asList(\"facebook\"))
)
.setStatus(AdSet.EnumStatus.VALUE_PAUSED)
.execute();
}
}
require 'facebook_ads'
access_token = '<ACCESS_TOKEN>'
app_secret = '<APP_SECRET>'
app_id = '<APP_ID>'
id = '<AD_ACCOUNT_ID>'
FacebookAds.configure do |config|
config.access_token = access_token
config.app_secret = app_secret
end
ad_account = FacebookAds::AdAccount.get(id)
adsets = ad_account.adsets.create({
name: 'My First Adset',
lifetime_budget: '20000',
start_time: '2024-04-01T11:26:40-0700',
end_time: '2024-04-11T11:26:40-0700',
campaign_id: '<adCampaignLinkClicksID>',
bid_amount: '500',
billing_event: 'IMPRESSIONS',
optimization_goal: 'POST_ENGAGEMENT',
targeting: {'facebook_positions':['feed'],'geo_locations':{'countries':['US'],'regions':[{'key':'4081'}],'cities':[{'key':777934,'radius':10,'distance_unit':'mile'}]},'genders':[1],'age_max':24,'age_min':20,'behaviors':[{'id':6002714895372,'name':'All travelers'}],'life_events':[{'id':6002714398172,'name':'Newlywed (1 year)'}],'publisher_platforms':['facebook'],'device_platforms':['desktop']},
status: 'PAUSED',
})
Once you select optimization_goal
, you may have one or more billing_event
options. See Optimization Goal and Billing Events
and CPA
.
buying_type
is the way in which the advertiser pays for their delivery, defined on the campaign
level. Most of the time we just use AUCTION
, but there are a few special cases where we either bill based off of prediction, known as RESERVED
, or use a fixed price means of negotiating the price an advertiser will pay, known as FIXED_CPM
. Campaigns with buying_type
require ad sets
with a billing_event
defined.
Valid billing_event
s for each buying_type
:
AUCTION | RESERVED | FIXED_CPM | |
---|---|---|---|
|
✓ |
✓ |
✓ |
|
✓ |
||
|
✓ |
||
|
✓ |
||
|
✓ |
For buying_type=AUCTION
campaigns
, with an optimization_goal
set, we have restrictions on what billing_event
you can choose for your ad set
.
In the restrictions below, we assume you have an objective
specified on the campaign
level.
`optimization_goal` | Valid ad set `billing_event` |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|