広告掲載期間中の広告予算の消化方法を決定します。毎日、Facebookの広告オークションですべての広告主が均一の競争度で広告を配信できるようにし、異なる広告に自動で予算を割り当てます。ペーシングの機能は、APIで作成された広告ではFacebookのツールの機能の場合と同じです。広告ヘルプセンターで、広告配信とペーシングについてご覧ください。
広告セットを作成したりアップデートしたりする際、pacing_type
に3つのペーシングオプションを設定できます。標準のペーシングの場合、広告はすべての関連するオークションにかけられ、広告の目的と予算に応じてスムーズかつ最適に配信できるよう、1日で入札価格が調整されます。これが、デフォルトのペーシングです。
デフォルトのペーシングにリセットする方法は次のとおりです。
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>
スピード配信により、入札からペーシング調整がすべて削除されます。広告は、最高入札価格で、入札資格のあるすべてのオークションにかけられます。指定した単価と予算で最大限配信できます。その結果、広告は1日を通じてスムーズに配信されず、広告セットの予算はその日が終わる前にすべて消化されてしまう可能性があります。スピード配信で広告セットを作成する方法は次のとおりです。
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オブジェクトの配列です。各オブジェクトが1日のスケジュールを示します。以下はその例です。
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から始まる1日の時間(分)。スケジュール開始時間 |
型: 整数 | 0から始まる1日の時間(分)。スケジュール終了時間 |
型: 整数の配列 | スケジュールがアクティブな曜日。有効な値: 0~6 (0が日曜日、1が月曜日、6が土曜日)。 |
任意 | 値が"user"の場合は、視聴者のタイムゾーン。値が"advertizer"の場合は、アカウントのタイムゾーン。 |
start_minute
とend_minute
は正時でなければならず、その間に少なくとも1時間の差がなければなりません。リーチ&フリークエンシーの場合、日の部分は少なくとも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.