gFit · аналитика продаж

Как мы собираем данные по продажам

Для Маши / UA · обновляется · источник: код репозитория gfit-web-app

Воронка оплаты — web2app: пользователь платит на вебе через Stripe, поэтому ключевые события (email → пейвол → оплата) отслеживаются и клиентским Meta Pixel, и серверным CAPI (дедуп по event_id). Единая точка клиентских событий — track(): один вызов фанаутит в GTM/GA4, Mixpanel и Meta Pixel.

Важно: покупки внутри приложения (IAP) в Meta/GA/Mixpanel не попадают — только в AppsFlyer (см. «Что осталось»).
Ответы на вопросы

Коротко по сути

Воронка (web)

Какое событие куда летит

ШагСобытиеMeta PixelMeta CAPIGA4/GTMMixpanelAppsFlyer (апка)
Заход/шаг квизаquiz_step_viewPageView—✓✓af_app_open
Оставил emailemail_submittedLead—✓✓af_complete_registration
Пейвол показанpaywall_viewViewContent—✓✓af_content_view
Начал оплатуcheckout_startInitiateCheckout—✓✓af_initiated_checkout
Старт триала (web)start_trialStartTrialStartTrial✓✓af_start_trial
Оплата (web/Stripe)purchasePurchasePurchase✓✓af_subscribe
Оплата в приложении (IAP)—✗✗✗✗af_subscribe
Регистрация—✗ (web)✗✗ (web)✗af_complete_registration / Firebase
Дедуп Pixel↔CAPI: одинаковый event_id (purchase_<id>, trial_<id>). CAPI шлётся только с прода (app.gfit.world, Stripe livemode). На dev/stage пиксель и GA не грузятся вовсе.
Стек

Системы и роли

СистемаРольГдеЧто собирает
Meta Pixelатрибуция рекламы (клиент)webLead / ViewContent / InitiateCheckout / StartTrial / Purchase
Meta CAPIсерверное подтверждение покупок (дедуп)web (Stripe)Purchase, StartTrial
GA4 (через GTM)веб-аналитика, отчётыweb (прод)все события track()
Mixpanelпродуктовая воронкаwebвсе track() кроме чисто-пиксельных
AppsFlyerмобильная атрибуциятолько апкаregistration / subscribe / trial / checkout
RevenueCatмобильные подписки (IAP) → БДmobileстатусы подписок (не в Meta/GA)
Firebaseмобильная продуктовая аналитикатолько апкаsign_up / paywall / workout (не purchase)
BigQuery + Dataform + Lookerвитрины выручки—выгрузка платёжных таблиц из Supabase (не event-стрим)
eSputnikCRM / email-событиясерверregistration / checkout / payment для рассылок
PostHogзапись сессий, heatmaps, дропоффы воронкиweb (lazy)подключаем — для дизайнера/UA
Углублённо

Pixel vs CAPI, PostHog, регистрация, UTM, апселлы

Почему Meta Pixel основной, а не CAPI.

Пиксель (клиент) видит всю воронку в браузере: PageView, шаги квиза, Lead, пейвол, чекаут. CAPI (сервер) видит только серверные события — покупки/триалы из Stripe-вебхука. Пиксель даёт охват + атрибуцию по cookie (fbp/fbc); CAPI страхует денежные события (переживает адблок/iOS, дедуп с пикселем). Правильно — оба, и у нас так.

Хватает ли данных? Продуктовая аналитика.

Для оптимизации рекламы — да. Для «где отваливается в квизе» данные уже есть: quiz_step_view с номером шага уходит в Mixpanel и GA4 → пошаговая воронка строится в Mixpanel уже сейчас (дизайнер может смотреть). Чего нет, а даёт PostHog: запись сессий, heatmaps, autocapture, A/B-эксперименты.

ПотребностьЕсть сейчасPostHog
Пошаговая воронка квиза, отвалыMixpanelдублирует
Retention, когортыMixpanel / GA4дублирует
Атрибуция рекламыMeta, AppsFlyerнет
Запись сессий (watch)нетда
Heatmaps / клик-картынетда
Autocapture (без разметки)нетда
A/B эксперименты, flagsнетда

Решено: подключаем PostHog — для дизайнера, UA и креативного продюсера: запись сессий + heatmaps, чтобы видеть, где в квизе дропоффы и как улучшать воронку. Это дополнение к Mixpanel/Meta, не замена. Важно: грузить лениво/асинхронно и без тяжёлой записи на старте, чтобы не замедлять загрузку онбординга.

Почему регистрация не учитывается.

На вебе CompleteRegistration не шлётся в Meta/GA4/Mixpanel — фиксируется только Lead (email). Регистрация есть только в апке (AppsFlyer, Firebase). Это дыра: если регистрация нужна как конверсия/якорь UTM — добавляем событие на вебе → Meta/GA4/Mixpanel.

UTM для регистрации (и на уровне кампании).

Для Meta кампания привязывается по fbclid/fbc — мы его уже ловим (attr_* в Stripe metadata → CAPI), покупки уже атрибутируются. Для GA4/Mixpanel нужны utm_* с лендинга: ловить на первом заходе (first-touch), класть в storage, прикреплять к событиям (включая registration и purchase). Сейчас utm_* к событиям не прикрепляются — задача.

Апселлы в апке + экран апселла после пейвола.

(1) Экран апселла (авторские за $32.99 после пейвола) — продуктовая фича (DEV-484). (2) Трекинг: на вебе покупка апселла уже шлёт Purchase, но апселлы/покупки в приложении (IAP) в Meta/GA/Mixpanel не видны — нужен мост RevenueCat→CAPI/Mixpanel.

To-do

Что осталось доделать по аналитике

  1. Пошарить пиксель Маше — доступ в Meta Business на 2130151084074853 (Костя).
  2. IAP не виден в Meta/GA/Mixpanel — только AppsFlyer. Для web2app основное ловится, но in-app триалы/апгрейды «тёмные». Решить: добавлять ли RevenueCat→CAPI.
  3. CompleteRegistration на вебе — добавить в Meta/GA4 (сейчас только Lead).
  4. Dataform (gfit-analytics) — не в гите, правки моделей не доезжают в daily без ручной перекомпиляции. Проверить/настроить.
  5. После запуска — убедиться, что CAPI Purchase долетают в Meta Events Manager (DEV-486).
  6. PostHog — подключить: session replay + heatmaps для дизайнера/UA/креатива (видеть дропоффы в квизе). Грузить lazy/async, не тормозить онбординг.
  7. Ретеншн-покупки сознательно не идут в Meta (by design) — помнить при сверке Meta vs GA4.
Статус (Костя): идёт одобрение бизнес-аккаунта Meta — ждёт пополнения Revolut на $60 → оплата счёта, чтобы моб. номер числился за компанией в США (чтобы кабинет не забанили). Пока не закрыто.

Это живой документ. Правки — через Костю/Claude; при изменениях страница переразворачивается.