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.
You can choose between a daily or a lifetime budget, as well as a cost per thousand impressions bid (CPM) or cost per click bid (CPC). Facebook uses maximum bids for billing; this means if you bid $5 cost per click (CPC), you'll be charged no more than $5. In most cases, you'll be charged less.
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="2023-09-26T02:26:09-0700"' \
-F 'end_time="2023-10-06T02:26:09-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/v18.0/act_<AD_ACCOUNT_ID>/adsets
Once you select optimization_goal
, you may have one or more billing_event
options. See Optimization Goal and Billing Events and CPA.
For example, imagine you have a campaign with optimization_goal
of APP_INSTALLS
and bid_amount
as $10.00. You can choose IMPRESSIONS
or APP_INSTALLS
as billing_event
. If Facebook could perfectly estimate the chance someone installs your app 100%, either choice gives you the same number of impressions, the same number of installs, and the same total budget spent.
With 1% chance of install per view and 1,000 views, you would get 10 installs for $100.00 or less. If billing_event
is IMPRESSIONS
, each impression costs is about $0.10, which is bid_amount
times probability of optimization_goal
. If billing_event
is APP_INSTALLS
, each installation costs $10.00 or less.
In reality, results from two different billing_event
s vary due to budget pacing and variance between actual actions and our predictions.
IMPRESSIONS
exampleImagine a Mobile App Install ad with these settings:
optimization_goal
: APP_INSTALLS
optimization_goal
probability from Facebook: 1%bid_amount
: $10.00billing_event
: IMPRESSIONS
bid_amount
optimization_goal
probability, or lessAfter 1,000 Accounts Center accounts see your ad and you spend $100.00, it's possible only .5%, or 5 Accounts Center accounts install your app. So your actual cost per installation (CPI) is $20.00 or less; more than your bid_amount
at $10.00. However, while CPI here exceeds bid_amount
, it's unlikely to happen after you run a campaign a while and you see a reasonable amount of installs. This improves Facebook predictive models, ads delivery, and your costs and results. Generally, CPI may be slightly higher than bid_amount
for campaigns with very short durations or with very few actions taken.
APP_INSTALLS
ExampleHere is an example of a Mobile App Install ad, which demonstrates a principle you should understand about any ads experiencing sparse events. This campaign has these settings:
optimization_goal
: APP_INSTALLS
optimization_goal
from Facebook: 1%bid_amount
: $10.00billing_event
: APP_INSTALLS
bid_amount
) or lessdaily_budget
: $100.00Facebook's ad pacing tries to evenly deliver ads and spend your budget over time. If you get 10 app installs in the morning, your daily budget is spent. Your ad gets no more delivery and you have very uneven delivery. Alternately, if your ad gets 3 installs quickly, but then few Accounts Center accounts install it later, our systems increases your effective bid to spend your budget. But day's end, your ad only gets 5 installs and it's also under-delivered.
In these examples your cost per install is $10.00 or less, but you miss smooth ads delivery. Because app install events are relatively sparse, it is hard to pace evenly. Other sparse events include PAGE_LIKES
and OFFER_CLAIMS
.
IMPRESSIONS
as billing_event
Use IMPRESSIONS
when you have a budget-constrained campaign, and you want to have the campaign delivered smoothly, with all budget spent by the end time. In this case, our pacing system quickly adjusts to impression-based billing.
To be certain CPI is less than or equal to bid_amount
, do not use IMPRESSIONS
as billing_event
. This has some variance based on actual actions taken. Use APP_INSTALLS
.
APP_INSTALL
or other actions as billing_event
Use APP_INSTALL
or other actions as billing_event
for bid-constrained campaigns. This means your budget is high enough to avoid pacing issues and your priority is cost per action no higher than bid_amount
. In these cases, your average cost per action is less than or equal to bid_amount
.
If your ad set has limited budget and you need smooth delivery. This means we adjust effective bid over time so it generates as many optimization_goals
possible for your budget. See Ad Delivery and Pacing.
For frequent events such as POST_ENGAGEMENT
and LINK_CLICKS
, uneven pacing and infrequent billing_event
s are unlikely. If you set billing_event
to a frequent event, Facebook can keep your cost per action close to bid_amount
or lower, while having smooth delivery.
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 | |
---|---|---|---|
| ✓ | ✓ | ✓ |
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ |
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.
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` |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|