Перейти к содержанию
GetProfit

← Все материалы

Enhanced Conversions for Leads — настройка через Google Tag Manager

Когда сделка закрывается не на сайте, а в CRM через 2 недели — обычный Enhanced Conversions не помогает. Пошаговая настройка EC for Leads через GTM с импортом офлайн-конверсий.

Зачем это вообще нужно

Типичная ситуация для B2B и lead-gen:

  • Человек кликнул по рекламе в Google → оставил заявку на сайте «получить расчёт»
  • 4 дня менеджер ему звонит, готовит предложение, отправляет КП
  • Через 2 недели клиент подписывает договор — либо в офисе, либо в CRM, но не на сайте

Google Ads видит только первый шаг — submit формы. Smart Bidding оптимизируется на «заявку» как на конечную цель. Но дешёвая заявка ≠ закрытая сделка. Алгоритм учится приносить много дешёвых лидов, из которых закрывается, скажем, каждый 8-й. И тебе кажется, что реклама стала эффективной, хотя деньги ты ловишь только с каждого восьмого.

Раньше эту проблему решали через Offline Conversion Import (OCI) — выгружал из CRM список закрытых сделок с GCLID, загружал в Google Ads. Но GCLID часто теряется: Safari ITP стирает cookies, блокировщики режут параметры, UTM обрывается при переходах. Match rate падал до 40–50%.

Enhanced Conversions for Leads заменяет этот подход. Разница такая: вместо нестабильного GCLID передаёшь в Google хешированный email или телефон в момент заполнения формы. Позже, когда сделка закрылась — выгружаешь из CRM closed deals с тем же email. Google матчит две точки и восстанавливает цепочку «клик → заявка → закрытая сделка».

EC for Web vs EC for Leads — не путать

Это две разные штуки. Перед настройкой убедись, что тебе нужен именно Leads-вариант.

EC for WebEC for Leads
Конверсия происходит на сайте (покупка в интернет-магазине)Конверсия происходит офлайн (закрытие в CRM, звонок, подпись договора)
Дополняет существующий Google Ads Conversion Tracking тег — добавляет user data к тому же событиюОтдельный тег Google Ads User-Provided Data Event + последующий импорт офлайн-конверсий
Работает сразу после настройкиРаботает только когда регулярно выгружаешь closed deals
E-commerceB2B, lead-gen, high-ticket, курсы, медицина, строительство

Если у тебя e-commerce — иди в предыдущую статью про EC for Web. Эта — для лидогенерации с длинным циклом.

Когда использовать именно EC for Leads

  • Lead magnet → nurturing → закрытие в CRM
  • B2B, где от заявки до контракта проходит 1–8 недель
  • Agent-based sales: клиент оставляет заявку, сделку закрывает менеджер
  • High-ticket: курс, медицинская услуга, строительная услуга, авто

На практике это даёт:

  • Smart Bidding оптимизируется на закрытые сделки, а не на заявки → меньше «мусорных» лидов
  • +15–30% точность атрибуции — потому что матчинг идёт не через GCLID, а через email/phone
  • Прозрачный LTV воронки — видишь от клика до денег, а не до submit

Что должно быть до начала

  • ✅ Google Ads аккаунт с конверсией типа Lead (не Purchase, не Website Action — именно Lead)
  • ✅ Google Tag Manager на сайте
  • ✅ CRM или таблица, куда записываются закрытые сделки с email клиента (это критично — без этого EC for Leads не имеет смысла)
  • ✅ На thank-you странице (или сразу после submit формы) в dataLayer лежат данные клиента — email обязательно, телефон желательно
  • ✅ Приняты Customer Data Terms в Google Ads — обычно делает владелец аккаунта, не агентство

Сколько времени займёт

Сама настройка в GTM — 30–40 минут. Плюс отдельно надо настроить импорт офлайн-конверсий из CRM — это ещё 1–2 часа (Google Ads Data Manager или Zapier). Первые данные в Diagnostics увидишь через 24–72 часа после того, как через сайт пройдёт ≥20 конверсий.


Как это работает — схема за 1 минуту

  1. Пользователь кликает по рекламе → Conversion Linker в GTM сохраняет GCLID в first-party cookie
  2. Пользователь заполняет форму → на thank-you страницу пушится dataLayer с email/phone
  3. Тег Google Ads User-Provided Data Event срабатывает → хеширует email локально и отправляет в Google вместе с GCLID
  4. Google временно хранит хеш на своей стороне, ждёт сигнала о закрытой сделке
  5. Менеджер 1–8 недель работает с лидом, сделка закрывается в CRM
  6. Ты выгружаешь из CRM closed deals с полями: email, conversion_name, conversion_time, conversion_value
  7. Загружаешь в Google Ads через Data Manager / Zapier / API
  8. Google матчит: «А, этот email неделю назад кликнул по рекламе и оставил заявку» → атрибутирует конверсию к первичному клику

Шаг 1. Принять Customer Data Terms в Google Ads

1. Зайди в Goals (не Conversions!)

Заходишь в Google Ads → иконка «ключ» (Tools and settings) → раздел MeasurementGoals.

Это другой раздел, чем Conversions. Goals — это именно то место, где активируется EC for Leads.

2. Включи Enhanced Conversions for Leads

В Goals найди блок Enhanced conversions for leads. Переключи toggle на ON.

3. Выбери метод Google Tag Manager

Появится выбор метода имплементации. Три варианта:

  • Google Tag (gtag.js) — если нет GTM
  • Google Tag Manager — наш вариант
  • Google Ads API — server-side, не тема этой статьи

4. Прочитай и прими Customer Data Terms

Google покажет текст policy. Читаешь → ставишь галочку «I agree to the Customer Data Terms»Save. Статус должен смениться на Accepted.

Что ты подтверждаешь: у тебя есть законное основание передавать данные пользователя (consent в форме или legitimate interest), а в политике приватности написано, что данные могут передаваться в Google в хешированном виде.

⚠️ Если Terms не принимаются

«If you aren’t able to view terms, it’s because your account conversions are tracked by a manager account» — значит конверсии управляются из MCC. В таком случае Terms надо принять из parent MCC аккаунта, а не из дочернего. Зайди в MCC → Goals → Accept Terms. Это часто надо сделать именно владельцу бизнеса, агентство без доступа не сможет.


Шаг 2. Conversion Linker в GTM

Conversion Linker детектит GCLID в URL и сохраняет его в first-party cookie домена. Без него Google не сможет привязать хеш email к конкретному клику по рекламе.

Если у тебя уже стоит Google Ads Conversion Tracking — Conversion Linker скорее всего уже есть. Проверь в Tags. Если нет — создавай:

1. Создай Conversion Linker tag

  • GTM → Tags → New
  • Tag Type: Conversion Linker
  • Trigger: All Pages
  • Название: Conversion Linker
  • Save

Шаг 3. Проверь dataLayer после submit формы

Прежде чем лезть в настройки тега — убедись, что после submit формы данные клиента реально пушатся в dataLayer. Если их там нет — дальше делать нечего.

1. Открой свой сайт в Chrome DevTools

Заходи на страницу с формой заявки. F12 (или Cmd+Option+I на Mac) → вкладка Console.

2. Заполни тестовую заявку

Своим реальным email и телефоном (позже можно удалить из CRM). Нажимаешь Submit.

3. Посмотри dataLayer

В Console набери: window.dataLayer → Enter. Найди в ответе объект с событием после submit. Желаемый формат:

{
  event: "lead_submit",
  user_data: {
    email_address: "[email protected]",
    phone_number: "+380501234567",
    address: {
      first_name: "Ivan",
      last_name: "Petrenko",
      postal_code: "01001",
      country: "UA"
    }
  }
}

Имена полей у тебя могут быть другие — это нормально. Главное чтобы email был обязательно, телефон желательно. Запомни точные ключи — они понадобятся в Шаге 5.

⚠️ Если данных в dataLayer нет

Значит разработчик не сделал push. Дай ему вот этот фрагмент — его надо вставить в обработчик успешного submit формы (или на thank-you страницу):

window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
  event: "lead_submit",
  user_data: {
    email_address: "{{email_from_form}}",
    phone_number: "{{phone_from_form}}",  // формат E.164: +380...
    address: {
      first_name: "{{first_name}}",
      last_name: "{{last_name}}",
      postal_code: "{{postal_code}}",
      country: "UA"
    }
  }
});

Важно: передавай данные в plain text, без хеширования. Google сам захеширует их в браузере перед отправкой.


Шаг 4. Выбор способа сбора данных

Google даёт три варианта сбора user data. Вот сравнение:

МетодСложностьКогда выбирать
AutomaticМинимальнаяПростые формы. Но phone не собирается автоматом — только email и address
Manual (CSS Selectors)СредняяКогда нужен phone, но нет dev для dataLayer. Надо знать CSS-селекторы полей формы
Code (Data Layer)Высокая (нужен dev)Рекомендовано — самый стабильный вариант, максимальный Match rate

Дальше я показываю Code (Data Layer) — именно этот вариант Google рекомендует для максимальной точности. Если CSS-селекторы меняются при редизайнах — Manual «сломается тихо» и ты этого не заметишь. Data Layer — стабильный, если dev его сделал.


Шаг 5. Создай Data Layer Variables

В GTM: VariablesUser-Defined VariablesNew.

1. Переменная для email

  • Name: DLV - user email
  • Variable Type: Data Layer Variable
  • Data Layer Variable Name: user_data.email_address (или твой ключ)
  • Save

2. Повтори для всех полей

Создаёшь такие же переменные для:

  • DLV - user phoneuser_data.phone_number
  • DLV - first nameuser_data.address.first_name
  • DLV - last nameuser_data.address.last_name
  • DLV - postal codeuser_data.address.postal_code
  • DLV - countryuser_data.address.country

Чем больше полей передаёшь — тем выше Match rate у Google. Минимум = email. Идеал = email + phone + address.


Шаг 6. Создай Trigger для события lead_submit

1. Custom Event Trigger

  • GTM → TriggersNew
  • Trigger Type: Custom Event
  • Event Name: lead_submit — точно как в твоём dataLayer push
  • This trigger fires on: All Custom Events
  • Name: CE - lead_submit
  • Save

Шаг 7. Создай User-Provided Data Variable

1. Новая переменная типа User-Provided Data

  • Variables → New → Variable Type: User-Provided Data
  • Type: Code

2. Привяжи поля к DLV-переменным

  • Email: {{DLV - user email}}
  • Phone Number: {{DLV - user phone}}
  • First Name: {{DLV - first name}}
  • Last Name: {{DLV - last name}}
  • Postal Code: {{DLV - postal code}}
  • Country: {{DLV - country}}

Назови переменную UPD - Lead User Data → Save.

Если data уже захеширована на стороне сайта

Если по какой-то причине разработчик хеширует данные до того, как они попадают в dataLayer (бывает в параноидальных setups), надо:

  • Использовать Hex-encoded SHA256 (не Base64)
  • Префиксовать поля: sha256_email_address, sha256_phone_number, sha256_first_name и так далее
  • postal_code и countryне хешировать, оставлять plain text

В 99% случаев этого делать не надо — пусть хеширует Google. Проще и стабильнее.


Шаг 8. Google Ads User-Provided Data Event Tag

⚠️ Это НЕ Google Ads Conversion Tracking tag

EC for Leads использует отдельный тип тега — Google Ads User-Provided Data Event. Не путай с существующим Conversion Tracking тегом, который у тебя уже есть. Тот работает отдельно и его трогать не надо.

1. Создай тег

  • GTM → Tags → New
  • Tag Type: Google Ads User-Provided Data Event
  • Conversion ID: твой Google Ads Customer ID в формате AW-1234567890 (берётся из адреса аккаунта — убираешь дефисы)
  • User-Provided Data: {{UPD - Lead User Data}}

2. Привяжи trigger

Triggering: CE - lead_submit (созданный в Шаге 6).

Название: GAds - EC for Leads → Save.


Шаг 9. Preview + Publish

1. Preview

Нажми Preview вверху справа. Откроется Tag Assistant. Введи URL своего сайта → Connect.

2. Пройди воронку с submit формы

В открытом Tag Assistant-окне зайди на страницу с формой, заполни её, нажми Submit. В Tag Assistant появится событие lead_submit.

3. Проверь что тег сработал

  • Открой событие lead_submit в Tag Assistant
  • Секция Tags Fired → должен быть GAds - EC for Leads
  • Кликни на него → вкладка Properties
  • Проверь User-Provided Data: email, phone и остальные поля должны быть непустые

В Preview данные показываются в plain text — это нормально. Хеширование происходит позже, на лету, перед отправкой в Google.

4. Если тег в Tags Not Fired

Значит trigger CE - lead_submit не совпадает. Проверь:

  • Event name в dataLayer и Custom Event Trigger полностью одинаковые (регистр имеет значение)
  • Custom Event Trigger стоит на All Custom Events, а не на какой-то фильтр
  • В теге Triggering = CE - lead_submit, а не случайный All Pages

5. Publish

Когда всё работает — возвращайся в GTM → Submit → опиши версию («EC for Leads setup») → Publish. EC начинает работать на проде.


Шаг 10. Верификация через Network requests

Главная быстрая проверка — что данные реально летят в Google. Preview показывает локальную картину, а Network показывает реальные HTTP-запросы.

1. Открой DevTools → Network

Зайди на страницу с формой (в обычном режиме, не Preview). F12 → вкладка Network. Поставь галочку Preserve log.

2. Очисти логи и заполни форму

Нажми «корзину» в Network чтобы почистить. Заполни форму → Submit.

3. Найди запрос на google.com/pagead/form-data/

Отфильтруй Network по form-data или pagead. Должен быть запрос на адрес https://google.com/pagead/form-data/....

В Query String Parameters (или Payload) ищи параметры:

  • em= — hash email
  • pn= — hash phone
  • fn=, ln=, pc=, co= — остальные поля

Если видишь непустые значения этих параметров — данные реально летят в Google ✅. Если запрос есть, но параметры пустые — user_data где-то обрывается (вернись в GTM и проверь DLV-переменные).


Шаг 11. Импорт офлайн-конверсий (критический шаг)

⚠️ Без этого шага EC for Leads не работает

Весь смысл EC for Leads в том, чтобы связать submit формы (который в GTM) с закрытой сделкой (которая в CRM). Если ты шлёшь user data в Google, но никогда не выгружаешь closed deals — Google никогда не узнает о закрытых сделках, и атрибуция не обновится.

Есть три способа импорта:

Вариант A. Google Ads Data Manager (рекомендовано)

  1. Google Ads → Tools → Data ManagerConnect product
  2. Выбираешь источник: Google Sheets / BigQuery / Salesforce / HubSpot / SFTP / Cloud Storage / HTTP
  3. Настраиваешь расписание (ежедневно / ежечасно)
  4. Маппишь поля: email → User-Provided → Email, value → Conversion Value, timestamp → Conversion Time, currency → Currency
  5. Save → Test import

Формат CSV (для Google Sheets / SFTP):

email,conversion_name,conversion_time,conversion_value,conversion_currency
[email protected],Lead Closed,2026-04-24 14:30:00+00:00,5000,UAH
[email protected],Lead Closed,2026-04-24 15:12:00+00:00,12000,UAH

Вариант B. Zapier

Если у CRM нет нативной интеграции с Data Manager — бери Zapier. Trigger — «New Closed Deal in CRM», Action — «Google Ads: Upload Offline Conversion». Маппишь поля, запускаешь. Работает мгновенно.

Вариант C. Google Ads API

Если у тебя есть dev и ты хочешь полный контроль — через ConversionUploadService + UserIdentifier. Сложнее, но гибче. Рекомендую только если другие два варианта чем-то не подходят.

Частота импорта — ежедневно автоматически. Google принимает данные за последние 90 дней. То есть можешь запустить и навсегда забыть.


Шаг 12. Проверка в Google Ads Diagnostics

Через 24–72 часа после публикации (и когда через форму прошло ≥20 заявок):

  1. Google Ads → Tools → Conversions → клик на свою Lead конверсию
  2. Вкладка Diagnostics
  3. Раздел Enhanced conversions for leads
МетрикаЧто означаетЦель
Data received% конверсий, с которыми пришёл user data с сайта> 70%
Match rate% конверсий, где Google смог сматчить email с аккаунтом Google> 50%
StatusRecording / Not recordingRecording

Если Status = Not recording через 72 часа — тег вообще не fires или dataLayer пустой. Возвращайся в Preview.

Если Data received низкий (< 50%) — EC подключён не на всех конверсионных точках (возможно, у тебя несколько форм — каждая должна push user_data).

Если Data received высокий, Match rate низкий — проблема в формате данных (см. ниже).


Частые проблемы

ПроблемаПричинаКак фиксить
Status = Not recordingТег не firesGTM Preview → проверь trigger Custom Event = lead_submit
Match rate = 0%Данные пре-хешированы на сайте, но GTM считает их plain text (или наоборот)Или шли plain text (рекомендовано), или добавь префикс sha256_ к полям
Match rate низкий (< 30%)Неправильный формат телефонаФормат E.164: +380501234567 — плюс, без пробелов, скобок, дефисов
Email не матчитсяПробелы, верхний регистрПеред push в dataLayer: email.toLowerCase().trim()
«Terms are not accepted»Аккаунт под MCCПрими Customer Data Terms из parent MCC аккаунта
Conversions не импортируютсяEmail в CRM отличается от email на сайте (с пробелом, другим доменом)Перед upload — нормализуй: lowercase + trim. Проверь не добавляет ли CRM суффиксы типа +sales
EC молчит, но Consent Mode = deniedПользователь отказался от cookiesBy design. EC не шлёт данные без consent. Проверь % granted среди твоих пользователей.
Смарт-биддинг не меняет поведениеМало данных (< 30 закрытых сделок/мес)EC for Leads требует объёма. Для маленьких аккаунтов эффект проявится через 2–3 месяца

Что дальше — после 2–3 недель

  • Match rate стабилизируется на 50–80%. Google начинает видеть полную картину от клика до закрытой сделки.
  • Smart Bidding перекалибровывается — алгоритм замечает что часть «лидов» реально становится продажами, а часть — нет. Начинает вытягивать трафик, похожий на первых.
  • Можно переключить стратегию на Maximize Conversion Value с приоритетом на конверсию «Lead Closed» (а не просто «Lead Submit»). Теперь у Google есть данные, чтобы это делать.
  • Conversion Value Rules — если у тебя есть MQL → SQL → Closed с разными вероятностями, можно назначить разный вес. Например, Closed Deal = ×10 против MQL = ×1.

Дальше — зеркало этого на Facebook CAPI: шлёшь хешированный email в Facebook после form submit, а закрытые сделки — через Conversions API Offline Events. Логика та же.

✅ Короткий чек-лист

  • Google Ads → Goals → Enhanced conversions for leads = ON, метод GTM
  • Customer Data Terms приняты (из правильного аккаунта, если MCC)
  • Conversion Linker tag в GTM + trigger All Pages
  • После submit формы — в dataLayer есть user_data.email_address (plain text)
  • DLV-переменные созданы для email, phone, first_name, last_name, postal_code, country
  • Custom Event Trigger CE - lead_submit создан
  • User-Provided Data Variable (Code type) создана и привязана к DLV
  • Google Ads User-Provided Data Event tag создан с правильным Conversion ID
  • Preview verified — тег fires, user_data не пустое
  • Network verified — em=, pn= летят в google.com/pagead/form-data/
  • GTM контейнер опубликован
  • Настроен регулярный импорт closed deals из CRM через Data Manager / Zapier
  • Через 24–72 часа — Diagnostics: Status = Recording, Data received > 70%, Match rate > 50%