Перейти к контенту
БОЛЬШИЕ·ПРОДАЖИ Пульт →
Все документы

Meta Ads · UTM атрибуция и Pixel

Что прописать в каждом объявлении Meta Ads, чтобы воронка видела источник каждого лида до уровня кампания × ад-сет × креатив. Плюс настройка Pixel и Conversion API.

Аудитория: медиабайер/маркетолог, настраивающий рекламу. Этот документ — единственное, что нужно открыть при создании кампании.

⚙️ Технический as-built CAPI и Pixel-стека (May 2026)24-tracking-runbook.md. Раздел “Conversion API (CAPI)” ниже описывал план; runbook описывает уже задеплоенную реализацию (Make scenario id 4743595, 3 HTTP-модуля, backfill-скрипт, верификация).

1. Что ловит наша воронка (что приходит в payload)

Каждая заявка приходит на Make webhook с этим набором:

Поле в payloadОткуда берётсяПример
attribution.utm_sourceURL-параметр ?utm_source=facebook
attribution.utm_mediumURL-параметр ?utm_medium=paid_social
attribution.utm_campaignURL-параметр ?utm_campaign=bp-kz-cold-stage1
attribution.utm_contentURL-параметр ?utm_content=ad-vid-objection-15s
attribution.utm_termURL-параметр ?utm_term=adset-realestate-women-30-45
attribution.fbclidMeta добавляет автоIwAR...
attribution.gclidGoogle Ads добавляет авто (не нужно для Meta)
attribution.yclidЯндекс Директ добавляет авто
tierИз лендинга (/ = standard, /vsl = vip, etc.)standard
countryИз лендинга (/kg* = KG, остальное = KZ)KZ
variant_idСтабильный id лендинга для A/Bhome

→ Всё это первое касание (first-touch merge): если человек переходит по рекламе, а потом ходит по сайту, его исходные UTM не теряются.

2. URL-параметры — что вставлять в каждое объявление

В Meta Ads Manager у каждого объявления есть поле «URL parameters» (на уровне Ad, не Campaign).

🟢 Рекомендуемый формат (вставить как есть)

utm_source={{site_source_name}}&utm_medium=paid_social&utm_campaign={{campaign.id}}&utm_content={{ad.id}}&utm_term={{adset.id}}

Что подставит Meta автоматически:

  • {{site_source_name}}facebook / instagram / messenger / audience_network (в зависимости от того, где увидел объявление)
  • {{campaign.id}} → ID кампании (стабильный, не меняется при ребрендинге названия)
  • {{adset.id}} → ID ад-сета
  • {{ad.id}} → ID конкретного креатива
  • fbclid → Meta добавит автоматически в конец, не вписывать руками

Почему ID, а не имена ({{campaign.name}}):

  • ID — стабильны навсегда; имена меняются ад-менеджерами и ломают историю
  • ID не содержат кириллицы / пробелов / спецсимволов — не нужно URL-encode
  • В отчётах Make/Sheet всё-равно строим JOIN на ID, имена тянем из Meta API при разборе

🟡 Альтернатива — читаемые имена

Если хочешь, чтобы в Slack-уведомлении сразу было понятно, какая кампания сработала (а не 120203...), используй {{campaign.name}} — но только при условии что имена кампаний латиницей и без пробелов:

utm_source={{site_source_name}}&utm_medium=paid_social&utm_campaign={{campaign.name}}&utm_content={{ad.name}}&utm_term={{adset.name}}

Тогда строго соблюдать соглашение по неймингу (см. ниже).

3. Соглашение по неймингу кампаний/ад-сетов/креативов

Если используешь {{*.name}}, держи имена в этом формате — иначе UTM придёт сломанным.

Кампания

bp-{country}-{stage}-{tier}
  • country: kz / kg
  • stage: cold (холодная аудитория) / warm (ретаргет) / lookalike / interests
  • tier: standard / vip / exclusive / magnet

Примеры:

  • bp-kz-cold-standard — Казахстан, холодная, на /
  • bp-kg-cold-vip — Кыргызстан, холодная, на /kg/vsl
  • bp-kz-warm-exclusive — Казахстан, ретаргет, на /exclusive
  • bp-kz-cold-magnet — Казахстан, холодная, на /guide

Ад-сет

{icp}-{age}-{gender}
  • icp: ICP сегмент (например realestate / services / wholesale / b2b)
  • age: 25-34 / 30-45 / 35-55
  • gender: m / w / all

Примеры:

  • realestate-30-45-w — риелторы, 30-45 лет, женщины
  • services-25-40-all — услуги, 25-40 лет, все

Креатив (Ad)

{format}-{hook}-{duration}s
  • format: vid / img / carousel
  • hook: короткий ярлык крючка (objection / result / case / painloss)
  • duration: для видео — секунды (15 / 30 / 45)

Примеры:

  • vid-objection-15s — видео про возражение, 15 сек
  • img-case-static — статичная картинка с кейсом
  • vid-result-30s — видео про результат

4. Карта «кампания → лендинг → tier»

КампанияЛендингtier (auto)Mechanism
bp-kz-cold-standardhttps://x5.karada.kz/standardquick-lead
bp-kz-cold-viphttps://x5.karada.kz/vslvipregistration
bp-kz-cold-exclusivehttps://x5.karada.kz/exclusiveexclusiveapplication
bp-kz-cold-magnethttps://x5.karada.kz/guidelead_magnetlead-magnet
bp-kg-cold-standardhttps://x5.karada.kz/kgstandardquick-lead
bp-kg-cold-viphttps://x5.karada.kz/kg/vslvipregistration
bp-kg-cold-exclusivehttps://x5.karada.kz/kg/exclusiveexclusiveapplication
bp-kg-cold-magnethttps://x5.karada.kz/kg/guidelead_magnetlead-magnet

(Стейджинг: karadabp.flowleads.dev для тестов перед запуском.)

5. Meta Pixel — настройка

Где живёт ID

  • src/config/analytics.tsmetaPixel.id
  • В сборке Pixel загружается через GTM (не отдельным скриптом), так что мы не катим деплой каждый раз когда меняется тег.

Что должно работать на старте

  1. PageView — авто (Meta базовый Pixel)
  2. ViewContent — на любом лендинге (/, /vsl, …)
  3. Lead — на /thank-you (по событию generate_lead)
  4. CompleteRegistration — на /thank-you если funnel_mechanism == 'registration'
  5. SubmitApplication — на /thank-you если funnel_mechanism == 'application'
  6. InitiateCheckout — клик по апсейлу (lead_upsell событие)

Все эти события уже летят в dataLayer — нужно только подцепить теги в GTM.

GTM конфигурация (что добавить)

GTM TagTriggerPixel EventПараметры
Meta · PageViewAll PagesPageView
Meta · ViewContentAll PagesViewContentcontent_category={{tier}} content_name={{variant_id}}
Meta · LeadDataLayer event generate_leadLeadvalue={{tier_price}} currency=KZT/KGS
Meta · CompleteReggenerate_lead + funnel_mechanism = registrationCompleteRegistration
Meta · Applicationgenerate_lead + funnel_mechanism = applicationSubmitApplicationpredicted_ltv={{lead_score}}
Meta · UpsellDataLayer event lead_upsellInitiateCheckoutvalue={{delta_amount}}

Custom Audiences для ретаргета (создать в Meta после первой недели трафика)

АудиторияПравилоПрименение
Все посетители 30дAll site visitorsБазовый ретаргет
Видели VSL 30дURL contains /vsl AND no Lead eventВидеошум ретаргет (только видео-формат)
Видели /exclusive не подалиURL contains /exclusive AND no LeadПремиум-ретаргет на VIP-downsell
Лиды Стандарт 14дLead event AND tier=standardVIP-апсейл ретаргет
Лиды VIP 14дLead event AND tier=vipExclusive-апсейл ретаргет (узкая)
Лиды любые 90дLead eventИсключить из всех cold-кампаний
Lookalike Лиды 1-3%LAL от «Лиды любые 90д»Scaling кампании (когда наберём 500+ лидов)

Conversion API (CAPI) — серверная отправка

Когда подключим: после подтверждения работы пиксель-side (1-2 дня после запуска).

Архитектура:

Form submit → Make webhook → [новый HTTP-модуль] → 
  POST https://graph.facebook.com/v19.0/{pixel_id}/events
  
  user_data: { em: sha256(email), ph: sha256(phone), fbc: fbclid... }
  custom_data: { value, currency, content_category }
  event_id: {{submission_id}}  ← дедуп с пиксель-событием

Что нужно:

  • pixel_id (тот же что в GTM)
  • access_token — Meta Events Manager → Settings → Conversions API → Generate access token
  • В Make добавим один HTTP-модуль, шлющий это параллельно с Slack/Sheet.

Дедуп: клиентский пиксель и CAPI шлют одно событие с одинаковым event_id (= наш submission_id). Meta дедуплицирует — Lead будет один, но если пиксель потерян (iOS 14+, adblock) — CAPI всё равно сработает.

6. Тестовые UTM-ссылки (для QA)

Дай команде эти ссылки — каждая проверяет один сегмент атрибуции.

# Стандарт · KZ · все UTM заполнены
https://karadabp.flowleads.dev/?utm_source=facebook&utm_medium=paid_social&utm_campaign=qa-kz-cold-standard&utm_content=qa-ad-1&utm_term=qa-adset-1

# VIP · KZ · с fbclid
https://karadabp.flowleads.dev/vsl?utm_source=facebook&utm_medium=paid_social&utm_campaign=qa-kz-cold-vip&utm_content=qa-ad-2&utm_term=qa-adset-2&fbclid=IwAR_test_fbclid_123

# Exclusive · KZ
https://karadabp.flowleads.dev/exclusive?utm_source=facebook&utm_medium=paid_social&utm_campaign=qa-kz-cold-exclusive&utm_content=qa-ad-3&utm_term=qa-adset-3

# Lead-magnet · KZ
https://karadabp.flowleads.dev/guide?utm_source=facebook&utm_medium=paid_social&utm_campaign=qa-kz-cold-magnet&utm_content=qa-ad-4&utm_term=qa-adset-4

# Стандарт · KG (другой регион)
https://karadabp.flowleads.dev/kg?utm_source=facebook&utm_medium=paid_social&utm_campaign=qa-kg-cold-standard&utm_content=qa-ad-5&utm_term=qa-adset-5

# Без UTM (direct/organic — проверяем что не ломается)
https://karadabp.flowleads.dev/

После каждой подачи формы — открой Google Sheet (Leads tab), последняя строка должна содержать UTM_source/medium/campaign и т.д.

7. Чек-лист перед запуском кампаний

  • Pixel ID получен и вставлен в analytics.ts (или GTM-переменную)
  • GTM-теги Meta созданы (Lead, ViewContent — минимум)
  • В каждом объявлении прописан URL parameters по шаблону
  • Имена кампаний/ад-сетов/креативов по соглашению
  • Тестовая ссылка проходит до Sheet с правильным UTM
  • Пиксель видит события в Meta Events Manager → Test Events
  • CAPI access token получен (опционально для старта, обязательно через неделю)