Оптимизация рекламы в Яндекс.Директ только на целевые лиды без CRM: Пишем свой коннектор на Python и GAS
Всех приветствую! С апреля я плотно работаю над большим проектом по автоматизации рекламы (о нем я писал тут). За это время я реализовал множество функций, которые ежедневно экономят мне часы на оптимизации кампаний.
Сейчас основная версия уже разработана, я работаю над облегченной версией с урезанным функционалом, с которой я планирую поделиться со всеми и выкатить подробный гайд по внедрению. Хочу успеть до нового года, чтобы порадовать и сделать небольшой подарок вам.
Ну а сегодня я хочу поделиться интересным методом работы с офлайн-конверсиями. Это особенно актуально для тех проектов, где нет сложной сквозной аналитики или CRM-системы.
Кроме того, этот метод помогает бороться за качество трафика. При работе со стратегией "Оплата за конверсии" алгоритмы часто приводят дешевые, но "мусорные" заявки. Мой подход позволяет платить только за тех, кто реально прошел квалификацию.
Прежде чем я покажу, как собрать такую систему, давайте разберемся, как она работает. Допустим, на вашем сайте установлен коллтрекинг и форма заявки. Эти две цели вы используете для оптимизации кампаний и опираетесь на них в отчетах.
Суть метода заключается в том, чтобы создать в Метрике дополнительную JavaScript-цель. Выполнение этой цели мы будем передавать вручную и только после того, как менеджер квалифицировал лид и пометил его как целевой.
Чтобы реализовать эту идею нам понадобится:
JS-цель в Яндекс.Метрике.
API-токен Яндекс.Метрики (для доступа к отчетам).
Google Таблица для учета данных.
Доступы к Google API (файл json с ключами сервисного аккаунта).
Проект на Python (наш основной коннектор).
Скрипт на GAS (Google Apps Script) для внутренней автоматизации.
Создаем цель в Яндекс. Метрике
Для начала создаем цель в Яндекс. Метрике со следующими параметрами:
Получение API-токена для Яндекс.Метрики
Процесс регистрации приложения и получения токена я подробно разбирал в этой статье. Чтобы не дублировать информацию, рекомендую ознакомиться с инструкцией по ссылке.
Здесь отмечу лишь важный нюанс: при настройке доступов убедитесь, что у вашего приложения проставлены следующие разрешения (права):
- Создание счётчиков, изменение параметров своих и доверенных счётчиков.
- Загрузка параметров пользователей.
- Загрузка офлайн данных.
- Получение статистики, чтение параметров своих и доверенных счётчиков.
Возможно, некоторые права из этого списка покажутся избыточными для конкретной задачи передачи конверсий. Однако я использую единое приложение для всего стека автоматизации, поэтому рекомендую отметить их все сразу. Это застрахует вас от ошибок доступа («Access denied») при расширении функционала в будущем.
Cоздание Google таблицы
После того, как вы создали свое приложение, выдали доступы и получили токен теперь необходимо создать таблицу:
- Назовите ее, например, "Учет конверсий".
- Скопируйте название таблицы (оно понадобится для скрипта).
- Оставьте ее пока пустой, скрипт сам создаст нужные листы и заголовки.
Получаем доступ к Google API
Чтобы Python мог писать данные в вашу таблицу, нужно создать "Сервисный аккаунт". Это самый сложный этап для новичков, поэтому идите строго по пунктам.
- Зайдите в Google Cloud Console.
- Создайте новый проект (New Project), назовите его, например, MetrikaConnector.
- Включение API: В меню слева выберите APIs & Services -> Library.В поиске введите Google Sheets API, нажмите на него и нажмите Enable. Вернитесь в Library, найдите Google Drive API и тоже нажмите Enable.
- Создание доступов: Перейдите в APIs & Services -> Credentials. Нажмите + CREATE CREDENTIALS -> Service Account.Придумайте имя (например, Api_metrika), нажмите Create and Continue, затем Done.
- Получение ключа: В списке Service Accounts нажмите на только что созданный аккаунт (email адрес). Перейдите на вкладку Keys. Нажмите Add Key -> Create new key. Выберите тип JSON и нажмите Create. Файл автоматически скачается на компьютер. Переименуйте его в google_credentials.json.
- ВАЖНО: Доступ к таблице: Откройте скачанный JSON-файл в блокноте. Найдите строчку "client_email": "...". Скопируйте этот email (он длинный и странный).
- Откройте вашу созданную Google Таблицу. Нажмите кнопку "Настройки доступа" и вставьте скопированный email и дайте права Редактор (Editor).
Создаем основной проект на Python
Теперь, когда подготовительный этап завершен, можно приступать к сборке Python-проекта и первому тесту.
- Создайте новую папку в любом удобном месте (назовите её, например, lead_approved).
- Первым делом переместите в неё файл google_credentials.json, который вы скачали из Google Cloud Console.
Если вы ранее не использовали Python, вам необходимо его скачать:
Перейдите на официальный сайт python.org/downloads.
Нажмите большую желтую кнопку Download Python (сайт сам определит вашу операционную систему).
Запустите скачанный установочный файл.
🛑 ВНИМАНИЕ (Для Windows): В окне установки обязательно поставьте галочку напротив пункта «Add Python to PATH» (или «Add Python to environment variables»). Если этого не сделать, командная строка не поймет команду python, и скрипт не запустится.
Нажмите Install Now и дождитесь окончания.
- Откройте командную строку (Терминал):Windows (Самый простой способ): Зайдите в папку с вашим проектом (где лежат файлы), кликните левой кнопкой мыши в адресную строку проводника (там, где путь к папке), напишите cmd и нажмите Enter. Откроется черное окно сразу в нужной папке. macOS: Откройте Terminal, напишите cd (с пробелом на конце) и перетащите вашу папку из Finder прямо в окно терминала. Путь подставится сам. Нажмите Enter.
- Создаем виртуальное окружение: В командной строке введите: python -m venv venv (Если вы на macOS / Linux и команда не сработала, попробуйте python3 -m venv venv). После этого в вашей папке появится новая папка venv.
- Активируем окружение: Теперь нужно "войти" в это пространство. Команды отличаются для разных систем: Windows:venv\Scripts\activate macOS / Linux: source venv/bin/activate. Если всё прошло успешно, в начале строки в терминале появится надпись в скобках: (venv).
- Установка библиотек:Теперь, находясь внутри изолированного окружения, установим необходимые библиотеки (requests для запросов к API иgspread для таблиц). Остальные модули (json,datetime) уже встроены в Python. Введите команду:
Вы увидите процесс загрузки. Когда он закончится, ваша среда полностью готова к запуску скрипта.
Для написания кода нам понадобится удобный текстовый редактор. Можно использовать и стандартный "Блокнот", но есть риск ошибиться с кодировкой или расширением файла (например, случайно сохранить как .py.txt).
Лично я использую Sublime Text — он легкий, быстрый и отлично подходит для таких задач. Если у вас еще нет любимого редактора кода, рекомендую скачать и установить именно его.
Откройте Sublime Text (или ваш редактор), нажмите File -> New File и создайте внутри папки вашего проекта два файла:
Файл настроек: client_goal.json
Создайте новый файл, вставьте в него код ниже и сохраните под именем client_goal.json. Здесь мы будем хранить список проектов, ID счетчиков и цели, которые считаем "квалификационными" (например, отправка формы или звонок).
- client_name: Название листа, который создастся в Гугл Таблице.
- counter_id: Номер счетчика Яндекс.Метрики.
- goal_ids: ID целей из Метрики (через запятую, если их несколько), при срабатывании которых мы заносим лид в таблицу на проверку.
Основной скрипт: main.py
Создайте второй файл, вставьте в него весь код скрипта (приведен ниже) и сохраните как main.py.
Важно: Не забудьте вставить в начале файла (в блоке настроек) ваш OAuth-токен от Метрики и точное название вашей Google таблицы.
- METRIKA_TOKEN: Вставьте сюда ваш токен
- SPREADSHEET_NAME: Вставьте сюда название вашей Google таблицы
Начинаем тестировать
1. Открываем терминал и переходим в папку
- Для Windows: Нажмите Win + R, введите cmd и нажмите Enter.
- Для macOS: Нажмите Cmd + Space, введите Terminal и откройте его.
Теперь нужно «зайти» в папку проекта. Введите команду cd, поставьте пробел и просто перетащите папку проекта прямо в черное окно терминала — путь подставится сам.
Нажмите Enter.
2. Активируем виртуальное окружение
Если этот шаг пропустить, скрипт не найдет установленные библиотеки.
- Windows:
- macOS / Linux:
3. Запускаем скрипт
Скрипт запросит имя клиента (как в файле настроек) и даты. После ввода данных скрипт создаст новый лист в вашей Google Таблице и заполнит его конверсиями.
Давайте внимательней посмотрим на выгрузку:
Открыв таблицу, помимо привычных UTM-меток и ClientID, вы заметите два служебных столбца, которые скрипт создал автоматически. В них кроется вся суть метода.
- status (Статус обработки)По умолчанию скрипт ставит всем новым лидам статус new. Задача менеджера отдела продаж: Проверить эти лиды (прозвонить/сравнить с CRM) и изменить статус качественных заявок на "da" (или любой другой, который мы зададим в коде).Именно изменение статуса станет "спусковым крючком" для отправки конверсии в Яндекс.
- upload_id (ID выгрузки) Сейчас этот столбец пуст. Он нужен для защиты от дублей. Когда мы настроим финальную автоматизацию, скрипт будет записывать сюда уникальный идентификатор после успешной отправки данных в Метрику. Если в ячейке есть запись — система поймет, что этот лид уже учтен.
Сама по себе таблица — это просто хранилище данных. Чтобы все сработало и Яндекс узнал о целевых лидах, нам нужно связать Google Таблицу с API Метрики. Делать это мы будем прямо внутри таблицы с помощью Google Apps Script (GAS).
Скрипт для GAS
1. Открываем редактор скриптов. Находясь в вашей Google Таблице, в верхнем меню нажмите: Расширения (Extensions) -> Apps Script.
Откроется новая вкладка с редактором кода. Удалите всё, что там есть (обычно это пустая функция myFunction), и вставьте код ниже целиком.
В самой первой строке кода const AUTH_TOKEN = "..." обязательно замените текст в кавычках на ваш реальный OAuth-токен. Без этого скрипт не сработает.
Нажмите на иконку дискеты, чтобы сохранить проект. Назовите его, например, "Коннектор Метрики".
Настройка триггеров
Код написан, но он пока не знает, когда запускаться. Нам нужно добавить два "триггера" — события, которые будут будить наш скрипт.
В левом меню редактора нажмите на иконку будильника (Триггеры / Triggers), затем синюю кнопку «Добавление триггера» справа внизу.
Триггер №1: Мгновенная отправка
Этот триггер будет следить за вашими изменениями в таблице. Как только вы напишете da в статусе, он отправит данные.
- Выберите функцию: processEdit
- Выберите источник мероприятия: Из таблицы (From spreadsheet)
- Выберите тип события: При редактировании (On edit)
- Нажмите Сохранить.(Google попросит предоставить разрешения. Выберите свой аккаунт -> Advanced (Дополнительно) -> Go to ... (unsafe) -> Allow (Разрешить). Это стандартная процедура для своих скриптов).
Триггер №2: Проверка статуса обработки
Метрика обрабатывает загруженные файлы не сразу (иногда от 10 минут до 2 часов). Чтобы не проверять это вручную, настроим таймер.
Добавьте еще один триггер:
- Выберите функцию: checkConversionStatuses
- Выберите источник мероприятия: Триггер по времени (Time-driven)
- Выберите тип триггера: Часовой таймер (Hour timer)
- Выберите интервал: Раз в час (Every hour)
- Нажмите Сохранить.
Давайте протестируем
Тестируем триггер функции processEdit:
Как видите, данные передались в метрику, осталось только подождать и увидеть финальный статус. Это займет какое-то время.
Чтобы убедиться окончательно, переходим в Яндекс.Метрику -> Отчеты -> Конверсии. Найдите вашу цель lead_approved. Если вы видите там что появились данные — значит все заработало.
Готово! Теперь у вас есть полностью автономная система передачи офлайн-конверсий, которая не требует ежемесячной оплаты за дорогие коннекторы.