Pacing dan Penjadwalan

Menentukan bagaimana anggaran iklan Anda dibelanjakan dari waktu ke waktu. Ini memberikan kompetisi yang seragam di lelang iklan Facebook di semua pengiklan setiap hari dan secara otomatis mengalokasikan anggaran untuk iklan yang berbeda. Pacing berfungsi dalam cara yang sama untuk iklan yang dibuat dengan API, seperti dengan alat iklan Facebook, lihat Pusat Bantuan Iklan, Penayangan dan Pacing.

Anda dapat mengatur tiga opsi pacing di pacing_type saat Anda membuat atau memperbarui set iklan. Dengan pacing standar, kami memasukkan iklan Anda ke dalam setiap lelang yang relevan dan menyesuaikan tawaran Anda selama sehari untuk menghasilkan penayangan yang lancar dan optimal sesuai dengan tujuan dan anggaran Anda. Ini adalah pacing default.

Untuk mereset ke pacing standar:

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>

Penayangan dipacu menghapus semua penyesuaian pacing dari tawaran Anda. Kami memasukkan iklan Anda ke semua lelang yang memenuhi syarat dengan tawaran maksimum penuh. Anda dapat mencapai penayangan maksimum dengan biaya dan anggaran yang ditentukan. Hal ini mengakibatkan penayangan yang tidak lancar sepanjang hari; anggaran set iklan Anda mungkin habis sebelum hari berakhir. Untuk membuat sebuah set iklan dengan penayangan dipacu:

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

Anda dapat menonaktifkan pacing untuk skenario berikut:

  • Iklankan obral kilat atau promosi waktu terbatas
  • Tayangkan iklan dengan siaran langsung seperti acara olahraga, debat pemilihan.
  • Maksimalkan penayangan selama waktu-waktu penting dalam setahun seperti liburan atau musim kembali ke sekolah.

Jangan gunakan opsi ini ketika:

  • Kami kurang menayangkan iklan Anda karena tawaran Anda terlalu rendah atau penargetan terlalu sempit. Dalam kasus ini, kami telah menghapus pacing anggaran secara efektif, jadi penayangan yang dipercepat tidak akan membantu.

Lihat Set Iklan, Opsi Pacing, Referensi

Anda juga dapat mengatur pacing_type ke day_parting untuk kontrol yang lebih baik atas penjadwalan iklan. (Lihat "Ad Scheduling")

Penjadwalan Iklan

Tentukan hari dalam seminggu dan jam dalam sehari saat set iklan Anda berjalan di adset_schedule. Jadwal Anda berlaku untuk semua grup iklan di bawah set iklan. Lihat Penjadwalan Iklan, Blog. adset_schedule adalah array objek JSON. Setiap objek mewakili jadwal untuk satu hari. Contoh:

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

Untuk memperbarui penjadwalan iklan:

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>

Untuk menonaktfikan penjadwalan iklan:

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>

Untuk mendapatkan informasi penjadwalan iklan:

curl -X GET \ -d 'fields="adset_schedule"' \ -d 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/<AD_SET_ID>/
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdSet = bizSdk.AdSet; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_SET_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 = [ 'adset_schedule', ]; params = { }; const sample_code = (new AdSet(id)).get( fields, params ); logApiCallResult('sample_code api call complete.', sample_code);
require __DIR__ . '/vendor/autoload.php'; 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_SET_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( 'adset_schedule', ); $params = array( ); echo json_encode((new AdSet($id))->getSelf( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
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_SET_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ 'adset_schedule', ] params = { } print AdSet(id).get( 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_SET_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdSet(id, context).get() .requestAdsetScheduleField() .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_SET_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_set = FacebookAds::AdSet.get(id ,'adset_schedule')

Setiap array harus memiliki:

Nama Kolom Deskripsi

start_minute

jenis: int

0 menit berdasarkan hari. Saat jadwal dimulai

end_minute

jenis: int

0 menit berdasarkan hari. Saat jadwal berakhir

days

jenis: Array bilangan bulat

Jadwal hari aktif. Nilai valid: 0-6 di mana 0 adalah hari Minggu, 1 adalah Senin, dan 6 adalah Sabtu.

timezone_type

Opsional

Jika nilainya adalah "pengguna", zona waktu penonton. Jika nilainya adalah "penonton", zona waktu akun.

start_minute dan end_minute harus tepat pada jam dan harus setidaknya satu jam terpisah. Untuk Jangkauan dan Frekuensi, bagian hari harus minimal 4 jam. Contoh:

[{'start_minute':540,'end_minute':720,'days':[1,2,3,4,5]},{'start_minute':180, 'end_minute':360,'days':[0,6]}]

Batasan berikut berlaku:

  • Hanya gunakan penjadwalan iklan dengan anggaran sepanjang masa promosi.
  • Penjadwalan iklan berlaku untuk zona waktu pemirsa target untuk iklan dalam satu set, bukan zona waktu akun iklan. Jika zona waktu akun iklan Anda adalah Eastern Time (ET), tetapi iklan Anda menargetkan orang-orang di California di Waktu Pasifik (PST), ketika Anda menjadwalkan iklan dari pukul 18.00-21.00, kami mengirimkannya kepada orang-orang di California pukul 18.00-21.00 PST bukan ET.

Pertanyaan Umum

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.