Суть урока
В этом уроке ты настроишь автоматическую аналитическую систему: PostHog собирает данные, Claude их анализирует, и каждый понедельник утром в Telegram приходит отчёт — что работает, что нет, и что делать дальше.
Ключевые концепции
- PostHog — open-source аналитика с сессионными записями, feature flags, API и MCP-сервером для Claude
- Mixpanel — мощные воронки и когортный анализ, есть AI-функции (состав смотри на сайте)
- Plausible — privacy-first аналитика, идеальна для старта без лишней сложности
- DAU/MAU, Retention, Funnel — три метрики которые реально говорят о здоровье продукта
- Churn prediction — Claude анализирует паттерны поведения и предсказывает кто уйдёт
- Session replay + AI — Claude читает записи сессий и находит боли пользователей без просмотра каждого видео
- A/B тестирование через feature flags — PostHog управляет экспериментами, Claude интерпретирует результаты
- Автоматический еженедельный отчёт — Python скрипт + Claude API + Telegram = аналитика на автопилоте
Теория
Зачем продуктовая аналитика предпринимателю в 2026
Большинство соло-предпринимателей работают вслепую. Они смотрят на количество регистраций и думают, что у них всё хорошо. Но настоящие вопросы другие: сколько зарегистрировавшихся вернулись через неделю? На каком шаге онбординга уходит половина пользователей? Какая фича используется каждый день, а какую никто не трогает?
Раньше ответы на эти вопросы требовали дата-аналитика. Теперь многое можно получить от правильно настроенного Claude, но выводы всё равно проверяй: модель может ошибиться.
PostHog: open-source аналитика с мозгом
PostHog — это швейцарский нож продуктовой аналитики. Open-source, можно поставить на свой сервер или использовать их облако. У каждого продукта есть бесплатный месячный лимит (актуальные лимиты для событий аналитики и записей сессий — на странице тарифов PostHog). В самом PostHog есть и встроенный AI-помощник (PostHog AI), который отвечает на вопросы по данным.
Что умеет PostHog:
- Трекинг событий (клики, переходы, действия пользователей)
- Сессионные записи — буквально видеозаписи что делал пользователь
- Feature flags — включай/выключай функции для разных групп
- Воронки — где пользователи уходят из процесса
- Когорты — группы пользователей по поведению
- Эксперименты (A/B тесты)
- PostHog MCP — прямая интеграция с Claude Code
PostHog MCP для Claude Code позволяет Claude напрямую запрашивать данные из твоего PostHog, строить запросы на HogQL (их язык запросов) и анализировать результаты без copy-paste. Сейчас это удалённый MCP-сервер PostHog (адрес https://mcp.posthog.com/mcp, регион данных определяется при входе в аккаунт). Подключение к Claude Code:
claude mcp add --transport http posthog https://mcp.posthog.com/mcpКак авторизоваться, зависит от версии: следуй инструкции PostHog для Claude Code (документация MCP PostHog). Старые примеры с пакетом @posthog/mcp-server и ключом в конфиге могут не работать.
После этого в Claude Code можно спросить: "Покажи мне топ-5 событий за последнюю неделю" — и Claude сам запросит данные.
Mixpanel: воронки и когорты на профессиональном уровне
Mixpanel специализируется на поведенческой аналитике. Если PostHog — это универсальный инструмент, то Mixpanel — специалист по вопросу "почему пользователи делают X".
Сильные стороны Mixpanel:
- Воронки с breakdown по сегментам (платящие vs бесплатные, мобайл vs веб)
- Когортный retention — видишь, пользователи каких недель удерживаются лучше
- Impact report — как запуск фичи повлиял на ключевые метрики
- Встроенные AI-функции для вопросов к данным (состав и названия смотри на сайте Mixpanel)
- Flows — визуализация путей пользователей в интерфейсе
Mixpanel API для автоматизации:
import requests
def get_mixpanel_funnel(project_id, funnel_id, api_secret):
url = f"https://mixpanel.com/api/2.0/funnels"
params = {
"funnel_id": funnel_id,
"from_date": "2026-09-01", # пример: подставь свои даты
"to_date": "2026-09-30",
}
response = requests.get(
url,
params=params,
auth=(api_secret, "")
)
return response.json()У Mixpanel есть бесплатный уровень с лимитом событий; условия и лимиты меняются, смотри на сайте. Для вызовов API нужны данные проекта и ключ сервисного аккаунта: актуальный способ авторизации смотри в справочнике API.
Plausible: старт без перегрузки
Для самого начала, когда продукт только запущен и данных мало, Plausible Analytics — идеальный выбор. Простая установка (один скрипт), privacy-first: работает без cookie, поэтому в типичной настройке не нужен cookie-баннер. Сервис платный (есть пробный период), тарифы на сайте.
Plausible хорош для трафиковой аналитики (откуда приходят, что читают), но для продуктовой аналитики внутри приложения лучше PostHog или Mixpanel.
Ключевые метрики: что реально важно
Большинство предпринимателей отслеживают слишком много метрик и не отслеживают нужные. Вот минимальный набор:
DAU/MAU (Daily/Monthly Active Users) Процент DAU/MAU показывает "липкость" продукта. Нормальное значение сильно зависит от типа продукта: мессенджер используют каждый день, бухгалтерский сервис — раз в месяц. Сравнивай себя с собой во времени и с похожими продуктами. Если процент близок к нулю — люди не возвращаются, это проблема.
Retention по когортам Классический retention report: из пользователей зарегистрировавшихся на неделе X, сколько вернулись через 1 неделю, 2 недели, 4 недели. Главное — смотреть, выравнивается ли кривая: если часть пользователей остаётся стабильно, это хороший знак.
Funnel conversion Сколько % пользователей проходят путь от регистрации до активного использования. На онбординге обычно теряется заметная часть людей. Найти где — задача воронки.
Feature adoption Какие фичи используются регулярно, какие никто не трогает после первого раза.
Предсказание оттока (churn prediction) с Claude
Это одна из самых ценных вещей которую Claude может сделать с твоими данными. Вместо того чтобы реагировать когда пользователь уже ушёл — предсказать кто уйдёт через неделю и вмешаться.
import anthropic
import json
def predict_churn(users_activity_data: list[dict]) -> dict:
"""
users_activity_data — список словарей с активностью каждого пользователя:
[{"user_id": "u123", "last_login_days_ago": 8, "sessions_last_30d": 2,
"feature_usage": {"core": 5, "advanced": 0}, "plan": "free"}]
"""
client = anthropic.Anthropic()
prompt = f"""
Ты аналитик продукта. Вот данные об активности {len(users_activity_data)} пользователей за последние 30 дней:
{json.dumps(users_activity_data, ensure_ascii=False, indent=2)}
Проанализируй паттерны и:
1. Выдели HIGH RISK пользователей (вероятно уйдут в ближайшие 2 недели)
2. Объясни признаки по которым определил риск
3. Предложи конкретное действие для каждой risk-группы (email, звонок, in-app уведомление)
Ответь в формате JSON:
{{
"high_risk": [список user_id],
"medium_risk": [список user_id],
"risk_signals": "объяснение",
"actions": {{"high_risk": "действие", "medium_risk": "действие"}}
}}
"""
message = client.messages.create(
model="claude-sonnet-5-5", # актуальные модели: страница «Актуальное сейчас»
max_tokens=1024,
messages=[{"role": "user", "content": prompt}]
)
return json.loads("".join(b.text for b in message.content if b.type == "text"))A/B тестирование: feature flags + Claude-интерпретатор
PostHog feature flags позволяют показывать разные версии интерфейса разным пользователям. Claude помогает интерпретировать результаты без статистических знаний.
Сценарий: ты тестируешь два варианта кнопки оплаты. PostHog показывает: Вариант A — 4.2% конверсии, Вариант B — 5.1% конверсии. Статистически значимо? Сколько нужно подождать? Claude отвечает на эти вопросы.
def interpret_ab_test(test_data: dict) -> str:
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-sonnet-5-5",
max_tokens=512,
messages=[{
"role": "user",
"content": f"""
Проанализируй результаты A/B теста:
{json.dumps(test_data, ensure_ascii=False)}
Ответь:
1. Какой вариант победил и насколько уверенно?
2. Статистически значимый ли результат (выборка {test_data.get('total_users', 'N/A')} пользователей)?
3. Рекомендуй: раскатывать победителя или ждать больше данных?
Ответ на русском, кратко — 3-4 предложения.
"""
}]
)
return "".join(b.text for b in message.content if b.type == "text")Session replay + Claude: найти боли без просмотра видео
PostHog записывает сессии пользователей. При 1000 пользователей в день — это 1000 видео. Никто не будет их смотреть. Но Claude может читать метаданные сессий и выдавать паттерны.
Метаданные сессии включают: клики, rage clicks (бешеные клики когда что-то не работает), dead clicks (клики на некликабельные элементы), время на странице, элементы с которыми взаимодействовали.
def analyze_session_patterns(sessions_metadata: list[dict]) -> str:
rage_clicks = [s for s in sessions_metadata if s.get("rage_clicks", 0) > 2]
high_exit_pages = {}
for session in sessions_metadata:
exit_page = session.get("exit_page", "")
high_exit_pages[exit_page] = high_exit_pages.get(exit_page, 0) + 1
analysis_data = {
"total_sessions": len(sessions_metadata),
"frustration_sessions": len(rage_clicks),
"top_exit_pages": sorted(
high_exit_pages.items(), key=lambda x: x[1], reverse=True
)[:5],
"avg_session_duration_minutes": sum(
s.get("duration_seconds", 0) for s in sessions_metadata
) / len(sessions_metadata) / 60
}
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-sonnet-5-5",
max_tokens=800,
messages=[{
"role": "user",
"content": f"""
Данные о сессиях пользователей:
{json.dumps(analysis_data, ensure_ascii=False, indent=2)}
Найди главные точки боли пользователей. Что нужно исправить в первую очередь?
Ответ: три конкретные проблемы с предложениями по исправлению.
"""
}]
)
return "".join(b.text for b in message.content if b.type == "text")Еженедельный автоматический отчёт
Это главный инструмент который ты настроишь в практике. Python скрипт запускается каждый понедельник, забирает данные из PostHog за прошлую неделю (запросами на HogQL), отдаёт Claude, получает человеческий отчёт, отправляет в Telegram.
import os
import json
import anthropic
import requests
from datetime import datetime, timedelta
from dotenv import load_dotenv
load_dotenv()
# Ключи берём из .env, а не пишем в коде
POSTHOG_PERSONAL_API_KEY = os.getenv("POSTHOG_PERSONAL_API_KEY") # персональный ключ (phx_...) для чтения данных
POSTHOG_PROJECT_ID = os.getenv("POSTHOG_PROJECT_ID")
POSTHOG_HOST = os.getenv("POSTHOG_HOST", "https://us.posthog.com") # для Европы: https://eu.posthog.com
TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
TELEGRAM_CHAT_ID = os.getenv("TELEGRAM_CHAT_ID")
ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY")
def run_hogql(query: str) -> list:
"""Выполняет запрос на HogQL (язык запросов PostHog) через API."""
response = requests.post(
f"{POSTHOG_HOST}/api/projects/{POSTHOG_PROJECT_ID}/query/",
headers={"Authorization": f"Bearer {POSTHOG_PERSONAL_API_KEY}"},
json={"query": {"kind": "HogQLQuery", "query": query}, "name": "weekly report"},
)
return response.json().get("results", []) if response.ok else []
def fetch_posthog_insights() -> dict:
"""Забираем ключевые метрики за прошлую неделю"""
end_date = datetime.now()
start_date = end_date - timedelta(days=7)
# Просмотры страниц по дням
pageviews_by_day = run_hogql(
"select toDate(timestamp) as day, count() from events "
"where event = '$pageview' and timestamp >= now() - interval 7 day "
"group by day order by day"
)
# Активные пользователи за неделю
active_users = run_hogql(
"select count(distinct person_id) from events "
"where timestamp >= now() - interval 7 day"
)
# Новые регистрации
signups = run_hogql(
"select count() from events "
"where event = 'signed_up' and timestamp >= now() - interval 7 day"
)
return {
"period": f"{start_date.strftime('%d.%m')} — {end_date.strftime('%d.%m.%Y')}",
"pageviews_by_day": pageviews_by_day,
"active_users": active_users,
"signups": signups,
}
def generate_weekly_report(insights: dict) -> str:
"""Claude генерирует человеческий отчёт"""
client = anthropic.Anthropic(api_key=ANTHROPIC_API_KEY)
message = client.messages.create(
model="claude-sonnet-5-5", # актуальные модели: страница «Актуальное сейчас»
max_tokens=1500,
messages=[{
"role": "user",
"content": f"""
Ты аналитик продукта. Вот данные за неделю {insights['period']}:
{json.dumps(insights, ensure_ascii=False, indent=2, default=str)}
Напиши еженедельный отчёт для основателя стартапа. Структура:
📊 НЕДЕЛЯ {insights['period']}
🟢 Что хорошо (2-3 пункта)
🔴 На что обратить внимание (1-2 пункта)
🎯 Приоритет на эту неделю (1 конкретное действие)
Тон: дружелюбный, конкретный, без воды. Пиши по-русски.
Если данных мало, так и скажи, не выдумывай причины.
"""
}]
)
return "".join(b.text for b in message.content if b.type == "text")
def send_to_telegram(text: str):
"""Отправляем отчёт в Telegram"""
requests.post(
f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage",
json={
"chat_id": TELEGRAM_CHAT_ID,
"text": text,
}
)
def run_weekly_report():
print("Собираем данные из PostHog...")
insights = fetch_posthog_insights()
print("Claude анализирует...")
report = generate_weekly_report(insights)
print("Отправляем в Telegram...")
send_to_telegram(report)
print("Готово!")
if __name__ == "__main__":
run_weekly_report()Этот скрипт запускается через cron каждый понедельник в 9:00:
0 9 * * 1 cd /path/to/project && python weekly_report.py
Практика
Задача: настроить автоматическую аналитическую систему за 5 шагов.
Шаг 1: Установить PostHog (15 мин)
- Зайди на posthog.com и создай аккаунт (есть бесплатный уровень)
- Создай проект и получи два ключа.
Project API Key(начинается наphc_) нужен для отправки событий из продукта. Для чтения данных скриптами нужен отдельный персональный ключ (начинается наphx_: в настройках аккаунта, раздел Personal API keys) и ID проекта - Добавь трекинг в свой продукт (точный код и адрес
api_hostдля твоего региона бери из подсказки в PostHog):
Для веб-приложения (HTML):
<script>
!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){...}
posthog.init('phc_ваш_ключ', {api_host: 'https://us.i.posthog.com'}) // для Европы: https://eu.i.posthog.com
</script>Для Python бэкенда:
pip install posthogfrom posthog import Posthog
posthog = Posthog('phc_ваш_ключ', host='https://us.i.posthog.com')
# Именованные аргументы работают в разных версиях библиотеки
posthog.capture(event='signed_up', distinct_id='user_123', properties={'plan': 'free', 'source': 'google'})- Проверь что события приходят — зайди в PostHog → Activity → Live Events
Шаг 2: Настроить ключевые воронки (10 мин)
В PostHog → Funnels → New Funnel:
- Шаг 1:
signed_up(регистрация) - Шаг 2:
onboarding_completed(завершил онбординг) - Шаг 3:
first_core_action(сделал первое ключевое действие) - Шаг 4:
payment_completed(оплатил)
Сохрани воронку. Это твоя главная метрика здоровья продукта.
Шаг 3: Создать Python скрипт для недельного отчёта (20 мин)
mkdir analytics_bot
cd analytics_bot
pip install anthropic requests python-dotenvСоздай файл .env (и добавь его в .gitignore):
POSTHOG_PERSONAL_API_KEY=phx_ваш_персональный_ключ
POSTHOG_PROJECT_ID=ваш_id_проекта
POSTHOG_HOST=https://us.posthog.com
ANTHROPIC_API_KEY=sk-ant-ваш_ключ
TELEGRAM_BOT_TOKEN=ваш_токен
TELEGRAM_CHAT_ID=ваш_chat_idСкопируй код weekly_report.py из теории выше. Запусти:
python weekly_report.pyПроверь что отчёт пришёл в Telegram.
Шаг 4: Настроить churn prediction (15 мин)
Добавь в проект скрипт churn_detector.py:
from dotenv import load_dotenv
import os
import anthropic
import requests
import json
load_dotenv()
POSTHOG_HOST = os.getenv("POSTHOG_HOST", "https://us.posthog.com")
def get_at_risk_users():
"""Получаем пользователей не заходивших 7+ дней (упрощённо: фильтр и поля сверь с документацией PostHog)"""
headers = {"Authorization": f"Bearer {os.getenv('POSTHOG_PERSONAL_API_KEY')}"}
# Упрощённый запрос — пользователи с низкой активностью
response = requests.get(
f"{POSTHOG_HOST}/api/projects/{os.getenv('POSTHOG_PROJECT_ID')}/persons/",
headers=headers,
params={"properties": '[{"key":"$last_seen","value":"-7d","operator":"is_before_date"}]'}
)
if not response.ok:
return []
persons = response.json().get("results", [])
# В модель отправляем только внутренние ID и счётчики, без имён и email
return [
{
"user_id": p.get("distinct_ids", ["unknown"])[0],
"last_seen": p.get("properties", {}).get("$last_seen"),
"total_sessions": p.get("properties", {}).get("$session_count", 0),
}
for p in persons[:50] # Берём первые 50
]
def run_churn_check():
users = get_at_risk_users()
if not users:
print("Нет пользователей в зоне риска")
return
client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
message = client.messages.create(
model="claude-haiku-4-5", # Haiku достаточно для этой задачи (проверь, что модель ещё доступна в API)
max_tokens=500,
messages=[{
"role": "user",
"content": f"""
Вот пользователи которые давно не заходили ({len(users)} человек):
{json.dumps(users[:10], ensure_ascii=False)}
Что им написать чтобы вернуть? Одно короткое письмо (3-4 предложения) для реактивации.
"""
}]
)
print("Рекомендованный текст для реактивации:")
print("".join(b.text for b in message.content if b.type == "text"))
print(f"\nПользователей в зоне риска: {len(users)}")
if __name__ == "__main__":
run_churn_check()Шаг 5: Настроить автозапуск (5 мин)
# Открыть crontab
crontab -e
# Добавить строки:
# Понедельник 9:00 — недельный отчёт
0 9 * * 1 cd /path/to/analytics_bot && python weekly_report.py
# Пятница 17:00 — проверка оттока
0 17 * * 5 cd /path/to/analytics_bot && python churn_detector.py >> churn_log.txtПроверка результата: через неделю у тебя в Telegram должен появиться первый автоматический отчёт. Если данных пока мало — это нормально, система работает и накапливает историю.
Инструменты и ресурсы
| Инструмент | Цена | Для чего |
|---|---|---|
| PostHog | Бесплатный месячный лимит у каждого продукта (актуальные лимиты — на странице тарифов PostHog) | Основная продуктовая аналитика, session replay, flags |
| Mixpanel | Есть бесплатный уровень, условия на сайте | Воронки, когорты, когда нужна глубокая поведенческая аналитика |
| Plausible | Платно, есть пробный период, тарифы на сайте | Privacy-first трафиковая аналитика, старт проекта |
| Amplitude | Есть бесплатный уровень, условия на сайте | Альтернатива Mixpanel, сильный retention analysis |
| PostHog MCP | Входит в PostHog | Прямые запросы из Claude Code в PostHog |
| Claude Haiku | Оплата по токенам | Рутинные аналитические задачи |
| Claude Sonnet | Оплата по токенам | Сложный анализ, churn prediction |
Актуальные цены и версии: Актуальное сейчас.
Полезные ссылки:
- PostHog Docs — официальная документация
- PostHog MCP — подключение MCP сервера
- Mixpanel API Reference — документация API
- Amplitude SDK — если выберешь Amplitude
Ключевые выводы
"Данные без интерпретации — это шум. Claude превращает шум в решения."
"Автоматический еженедельный отчёт в Telegram стоит копейки на токены и экономит часы ручной сводки. Но цифры в нём перепроверяй: модель пересказывает данные, а не заменяет аналитика."
"Лучший момент настроить аналитику — до запуска. Второй лучший момент — прямо сейчас."
Следующий урок
→ Анализ ниш и трендов — Exploding Topics, Google Trends API и охота на возможности
Отметка хранится только в этом браузере и никуда не отправляется. Мой прогресс