確定廣告預算在特定時間範圍內的花費方式。此功能可讓所有廣告顧客每天在 Facebook 廣告競投內享有公平競爭,且能夠自動分配預算給不同的廣告。不論是以 API 或 Facebook 工具建立的廣告,當中的期間預測功能運作方式都一樣,請參閱廣告幫助中心 > 刊登與期間預測。
您可以在建立或更新廣告組合時,於 pacing_type
中設定三個期間預測選項。在標準期間預測設定中,我們會讓您的廣告參與每個相關競投,並隨著當日時間調整您的出價,以便按照您的目標與預算產出順利且最佳的刊登效果。這是預設的期間預測設定。
若要重設為預設的期間預測設定:
use FacebookAds\Object\AdSet;
use FacebookAds\Object\Fields\AdSetFields;
$adset = new AdSet(<AD_SET_ID>);
$adset->{AdSetFields::PACING_TYPE} = array('standard');
$adset->update();
from facebookads.adobjects.adset import AdSet
adset = AdSet(fbid=<AD_SET_ID>, parent_id='act_<AD_ACCOUNT_ID>')
adset.update({
AdSet.Field.pacing_type: ['standard'],
})
adset.remote_update()
new AdSet(<AD_SET_ID>, context).update()
.setPacingType("[\"standard\"]")
.execute();
curl \
-F 'pacing_type=["standard"]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/<AD_SET_ID>
加速刊登功能將從您的出價移除所有預設期間預測調節設定。我們會用完出價上限,讓您的廣告參與所有符合資格的競投。您可以使用指定成本與預算,獲得最佳的刊登效果。這樣的刊登效果可能不會一整天都同樣地順利,您的廣告組合預算可能會在當天結束前就花光。若要建立使用加速刊登功能的廣告組合:
use FacebookAds\Object\AdSet;
use FacebookAds\Object\Fields\AdSetFields;
use FacebookAds\Object\Fields\TargetingFields;
use FacebookAds\Object\Values\AdSetBillingEventValues;
use FacebookAds\Object\Targeting;
use FacebookAds\Object\Values\AdSetOptimizationGoalValues;
$adset = new AdSet(null, 'act_<AD_ACCOUNT_ID>');
$adset->setData(array(
AdSetFields::NAME => 'Ad Set without pacing',
AdSetFields::OPTIMIZATION_GOAL => AdSetOptimizationGoalValues::REACH,
AdSetFields::BILLING_EVENT => AdSetBillingEventValues::IMPRESSIONS,
AdSetFields::PACING_TYPE => array('no_pacing'),
AdSetFields::BID_AMOUNT => 2,
AdSetFields::DAILY_BUDGET => 1000,
AdSetFields::CAMPAIGN_ID => <CAMPAIGN_ID>,
AdSetFields::TARGETING => (new Targeting())->setData(array(
TargetingFields::GEO_LOCATIONS => array(
'countries' => array('US'),
),
)),
));
$adset->create();
from facebookads.adobjects.adset import AdSet
from facebookads.adobjects.targeting import Targeting
adset = AdSet(parent_id='act_<AD_ACCOUNT_ID>')
adset.update({
AdSet.Field.name: 'Ad Set without pacing',
AdSet.Field.optimization_goal: AdSet.OptimizationGoal.reach,
AdSet.Field.billing_event: AdSet.BillingEvent.impressions,
AdSet.Field.pacing_type: ['no_pacing'],
AdSet.Field.bid_amount: 2,
AdSet.Field.daily_budget: 1000,
AdSet.Field.campaign_id: <CAMPAIGN_ID>,
AdSet.Field.targeting: {
Targeting.Field.geo_locations: {
'countries': ['US'],
},
},
})
adset.remote_create()
AdSet adSet = new AdAccount(act_<AD_ACCOUNT_ID>, context).createAdSet()
.setName("Ad Set without pacing")
.setOptimizationGoal(AdSet.EnumOptimizationGoal.VALUE_REACH)
.setBillingEvent(AdSet.EnumBillingEvent.VALUE_IMPRESSIONS)
.setPacingType("[\"no_pacing\"]")
.setBidAmount(2L)
.setDailyBudget(1000L)
.setCampaignId(<CAMPAIGN_ID>)
.setTargeting(
new Targeting()
.setFieldGeoLocations(
new TargetingGeoLocation()
.setFieldCountries(Arrays.asList("US"))
)
)
.execute();
String ad_set_id = adSet.getId();
curl \
-F 'name=Ad Set without pacing' \
-F 'optimization_goal=REACH' \
-F 'billing_event=IMPRESSIONS' \
-F 'pacing_type=["no_pacing"]' \
-F 'bid_amount=2' \
-F 'daily_budget=1000' \
-F 'campaign_id=<CAMPAIGN_ID>' \
-F 'targeting={"geo_locations":{"countries":["US"]}}' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/adsets
您可以為下列情境停用期間預測功能:
您不應在以下情況使用此選項:
您亦可將 pacing_type 設為 day_parting
,以便有效控制廣告排定時間。請參閱 "Ad Scheduling"
。
在 adset_schedule
中指定您的廣告組合在每星期哪些日子和每日哪些鐘數刊登。您的預定時間會套用至廣告組合內的所有廣告群組。請參閱廣告排程,網誌。adset_schedule
為 JSON 物件的陣列。每個物件都代表單天的預定時間。例如:
use FacebookAds\Object\AdSet;
use FacebookAds\Object\Fields\AdSetFields;
use FacebookAds\Object\Fields\TargetingFields;
use FacebookAds\Object\Values\AdSetBillingEventValues;
use FacebookAds\Object\Targeting;
use FacebookAds\Object\Values\AdSetOptimizationGoalValues;
$adset = new AdSet(null, 'act_<AD_ACCOUNT_ID>');
$adset->setData(array(
AdSetFields::NAME => 'Ad Set with scheduling',
AdSetFields::OPTIMIZATION_GOAL => AdSetOptimizationGoalValues::REACH,
AdSetFields::BILLING_EVENT => AdSetBillingEventValues::IMPRESSIONS,
AdSetFields::PACING_TYPE => array('day_parting'),
AdSetFields::LIFETIME_BUDGET => 100000,
AdSetFields::END_TIME
=> (new \DateTime("+1 week"))->format(\DateTime::ISO8601),
AdSetFields::ADSET_SCHEDULE => array(
array(
'start_minute' => 540,
'end_minute' => 720,
'days' => array(1, 2, 3, 4, 5),
),
),
AdSetFields::BID_AMOUNT => 2,
AdSetFields::CAMPAIGN_ID => <CAMPAIGN_ID>,
AdSetFields::TARGETING => (new Targeting())->setData(array(
TargetingFields::GEO_LOCATIONS => array(
'countries' => array('US'),
),
)),
));
$adset->create();
import time
from facebookads.adobjects.adset import AdSet
from facebookads.adobjects.targeting import Targeting
adset = AdSet(parent_id='act_<AD_ACCOUNT_ID>')
adset.update({
AdSet.Field.name: 'Ad Set without pacing',
AdSet.Field.optimization_goal: AdSet.OptimizationGoal.reach,
AdSet.Field.billing_event: AdSet.BillingEvent.impressions,
AdSet.Field.pacing_type: ['day_parting'],
AdSet.Field.lifetime_budget: 100000,
AdSet.Field.end_time: int(time.time() + 7 * 24 * 3600),
AdSet.Field.adset_schedule: [
{
'start_minute': 540,
'end_minute': 720,
'days': [1, 2, 3, 4, 5],
},
],
AdSet.Field.bid_amount: 2,
AdSet.Field.campaign_id: <CAMPAIGN_ID>,
AdSet.Field.targeting: {
Targeting.Field.geo_locations: {
'countries': ['US'],
},
},
})
adset.remote_create()
AdSet adSet = new AdAccount(act_<AD_ACCOUNT_ID>, context).createAdSet()
.setName("Ad Set with scheduling")
.setOptimizationGoal(AdSet.EnumOptimizationGoal.VALUE_REACH)
.setBillingEvent(AdSet.EnumBillingEvent.VALUE_IMPRESSIONS)
.setPacingType("[\"day_parting\"]")
.setLifetimeBudget(100000L)
.setEndTime(end_time)
.setAdsetSchedule("[{\"start_minute\":\"540\",\"end_minute\":\"720\",\"days\":[\"1\",\"2\",\"3\",\"4\",\"5\"]}]")
.setBidAmount(2L)
.setCampaignId(<CAMPAIGN_ID>)
.setTargeting(
new Targeting()
.setFieldGeoLocations(
new TargetingGeoLocation()
.setFieldCountries(Arrays.asList("US"))
)
)
.execute();
String ad_set_id = adSet.getId();
curl \
-F 'name=Ad Set with scheduling' \
-F 'optimization_goal=REACH' \
-F 'billing_event=IMPRESSIONS' \
-F 'pacing_type=["day_parting"]' \
-F 'lifetime_budget=100000' \
-F 'end_time=2018-02-06T04:45:17+0000' \
-F 'adset_schedule=[
{
"start_minute": 540,
"end_minute": 720,
"days": [
1,
2,
3,
4,
5
]
}
]' \
-F 'bid_amount=2' \
-F 'campaign_id=<CAMPAIGN_ID>' \
-F 'targeting={"geo_locations":{"countries":["US"]}}' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/adsets
若要更新廣告排程:
use FacebookAds\Object\AdSet;
use FacebookAds\Object\Fields\AdSetFields;
$adset = new AdSet(<AD_SET_ID>);
$adset->setData(array(
AdSetFields::DAILY_BUDGET => null,
AdSetFields::LIFETIME_BUDGET => 100000,
AdSetFields::END_TIME
=> (new \DateTime("+1 week"))->format(\DateTime::ISO8601),
AdSetFields::PACING_TYPE => array('day_parting'),
AdSetFields::ADSET_SCHEDULE => array(
array(
'start_minute' => 720,
'end_minute' => 840,
'days' => array(1, 2, 3, 4, 5),
),
),
));
$adset->update();
import time
from facebookads.adobjects.adset import AdSet
adset = AdSet(fbid=<AD_SET_ID>, parent_id='act_<AD_ACCOUNT_ID>')
adset.update({
AdSet.Field.daily_budget: None,
AdSet.Field.lifetime_budget: 100000,
AdSet.Field.end_time: int(time.time() + 7 * 24 * 3600),
AdSet.Field.pacing_type: ['day_parting'],
AdSet.Field.adset_schedule: [
{
'start_minute': 540,
'end_minute': 720,
'days': [1, 2, 3, 4, 5],
},
],
})
adset.remote_update()
curl \
-F 'lifetime_budget=100000' \
-F 'end_time=2016-07-21T20:42:08+0000' \
-F 'pacing_type=["day_parting"]' \
-F 'adset_schedule=[
{
"start_minute": 720,
"end_minute": 840,
"days": [
1,
2,
3,
4,
5
]
}
]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.7/<AD_SET_ID>
若要關閉廣告排程:
use FacebookAds\Object\AdSet;
use FacebookAds\Object\Fields\AdSetFields;
$adset = new AdSet(<AD_SET_ID>);
$adset->setData(array(
AdSetFields::PACING_TYPE => array('standard'),
AdSetFields::ADSET_SCHEDULE => array(),
));
$adset->update();
from facebookads.adobjects.adset import AdSet
adset = AdSet(fbid=<AD_SET_ID>, parent_id='act_<AD_ACCOUNT_ID>')
adset.update({
AdSet.Field.pacing_type: ['standard'],
AdSet.Field.adset_schedule: [],
})
adset.remote_update()
new AdSet(<AD_SET_ID>, context).update()
.setPacingType("[\"standard\"]")
.setAdsetSchedule("[]")
.execute();
curl \
-F 'pacing_type=["standard"]' \
-F 'adset_schedule=[]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/<AD_SET_ID>
若要取得廣告排程資訊:
curl -X GET \
-d 'fields="adset_schedule"' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/<AD_SET_ID>/
每個陣列必須包含下列欄位:
欄位名稱 | 說明 |
---|---|
類型:整數 | 一日的 0 基準分鐘。排程開始時間 |
類型:整數 | 一日的 0 基準分鐘。排程結束時間 |
類型:整數陣列 | 預定時間的有效天數。有效值:0 至 6,0 為星期日,1 為星期一,而 6 為星期六。 |
選用 | 如果值為「用戶」,則此值為觀看者的時區。如果值為「廣告客戶」,則此值為帳戶的時區。 |
start_minute
和 end_minute
必須為整點,並必須相距最少一小時。若為觸及率和頻率,時段必須為最少 4 小時。例如:
[{'start_minute':540,'end_minute':720,'days':[1,2,3,4,5]},{'start_minute':180, 'end_minute':360,'days':[0,6]}]
須受以下限制約束:
For under-delivery, your bid price might be too low or your audience too narrow. Your bid should be in the suggested bid range so your ads win auctions and get placement. With competitive target audiences, you may need to bid above the suggested bid range. Or your targeting is too narrow.
If we over-deliver your ad, you might have a very large audience that quickly exhausts budget. If you believe that is not the case, contact us at Facebook Advertising Help.
If you're using campaign budget optimization, budget pacing is at the campaign level. Otherwise, budget pacing is done at the ad set level.
When you change budget, our systems have to learn the new optimal bid which takes time. During this time, your bids are not optimal and we can't maximize ROI. Therefore you should not change bid and budget frequently.
If you have to change these parameters, limit yourself to 2-3 times a day and only the early part of the day. This impacts pacing less than changing it often or later in a day.
Facebook optimizes pacing within a day, so this is not a problem.
Pacing may change. Since you switch from view-based billing to click-based billing, we re-adjust pacing.
Max bid is bid_amount
of an ad set you specify regardless of its optimization goal.
With ad scheduling, you schedule hours in a day and days in a week when your ads display to a target audience. You can have your ads display when they are most relevant to an audience. Pacing takes this schedule into account to calculate your effective, optimal bid. See ad scheduling.
From April 9th, 2014, we change the way budgets are spent on partial days at the beginning and end of ad set schedules. For ad sets with daily budgets, we adjust the first and last day spend based on the number of hours we have to deliver ads on those days. For example, if your ad set starts at 6PM, we try to deliver only 25% of daily budget between 6 PM and midnight.