Как быстро добавить сегменты аудиторий для наблюдения в Google Ads

Приветствую друзья, если вы работаете с рекламой Google Ads то знаете как важно оптимизировать кампании, чтобы снижать расходы и увеличивать ROI. Для этого мы используем все доступные данные и чем их больше тем больше возможностей для оптимизации.

Многие из Вас используют сегменты аудиторий для таргетирования в контекстно-медийных сетях. А многие ли из Вас используют доступные сегменты аудиторий в режиме наблюдения?

Если да то Вы знаете что в данный момент Google не позволяет в пару кликов быстро добавить все доступные сегменты аудиторий в кампанию, кроме как использовать Google Ads Editor. Можно конечно добавить все аудитории прокликивая каждый раздел в одну кампанию а их более 900, и далее копировать, но это довольно муторно и что делать с уже готовыми кампаниями?

Я просканировал интернет и нигде не нашел готового решения. Поэтому с напарником в виде ИИ gemini написал сей скрипт для решения этой проблемы.

Инструкция по применению:

1. Переведите интерфейс рекламного кабинета Google Ads на английский, добавив в конец адресной строки параметр &hl=en, после того как закончите добавлять аудитории просто удалите его. Получится примерно так: https://ads.google.com/aw/overview?ocid=100&workspaceId=0&ascid=1001&euid=644&__u=924&uscid=100&__c=199&authuser=0&hl=en

2. Выберите раздел Audience и нажмите Add audience segments

seg1 2

3. Далее выбираем пункт Observation (Наблюдение) и нажимаем на Browse

seg2 2

4. Здесь открываем консоль (2) и вставляем javascript код (3), который представлен в конце статьи, и нажимаем enter

segallscript2

5. Ждём пока пока в консоли не появится уведомление «Процесс Завершен»

segallscript3 1

6. Нажимаем Save. Поздравляю вы сэкономили 40 минут и добавили 900+ аудиторий по которым будет собираться информация.

(async () => {
  // 1. Клик по "Who they are"
  const div1 = findDivByText("Who they are");
  div1?.click();

  // Пауза 1 секунда
  await new Promise(resolve => setTimeout(resolve, 1100));

  // 2. Раскрытие иконок
  await expandIcons();

  // Пауза 1 секунда
  await new Promise(resolve => setTimeout(resolve, 1100));

  // 3. Возврат к списку категорий
  const element1 = document.querySelector('i[aria-label="Return to category list"]');
  element1?.click();

  // Пауза 1 секунда
  await new Promise(resolve => setTimeout(resolve, 1100));

  // 4. Клик по "What their interests and habits are"
  const div2 = findDivByText("What their interests and habits are");
  div2?.click();

  // Пауза 1 секунда
  await new Promise(resolve => setTimeout(resolve, 1100));

  // 5. Раскрытие иконок
  await expandIcons();

  // Пауза 1 секунда
  await new Promise(resolve => setTimeout(resolve, 1100));

  // 6. Возврат к списку категорий
  const element2 = document.querySelector('i[aria-label="Return to category list"]');
  element2?.click();

  // Пауза 1 секунда
  await new Promise(resolve => setTimeout(resolve, 1100));

  // 7. Клик по "What they are actively researching or planning"
  const div3 = findDivByText("What they are actively researching or planning");
  div3?.click();

  // Пауза 1 секунда
  await new Promise(resolve => setTimeout(resolve, 1100));

  // 8. Раскрытие иконок
  await expandIcons();

  // Пауза 1 секунда
  await new Promise(resolve => setTimeout(resolve, 1100));

  // 9. Возврат к списку категорий
  const element3 = document.querySelector('i[aria-label="Return to category list"]');
  element3?.click();

  // Вывод сообщения "Процесс завершен"
  console.log("Процесс завершен");

})();

// Функция для поиска div-блока по тексту
function findDivByText(text) {
  const divs = document.getElementsByTagName("div");
  for (const div of divs) {
    if (div.textContent === text) {
      return div;
    }
  }
  return null;
}

// Функция для рекурсивного раскрытия иконок
async function expandIcons(i = 0) {
  try {
    const icons = document.querySelectorAll('material-icon[aria-label="Expand items"]');
    icons.forEach(icon => icon.click());

    if (i < 5) {
      i++;
      await new Promise(resolve => setTimeout(resolve, 1100));
      return expandIcons(i);
    } else {
      await new Promise(resolve => setTimeout(resolve, 1000));
      const checkboxes = document.querySelectorAll('material-checkbox');
      checkboxes.forEach(checkbox => checkbox.click());
    }
  } catch (error) {
    console.error(error);
  }
}