Как посчитать Trial Conversion в SQL
Содержание:
Зачем Trial Conversion
В SaaS и подписочных моделях главный funnel: trial → paid. Если CR падает на 5 п.п. — катастрофа: пятилетний clientLifetime превратился в трёхлетний, unit-экономика просела.
Что такое Trial Conversion
Trial Conversion — доля пользователей, перешедших с бесплатного trial на paid-подписку.
Trial Conversion = paid_users / trial_users × 100%Period обычно: 30 / 60 / 90 дней с trial-старта (зависит от модели).
Базовый расчёт
Данные: subscriptions(user_id, started_at, plan_type, paid_at).
WITH trial_users AS (
SELECT user_id, started_at
FROM subscriptions
WHERE plan_type = 'trial'
AND started_at >= '2026-01-01'
AND started_at < '2026-04-01'
),
converted AS (
SELECT DISTINCT t.user_id
FROM trial_users t
JOIN subscriptions s ON s.user_id = t.user_id
WHERE s.plan_type IN ('basic', 'premium')
AND s.paid_at IS NOT NULL
AND s.started_at > t.started_at
AND s.started_at < t.started_at + INTERVAL '30 days'
)
SELECT
(SELECT COUNT(*) FROM trial_users) AS trials,
(SELECT COUNT(*) FROM converted) AS converted,
(SELECT COUNT(*) FROM converted)::NUMERIC * 100
/ NULLIF((SELECT COUNT(*) FROM trial_users), 0) AS trial_conv_pct;Важно: временное окно для conversion должно соответствовать модели (30/60/90 дней).
Trial Conversion по cohort
WITH cohort AS (
SELECT
user_id,
DATE_TRUNC('month', started_at) AS cohort_month
FROM subscriptions
WHERE plan_type = 'trial'
AND started_at >= '2026-01-01'
),
converted AS (
SELECT
c.cohort_month,
c.user_id
FROM cohort c
JOIN subscriptions s ON s.user_id = c.user_id
AND s.plan_type IN ('basic', 'premium')
AND s.paid_at IS NOT NULL
AND s.started_at < (SELECT MIN(started_at) FROM subscriptions WHERE user_id = c.user_id AND plan_type = 'trial') + INTERVAL '30 days'
)
SELECT
c.cohort_month,
COUNT(DISTINCT c.user_id) AS trials,
COUNT(DISTINCT cv.user_id) AS converted,
COUNT(DISTINCT cv.user_id)::NUMERIC * 100
/ NULLIF(COUNT(DISTINCT c.user_id), 0) AS conv_pct
FROM cohort c
LEFT JOIN converted cv ON cv.user_id = c.user_id
GROUP BY c.cohort_month
ORDER BY c.cohort_month;По тарифам / сегментам
WITH stats AS (
SELECT
u.acquisition_channel,
COUNT(DISTINCT CASE WHEN s.plan_type = 'trial' THEN s.user_id END) AS trials,
COUNT(DISTINCT CASE WHEN s.plan_type IN ('basic','premium') AND s.paid_at IS NOT NULL THEN s.user_id END) AS paid
FROM users u
JOIN subscriptions s ON s.user_id = u.user_id
WHERE s.started_at >= '2026-01-01'
GROUP BY u.acquisition_channel
)
SELECT
acquisition_channel,
trials,
paid,
paid::NUMERIC * 100 / NULLIF(trials, 0) AS conv_pct
FROM stats
ORDER BY conv_pct DESC;Частые ошибки
Ошибка 1. Не фиксировать окно конверсии. Юзер заплатил через год после trial — это conversion? В стандартной логике — нет.
Ошибка 2. Включать не-trials. Если юзер пришёл сразу на paid (без trial) — это не trial conversion, это direct purchase.
Ошибка 3. Дубль trial. Юзер взял trial 2 раза (на разные продукты). Считайте уникальных по user_id × product.
Ошибка 4. Сравнивать cohort с разной длительностью окна. Cohort января имеет 4 месяца на конверсию. Cohort апреля — 1 месяц. Сравнение нечестное. Используйте same-window comparison.
Ошибка 5. Конверсия без revenue. 30% trial → paid — может означать $10/мес юзера. 5% trial → paid — может быть $1000/мес enterprise. Смотрите revenue-weighted.
Ошибка 6. Игнорировать downgrade. Юзер с premium перешёл на basic = paid? Да, но это не «full» conversion.
Связанные темы
- Как посчитать MRR в SQL
- Как посчитать MRR Churn в SQL
- Как посчитать LTV в SQL
- Holdout vs A/B на практике
FAQ
Какая Trial Conversion считается хорошей?
В B2B SaaS — 15-25%. В B2C — 5-15%. Зависит от cost и сложности продукта.
Free trial или freemium?
Free trial — limited time. Freemium — limited features. Conversion обычно выше у trial (давление времени).
Какое окно конверсии?
Сколько длится trial + 7 дней grace period. Если trial 14 дней — окно 21 день.
Trial Conversion упал — что делать?
Декомпозиция: onboarding (юзеры не активируются?), value (продукт не показывает value?), pricing (дорого?), competitor.
Trial → Paid → Churn — это conversion?
Технически да, но low-quality. Смотрите 90-day или 12-month retained conversion.