Автоматическое исключение мест размещения

Значок инструментов

Иногда есть видео, целевая аудитория которых отличается от целевой аудитории вашей рекламы, но вы можете не знать об этом, пока не начнете собирать статистику. Как только вы увидите, что конкретное место размещения не работает так, как вы хотите, вы можете исключить его из таргетинга.

Этот скрипт автоматически определяет и исключает места размещения (не URL-адреса YouTube), которые не соответствуют порогу просмотра, установленному вами для ваших видеообъявлений.

Планирование

Скрипт учитывает статистику за последние 7 дней. Запланируйте его запуск еженедельно .

Как это работает

Для каждой кампании в вашем аккаунте скрипт выполняет один и тот же процесс:

  • Найдите статистику эффективности видео, в частности коэффициента просмотров, для данной кампании за последнюю неделю.
  • Для каждого URL-адреса, частота просмотров которого ниже определенного порога (настраивается), добавьте исключение таргетинга для этого места размещения, чтобы ваши объявления там больше не показывались.

Если рейтинг просмотров не является для вас самым важным показателем, вы можете изменить скрипт, чтобы использовать набор параметров, которые вы более цените при оценке мест размещения.

Параметры

Единственный параметр в этом скрипте — VIEW_RATE_THRESHOLD . Он определяет целевой процент просмотров рекламы пользователями. Размещения ниже этого порога должны быть исключены.

Настраивать

  • Создайте новый скрипт с исходным кодом ниже.
  • Обновите VIEW_RATE_THRESHOLD во вставленном коде.
  • Изучите критерии, используемые для определения момента исключения места размещения, и при необходимости обновите их.
  • Запланируйте запуск сценария еженедельно .

Исходный код

// Copyright 2016, Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.


/**
 * @name Automatic Placement Exclusions
 *
 * @overview The Automatic Placement Exclusions script analyzes the
 *     performance of your video ads across various placements, and then
 *     automatically excludes them from appearing for URLs that have
 *     underperformed based on VideoViewRate.
 *     See
 *     https://developers.google.com/google-ads/scripts/docs/solutions/automatic-placement-exclusion
 *     for more details.
 *
 * @author Google Ads Scripts Team [adwords-scripts@googlegroups.com]
 *
 * @version 2.0
 *
 * @changelog
 * - version 2.0
 *   - Updated to use new Google Ads scripts features.
 * - version 1.0
 *   - Released initial version.
 */


// The view rate under which placements will be automatically excluded.
let VIEW_RATE_THRESHOLD = '10.00%';

// Exclude any placements that don't have at least this many impressions in the
// last 7 days to reduce noise.
const MIN_IMPRESSIONS = 50;

function main() {
  VIEW_RATE_THRESHOLD = parseFloat(VIEW_RATE_THRESHOLD);
  const results = getReportResults();
  const ids = [];
  for (const id in results) {
    ids.push(id);
  }
  const videoCampaignIterator = AdsApp.videoCampaigns()
      .withIds(ids)
      .get();
  for (const videoCampaign of videoCampaignIterator) {
    const id = videoCampaign.getId();
    if (results.hasOwnProperty(id)) {
      const urls = results[id];
      for (const url of urls) {
        videoCampaign.videoTargeting().newPlacementBuilder()
            .withUrl(url)
            .exclude();
      }
    }
  }
}

function getReportResults() {
  const query = `SELECT campaign.id, ` +
        `detail_placement_view.target_url ` +
        `FROM detail_placement_view ` +
        `WHERE metrics.impressions >= ${MIN_IMPRESSIONS} ` +
        `AND metrics.video_view_rate < ` +
        `${(VIEW_RATE_THRESHOLD / 100)} ` +
        `AND segments.date DURING LAST_7_DAYS`;
  const report = AdsApp.report(query);
  const rows = report.rows();
  const results = {};
  for (const row of rows) {
    const campaignId = row['campaign.id'];
    const url = row['detail_placement_view.target_url'];
    if (!results.hasOwnProperty(campaignId)) {
      results[campaignId] = [];
    }
    if (results[campaignId].indexOf(url) < 0) {
      results[campaignId].push(url);
    }
  }
  return results;
}