Kommo + Heap: события воронки продаж в продуктовую аналитику с авто-захватом
Heap — product analytics платформа с принципиально иным подходом: вместо ручной разметки событий (track("button_clicked")) Heap автоматически захватывает все взаимодействия пользователя — каждый клик, скролл, ввод, навигацию. Аналитик определяет события ретроактивно, уже имея данные. В отличие от Amplitude или PostHog, не нужно думать о разметке заранее. Интеграция с Kommo добавляет CRM-слой: Won -> identify в Heap -> ретроактивный анализ поведения paying-клиентов ещё до покупки.
Почему авто-захват меняет аналитику
Классическая проблема: product team обнаруживает что фича X коррелирует с retention. Хочет понять как пользователи находили фичу X. Но данные о кликах на кнопку X не собирались — разработчик не поставил track(). Нужно ждать следующие 30+ дней.
Heap: кнопка X кликалась все это время — данные есть. Аналитик создаёт «событие» ретроактивно через UI, и оно мгновенно доступно за всю историю. Ретроактивный анализ — ключевое преимущество Heap.
С Kommo-интеграцией добавляется: «покажи мне поведение клиентов с тарифом Growth в первые 14 дней ДО и ПОСЛЕ Won». Heap может это ретроактивно — если identify с plan=Growth был отправлен.
Что синхронизируется
Kommo -> Heap:
— Won -> identify пользователя с CRM-свойствами: plan, mrr, source, deal_id
— Смена тарифа -> обновить свойства пользователя в Heap
— Lost -> добавить свойство churned: true
Heap -> Kommo:
— Через Heap Connect (Data Science) — экспорт сегментов пользователей в CRM (enterprise)
— Через Heap API: получить список пользователей из сегмента -> задача менеджеру (at-risk users)
Heap API: ключевые запросы
Server-side Track API (для событий из backend):
Base URL: https://heapanalytics.com/api.
Аутентификация: app_id в теле запроса (публичный, как и для client-side).
import requests
from datetime import datetime, timezone
HEAP_APP_ID = "your_app_id" # из Heap Account Settings
HEAP_BASE_URL = "https://heapanalytics.com/api"
def heap_identify(identity: str, properties: dict) -> None:
# identity: уникальный идентификатор - email или userId
# Связывает server-side события с browser-side сессиями
resp = requests.post(
f"{HEAP_BASE_URL}/identify",
json={
"app_id": HEAP_APP_ID,
"identity": identity,
"properties": properties,
},
timeout=10,
)
resp.raise_for_status()
def heap_track(identity: str, event: str, properties: dict = None) -> None:
# Server-side track event
payload = {
"app_id": HEAP_APP_ID,
"identity": identity,
"event": event,
"properties": properties or {},
"timestamp": datetime.now(timezone.utc).isoformat(),
}
resp = requests.post(
f"{HEAP_BASE_URL}/track",
json=payload,
timeout=10,
)
resp.raise_for_status()
def heap_add_user_properties(identity: str, properties: dict) -> None:
# Обновить свойства существующего пользователя
heap_identify(identity, properties) # identify идемпотентен - обновляет при повторном вызове
def on_deal_won(lead: dict, contact: dict):
email = get_contact_email(contact)
plan = get_custom_field(lead, PLAN_FIELD_ID) or "starter"
source = get_custom_field(lead, SOURCE_FIELD_ID) or "direct"
amount = lead.get("price", 0)
# Identify - установить CRM-свойства пользователя
heap_identify(
identity=email,
properties={
"plan": plan,
"mrr": amount,
"customer": True,
"won_date": datetime.now(timezone.utc).strftime("%Y-%m-%d"),
"crm_source": source,
"kommo_deal_id": lead["id"],
}
)
# Track server-side событие конверсии
heap_track(
identity=email,
event="crm_deal_won",
properties={
"plan": plan,
"amount": amount,
"deal_id": lead["id"],
"pipeline_id": lead.get("pipeline_id"),
}
)
create_kommo_note(lead["id"],
f"Heap: пользователь идентифицирован (plan={plan}, mrr={amount})")
def on_plan_upgrade(lead: dict, contact: dict, old_plan: str, new_plan: str):
email = get_contact_email(contact)
heap_add_user_properties(email, {"plan": new_plan})
heap_track(email, "crm_plan_upgraded", {
"from_plan": old_plan,
"to_plan": new_plan,
})
def on_deal_lost(lead: dict, contact: dict):
email = get_contact_email(contact)
heap_add_user_properties(email, {
"customer": False,
"churned": True,
"churn_date": datetime.now(timezone.utc).strftime("%Y-%m-%d"),
})
heap_track(email, "crm_churned", {"deal_id": lead["id"]})
Ретроактивный анализ: главная ценность Heap + Kommo
После интеграции product team может:
1. Что делали paying-клиенты до Won:
— Heap знает все действия пользователя с момента первого визита
— После identify с plan=Growth — ретроактивно сегментировать: «Growth-клиенты за 30 дней до покупки»
— Выявить: какие фичи пробовали, где застревали, что коррелирует с конверсией
2. Activation patterns по тарифу:
— crm_deal_won (server-side) -> retention-когорта в Heap
— Сравнить: Growth-клиенты vs Starter-клиенты — разные паттерны использования продукта
— Найти «aha moment» для каждого тарифа
3. Churn prediction:
— Пользователи с churned=True -> что происходило за 14–30 дней до оттока
— Ретроактивно — без необходимости заранее думать что трекать
Heap vs Mixpanel vs PostHog: чем отличается авто-захват
| Параметр | Heap | Mixpanel | PostHog |
|---|---|---|---|
| Авто-захват | Все события автоматически | Нет — ручная разметка | Опционально (autocapture) |
| Ретроактивный анализ | Да | Нет | Нет |
| Session replay | Нет (отдельный продукт) | Нет | Да, встроен |
| Open-source | Нет | Нет | Да |
| Self-hosted | Нет | Нет | Да |
Heap выигрывает когда: не знаете заранее что важно трекать; нужен исторический анализ без переразметки; много «нежданных» вопросов к данным.
Реальный кейс
B2B SaaS (US, Kommo + Heap, 30–50 новых клиентов в месяц):
- До: product team хотела понять почему Growth-клиенты остаются лучше Starter. Данных о поведении до покупки — нет (ручная разметка не покрывала нужные события).
- После identify с plan из Kommo: ретроактивный анализ за 6 месяцев. Выяснилось: Growth-клиенты в первые 7 дней активировали интеграцию с API — Starter не активировали. Корреляция с 12-месячным retention: 91% vs 34%.
- Действие: добавили API-setup в onboarding flow для Starter -> 12-мес retention Starter вырос на 23%.
Для кого актуально
- Product-команды с «неожиданными» аналитическими вопросами — ретроактивный анализ
- SaaS с несколькими тарифами — нужна сегментация paying customers vs trial
- Компании где product и sales используют разные инструменты без связи
- Компании без data engineer — авто-захват не требует разметки от разработчика
Часто задаваемые вопросы
Heap авто-захват — не создаёт ли он лишний шум в данных?
Создаёт, если не структурировать. Heap предлагает «Event Visualizer»: кликнуть на элемент в браузере -> создать именованное событие из авто-данных. Все сырые клики хранятся, аналитик работает только с именованными событиями. Шум остаётся на уровне raw data, не мешает анализу.
Heap identify — когда делать на клиенте, когда на сервере?
На клиенте (heap.identify(userId)) — при логине пользователя в браузере. Это связывает anonymous session с userId. Server-side identify (POST /api/identify) — для обновления свойств из CRM-событий (Won, план, mrr), где нет браузерного контекста. Оба метода совместимы — Heap мержит сессии.
Heap Data Science / Connect — что это?
Enterprise-функция: Heap Connect экспортирует данные в Snowflake/Redshift/BigQuery. Heap Data Science — predictive сегменты (at-risk users, likely to convert). Для Kommo-интеграции это означает: at-risk сегмент из Heap -> задача менеджеру в Kommo (через API). Доступно на Growth+ планах.
Heap app_id — публичный или приватный?
app_id публичный — используется в client-side JS-коде и в server-side API. Не является секретом. Для защиты данных используется server-side API с validation (не принимает данные от неизвестных доменов).
Итого
- Heap Server-side API:
POST /api/identify+POST /api/track,app_idв теле - identify: установить CRM-свойства (plan, mrr, won_date) при Won
- track:
crm_deal_won,crm_churned,crm_plan_upgraded— server-side конверсионные события - Ключевое преимущество: ретроактивный анализ поведения до Won — без предварительной разметки
- Обновление свойств: повторный вызов
identifyс новыми значениями
Если вы используете Heap и Kommo и хотите добавить CRM-контекст в product analytics — опишите какие свойства клиентов важны для сегментации. Exceltic.dev настроит server-side identify и трекинг конверсионных событий.