Как интегрировать AmoCRM с Google Analytics бесплатно без помощи программистов за пару часов, пошаговая инструкция. Как посчитать LTV каналов.
Зачем вам это?
Ранее мы выкладывали статью, как сделать сквозную аналитику через Google SpreadSheets, она подходит небольшим компаниям, где один менеджер, чаще он же собственник и рекламный бюджет не более 100 т.р. в месяц.
Но что делать, если компания растет, появляется отдел продаж и одной таблицей уже не отделаться — нужна CRM, чтобы было так.
Кому нужна интеграция AmoCRM c Google Analytics
- Рекламный бюджет 100-1000 т.р.
- Несколько каналов трафика, например, вы вкладываете деньги в контекст, а у вас лиды из органического поиска
- Несколько услуг или категорий товаров со своей экономикой (разная допустимая стоимость лида)
- По некоторым категориям окупаемость со второго чека, но повторные продажи не попадают в Google Analytics
- Вы пробовали повышать рекламный бюджет, но рентабельность падает
- Выросли из ROIStat
Что вы получите в интерфейсе Google Analytics
Вы смотрите на количество KPI (Лиды) и CPA (Стоимость лида) и вроде бы все ОК
Но вам нужно смотреть выручку для полноценной оптимизации, обычно это позволяет сэкономить 20-40% бюджета, например, на скрине ниже видим рекламные кампании, которые расходуют 10% от рекламного бюджета, но не приносят выручки.
Вы сможете посчитать LTV за 3 месяца в Google Analytics
Например, на графике в первой строке Сентябрь и колонке Сентябрь мы видим пользователей, которые пришли на сайт первый раз с контекстной рекламы и купили на сумму 12556 р, далее эти же пользователи в Октябре купили на сумму 27517 р. и так далее, а в феврале эти же пользователи, которые пришли с контекста в сентябре, купили на сумму 2426 р, а за весь период пользователи с сентября купили на сумму 55091 р., что существенно отличается от выручки за первый месяц.
Например, мы потратили на контекст в сентябре 20 т.р., и глядя на 12556 р. выручки они не окупились, а если смотреть на 6 месяцев, то вполне.
То есть, без сквозной аналитики вы можете упустить сегменты, которые окупаются не сразу, например.
Реализация
Перед продолжением чтения настоятельно рекомендуем прочитать предыдущую статью (~15 минут), чтобы было легче понять текущую, так как некоторые термины и механики наслаиваются именно на предыдущую статью.
Рассмотрим пример сквозной аналитики на AmoCRM, в статье предполагается, что вы уже используете AmoCRM и знаете, как работают воронки, что такое статусы сделок, чем контакт отличается от сделок.
Можно весь путь поделить на 3 части:
- Как лиды попадают в AmoCRM
- Как происходит передача данных из AmoCRM в Google Analytics (далее GA)
- Как потом импортировать повторные продажи в GA
Сначала рассмотрим этап Лид > AmoCRM
Лид можно создавать в AmoCRM посредством API, но для этого нужно уметь программировать, при хорошем ТЗ можно сделать все за пару часов, но мы же пойдем более простыми путями, какие варианты есть?
Готовые интеграции
Например, у коллтрекинга ROIStat есть готовая интеграция с AmoCRM, благодаря которой при каждом уникальном звонке внутри AmoCRM создаются новые сделки.
Аналогичные интеграции есть у JivaSite, CallTouch и прочих, но мы не проводили подробного исследование. Но при рассмотрении готовых интеграций вам критически важно, чтобы подобная интеграция передавала в AmoCRM значение Google Client ID.
Что такое Google Client ID (далее CID)
Небольшое отступление.
CID это основная сущность, вокруг которой крутятся все данные в Google Analytics, по факту, это кука браузера.
Например, пользователь оставил заявку на сайте и ушел с него, заявка попала в нашу CRM. Мы потом отправляем в Google Analytics выручку по заявке, но GA нужно понять, кто оставил заявку на сайте, для этого мы передаем Client ID и он понимает, что по такому то Client ID был последний раз посетитель с контекста и присваивает транзакцию контекстной рекламе.
Так вот, чтобы потом передать CID с выручкой в GA и конверсия корректно присвоилась источнику, нужно сначала извлечь этот CID на сайте c помощью кода и передать в AmoCRM, откуда данные по сделке будут переданы в GA вместе с CID.
Поговорим, как это сделать чуть позже, пока просто поймите, что это такое.
Нет готовой интеграции, но есть вебхук
Большинство сервисов умеют отправлять вебхуки (webhook), это URL -запрос, который содержит данные о лиде.
Если это так, то мы можем принять такой вебхук на сервисе Zapier и передать то, что нам нужно в AmoCRM. Zapier, это своеобразный коннектор, которые принимает запрос, выполняет простую логику и отправляет в другое место.
Далее давайте рассмотрим, как реализовать подобную схему, например, с формами и коллтрекингом.
Формы на сайте
В предыдущей статье мы писали о том, как отправить форму в Zapier, повторяться не будем, продолжим с момента, когда мы получили данные и нам нужно отправить их в AmoCRM
C помощью hurl.it создаем вебхук на наш URL в Zapier с тестовыми данными.
Внутри Zapier получаем
Теперь у нас есть данные о лида в Zapier и нам нужно передать их в AmoCRM, делается это не совсем тривиально, поэтому давайте объяснять что к чему буду последовательно, а сначала просто жмите на кнопки, как на картинках.
Следующим выбираем виджет AmoCRM и Find Contact (Найти контакт).
Подключаем аккаунт AmoCRM
Email — Ваш email для входа в AmoCRM
Api Key — Находится в настройках AmoCRM
На вкладке Edit options (Редактировать опции) выбираем следующие настройки
В поле Query (запрос) вставляем номер телефона, что значит виджет: посмотрит есть ли такой номер в базе, и если нет, то создаст новый, чтобы не дублировать контакты. Вместо номера можно проверять по email и прочим контактным данным.
Галочку на Create amoCRM Contact if it doesn't exist yet? (Создавать контакт, если его не существует).
Заполняем остальные поля
Проходим остальные этапы и отправляем в AmoCRM
Если после теста нажать на view your contact, то мы увидим данные о контакте, который мы создали или который уже был создан в базе до нас.
Поясню основные поля ответа
Мы создали только контакт, но не лид. В AmoCRM структура контакта имеет следующий вид:
То есть клиента/контакт может иметь много активных сделок.
Теперь нам нужно создать сделку, но таким образом, чтобы не было дублей сделок. Например, клиент оставил заявку, у нас в AmoCRM создалась сделка, мы с ней работаем, но потом клиент заходит к нам на сайт, совершает звонок и в AmoCRM создается вторая сделка, которая дублирует первую.
То есть нам при создании сделки нужно проверять есть ли активные сделки у данного контакта и если есть, то не создавать.
Что значит активная сделка? В AmoCRM есть воронка, логика продвижения сделок может быть разная, например, вы можете с первого статус перевести сделку сразу в последний, но ключевых статусов всего 3:
- Первичное обращение, где сделка только появляется
- Успешно реализовано, когда сделка состоялась
- Закрыто не реализовано, когда сделка была отменена
Нам нужна такая логика, когда при создании новой сделки, виджет будет проверять есть ли активная сделка для данного контакта в промежуточных статусах, например «Звонок», «Встреча» или «Оформление договора» и если есть, то новый лид создаваться не будет, а если сделка в статусе «Успешно реализовано», то, возможно, клиент обращается повторно, тогда нужно создать новую сделку.
Для этого выбираем виджет
Далее заполняем поля
Нажимаем view your link и видим ответ
Расшифруем
Что за ID статуса в воронке? Помимо того, что каждый этап (статус) воронки имеет название, например «Звонок», он также имеет и ID, которые можно посмотреть в инспекторе кода браузера F12 или Вид > Разработчик > Инспектор кода.
Нажимаем на курсор, а затем выделяем статус, справа в инспекторе мы увидим ID статуса, которые пригодится нам на следующем этапе.
Следующим виджетом создаем фильтр и выбираем Only continue if..
В качестве условия указываем «Если ID статуса не соответствует X, то пропускаем на следующий этап», то есть если ID статуса сделки (сделка=лид), который мы получили на предыдущем этапе не равен ID активного статуса, то пропускаем на следующий этап, где будем создавать новую сделку.
Попробую еще раз, на предыдущем этапе мы проверяли есть ли у контакта созданные лиды (лиды=сделки), проверили и получили информацию о последнем лиде, в том числе ID статуса, на котором он находится, например «Оформление договора» (ID можно посмотреть в инспекторе). Но мы знаем, что нам не нужно повторно создавать новую сделку для данного контакта, если у него уже есть сделка в статусе «Оформление договора», тогда создаем условие «Если ID статуса последнего лида не равно ID статуса Оформление договора, то идем на следующий этап, а если равно, то останавливаем процесс и не создаем лид»
Следовательно, условие будет выглядеть так
«Продолжаем, если Unique Status Identifier c предыдущего этапа не равен Х», где Х, это статус сделки, при котором создавать новую сделку не нужно «Оформление договора», «Встреча» и прочее.
Так как активных статусов у нас много, то все добавляем, как отдельные условия, нажимая + AND.
Следующий этап, это создание сделки, так как в предыдущих этапа мы выяснили, что активной сделки по контакту нет. Выбираем виджет AmoCRM и функцию Create lead(Создать лид).
Лид создается по аналогии с созданием контакта, заполняем следующие поля
Мы заранее создаем пользовательское поле ga_client_id в AmoCRM на уровне сделки, куда будем вставлять Google Client ID
Вставляем, также рекомендую создать поле Источник лида, куда можно вставлять название источника (Коллтрекинг, Формы, Чат) в виде константы, чтобы потом была возможность сверять значения, которые мы отправили и получили.
Теперь отправляем тестовый лид в AmoCRM и смотрим на его появление, но это еще не все, так как мы создали две сущности: контакт и лид, но они не связаны с друг другом, для этого создаем следующий виджет AmoCRM c действием Create Link (Создать связь)
И связываем лид с контактом, которые создали на прошлых этапах
Отправляем тестовый запрос на связывание лида с контактом, которые мы по отдельности создали ранее и проверяем, как внутри AmoCRM в созданном лиде появится контакт.
Далее активируем коннектор
Пробуем создать еще один лид, но с другим именем и номером телефона через hurl.it , чтобы проверить весь коннектор в действии.
Если у вас возникли проблемы, то вы можете посмотреть журнал исполнения коннектора во вкладке Task History
Все, данный пункт готов, теперь у нас создаются лиды из вебхука и не дублируются, если клиент, например, звонит второй раз.
Рассмотрим этап AmoCRM > Google Analytics
Давайте попробуем передавать успешные сделки и их выручку в Google Analytics. Что такое Успешная сделка, это сделка, которая перешла в статус «Успешно реализовано». Следовательно сделаем новый коннектор в Zapier, которые будет каждые 5 минут проверять сделки в AmoCRM и отправлять данные сделок, которые перешли в статус «Успешно реализовано»
Создаем новый коннектор (Zap) и выбираем виджет AmoCRM, в нем функцию Lead Status Changed (Сделка изменила статус)
Проходим все остальные этапы, нажимаем Fetch & Continue и получаем данные последнего лида, который изменил статус, чтобы посмотреть их нажимаем view your lead
Основные параметры, которые нам потребуются, это
status_id — новый id статуса, то есть актуальный
old_status_id — старый id статуса
Следующим этапом создаем виджет Filter c действием Only continue if.., внутри выбираем переменную Unique status identifier (ID статуса). Ранее мы уже делали подобный мехинизм.
И задаем условие (Text) Exactly matches со значением 142
Независимо от других статусов, статус «Успешно реализовано» всегда имеет ID 142
То есть на следующий этап будут проходить только те лиды, у которых статус изменился на Успешно реализовано
Следующим действием мы создаем виджет Webhook с функцией POST -запроса
Теперь немного отвлечемся на Measurement Protocol Google Analytics
Отправка транзакций в Google Analytics через Measurement Protocol (далее MP)
Простыми словами, это URL-запрос, который содержит сумму транзакции, Client ID и прочие параметры.
google-analytics.com/collect?v=1&t=transaction&tid=UA-1234567-12&cid=99bbab0e-3145-4e98-a40c-a3c1f23aeeb6&ti=4567DT&ta=2&tr=3000.00
Из чего он состоит?
http://google-analytics.com/collect— Адрес, на который Google Analytics принимает запросы.
? – Знак, после которого начинается перечисление параметров.
& – Разделитель для параметров, что-то вроде запятой.
Итого у нас получается
http://google-analytics.com/collect?название параметра=значение&название параметра=значение
Какие параметры должны быть внутри запроса для передачи транзакции?
v=версия протокола, всегда 1
t=тип данных, в нашем случае транзакция transaction
tid=идентификатор счетчика UA-ХХХХХХХ-Х
cid=идентификатор куки браузера, Google Client ID
ti=идентификатор транзакции, например 4567DT
tr=сумма транзакции в формате 3000.00 или 1000.00 (два знача после точки)
Помимо обязательных параметров можно добавить дополнительные, например
ta=название магазина, филиала, мы, например, передаем ID менеджера, чтобы потом смотреть у кого больше продаж
Пример заполненных значений
v=1
t=transaction
tid=UA-1500844-34
cid=99bbab0e-3145-4e98-a40c-a3c1f23aeeb6
ti=4567DT
ta=2
tr=3000.00
Итого у нас получится
Тестирование запроса
У Google Analytics есть Hit Builder, это сервис, где вы можете собрать и протестировать запрос. Вот пример запроса, который мы собрали выше.
Вводим необходимые параметры и нажимаем Validate hit
У нас появляется окно, что запрос валидный (рабочий), так же мы можем отправить его в Google Analytics, но учтите, что он появится в отчетах не сразу, а примерно через полчаса.
Посмотреть транзакции можно в соответствующем отчете
Продолжаем настраивать передачу транзакций из AmoCRM
Берем MP-запрос по передаче транзакций и копируем в Zapier
Далее нам нужно заменить значения параметров на наши из предыдущего этапа.
Итого
Тестируем запрос, отправляем и заходим в Google Analytics Отчет по транзакциям за сегодня, но стоит заметить, что транзакция приходит не сразу, а в среднем в течении 15 минут
Сохраняем и активируем запрос
Оффлайн-транзакции клиента
Предположим, что мы закрыли первую сделку, но как передавать повторные продажи, чтобы посмотреть, сколько клиент приносит за несколько следующих месяцев.
На нашей практике часто взаимодействие с клиентом продолжается не через CRM, а через внутреннее ПО для управления организацией, например, 1C.
В данном случае мы даем клиенту формат запроса и говорим, чтобы он отправлял со своего сервера при повторных поступлениях с клиента POST-запросы
http://google-analytics.com/collect?v=1&t=transaction&tid=UA-1234567-12&cid=99bbab0e-3145-4e98-a40c-a3c1f23aeeb6&ti=4567DT&tr=3000.00
cid=Google Client ID
&ti=номер транзакции в базе клиента
&tr=сумма повторной сделки
Следовательно ему нужно будет к себе в базу данных забрать Google Client ID, чтобы потом использовать его для отправления запросов
Отчеты
По умолчанию, если пользователь не заходил на сайт после отправки формы с сайта, то офлайн-транзакция присваивается последнему источнику, то есть контекстной рекламе, например.
Контекстная реклама > Прямой переход на сайт > Конверсия
Но, часто, для небольших проектов самым важным взаимодействием является первое, то есть откуда пришел пользователь изначально, например.
Контекстная реклама > Поиск Google > Социальные сети > Прямой переход на сайт > Конверсия
В стандартных отчетах Google Analytics вы этого не увидите, нужно смотреть в отчетах: по ассоциированным конверсиям и lifetime value.
Ассоциированные конверсии
Заходим в отчет Конверсии > Ассоциированные конверсии
Выбираем настройки, как на скрине, период задаем свой.
Conversion — Тип конверсии, который вы исследуете, например, транзакция.
Look-back Window — просто ставьте 90 дней.
First Interaction Analysis — модель атрибуции, когда конверсия присваивается первому взаимодействию, это как раз то, о чем мы говорили выше.
Ниже у нас будут актуальные данные в столбике First Click Conversion Value (Первое взаимодействие)
Следовательно, вы видим, что канал платного трафика принес нам 300400 р. по первому взаимодействию.
Чтобы посмотреть в разрезе рекламных кампаний, выберете Campaign или другие необходимые параметры
Когороты
Например, мы хотим посмотреть, сколько выручки принесли клиенты с контекстной рекламы, которые впервые зашли на сайт с контекстной рекламы в сентябре.
В отчете Аудитория > Lifetime value выбираем период приобретения пользователей
И смотрим ниже в отчете, сколько выручки принесли эти клиенты в разрезе рекламных кампаний в последующие 3 месяца с момента приобретения пользователей в сентябре.
Стоит заметить, что исследование и подбор оптимальной модели атрибуции, это тема отдельной статьи, выше же я описал наиболее частый случай.
Действия
Окей, мы видим данные по окупаемости вложений в разрезе рекламных кампаний и что делать?
Одно из основных свойств аукциона контекстной рекламы, что с ростом охвата повышается его стоимость, например мы можем купить 40 лидов по 2000 рублей, а 80 лидов уже по 3000 рублей
У нас есть 2 варианта: повышать охват или понижать, но нам нужно найти оптимальное значение при котором прибыль будет максимальной
Как это сделать технически можете прочитать в отдельной статье про оптимизацию, но это целая история, которая требует недели практики и усвоения.
Следовательно мы можем оптимизировать рекламные кампании и получить большую прибыль.
Траблшутинг
- Семплинг
Если у вас большой проект, то мы не сможете выгрузить 100% данных, так как GA ограничивает эту возможность в целях экономии своих ресурсов. Например Вы хотите посмотреть выручку за Х период в разрезе когорты, но из за семплинга увидете только 50% выручки. Как правило в отчете пишется, что он построен на основании 7.68% сессий, то есть на 7% данных.
По теме семплинга можете почитать в интернете, но мы в итоге писали свои скрипты для выгрузки данных без семплинга через API, другого решения не нашли.
- Если у вас клиент купил велосипед, а потом через полгода снова зашел на сайт и купил второй велосипед, то в GA для вас это будет разные пользователи и вы не увидите, что изначально он пришел с контекстной рекламы. Решение есть, но оно выходит из темы данной статьи и оно сложное, как правило, небольшим проектам данные показатели не нужны.
- В рамках интерфейса можно смотреть LTV только 90 дней, больше можно выгружать только через API, но у вас будут проблемы из за пункта выше.
Заключение
В итоге мы имеем рабочее решение, которой можно развернуть и отладить за пару часов без специальных знаний.
Стоит признаться что схема сквозной аналитики через GA далеко не идеальна, имеет массу ограничений. Пробовали западные инструменты MixPanel, Segmento, KissMetrics, но они дорогие и не так хорошо интегрируются с остальными системами, поэтому Google Analytics. Пробовали ROIStat, он слишком «деревянный».
Сейчас такое понимание, что у бизнеса есть много задач, которые связаны со сбором данных и их агрегированием, и сайт, это только часть из них, следовательно, в качестве решения мы видим базу данных, в которую будут стекаться все данные из Google Analytics, 1С Бухгалтерии, CRM-систем, систем управления проектами, производства и прочего. Но это уже не сквозная аналитика, а задача сбора и анализа данных компании, для этих задач мы используем Google BigQuery, но это отдельная тема.