Как посчитать CAC Payback в SQL
Содержание:
Зачем CAC Payback
В SaaS / подписочных моделях CAC Payback — сколько месяцев нужно, чтобы окупить расход на привлечение клиента. Если CAC $1200 при ARPU $100/мес и Gross Margin 80% — payback = 1200 / (100 × 0.8) = 15 месяцев.
Формула CAC Payback
CAC Payback (months) = CAC / (ARPU × Gross Margin)ARPU per month. Gross Margin — если есть, иначе считают на gross revenue.
Базовый расчёт
Данные: users(user_id, signup_date), transactions(user_id, amount, paid_at), marketing_spend(month, channel, spend).
WITH new_users AS (
SELECT
DATE_TRUNC('month', signup_date) AS month,
COUNT(*) AS new_users
FROM users
WHERE signup_date >= '2026-01-01'
GROUP BY 1
),
spend AS (
SELECT
DATE_TRUNC('month', month) AS month,
SUM(spend) AS total_spend
FROM marketing_spend
GROUP BY 1
),
cac AS (
SELECT
n.month,
s.total_spend / NULLIF(n.new_users, 0) AS cac_per_user
FROM new_users n
JOIN spend s ON s.month = n.month
),
arpu AS (
SELECT AVG(t.amount) AS avg_monthly_arpu
FROM transactions t
WHERE t.status = 'success'
AND t.paid_at >= CURRENT_DATE - INTERVAL '30 days'
)
SELECT
c.month,
c.cac_per_user,
a.avg_monthly_arpu,
c.cac_per_user / NULLIF(a.avg_monthly_arpu * 0.8, 0) AS cac_payback_months
FROM cac c
CROSS JOIN arpu a
ORDER BY c.month;0.8 — gross margin assumption. Подставьте реальное.
CAC Payback по сегментам
WITH by_channel AS (
SELECT
u.acquisition_channel,
COUNT(DISTINCT u.user_id) AS new_users,
AVG(t.amount) AS avg_arpu
FROM users u
LEFT JOIN transactions t ON t.user_id = u.user_id AND t.status = 'success'
WHERE u.signup_date >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY u.acquisition_channel
),
spend AS (
SELECT
channel,
SUM(spend) AS total_spend
FROM marketing_spend
WHERE month >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY channel
)
SELECT
bc.acquisition_channel,
bc.new_users,
bc.avg_arpu,
s.total_spend / NULLIF(bc.new_users, 0) AS cac,
(s.total_spend / NULLIF(bc.new_users, 0))
/ NULLIF(bc.avg_arpu * 0.8, 0) AS cac_payback_months
FROM by_channel bc
JOIN spend s ON s.channel = bc.acquisition_channel
ORDER BY cac_payback_months;Частые ошибки
Ошибка 1. Считать на gross revenue без margin. ARPU — gross revenue. Реально окупаете только маржу. С margin payback дольше.
Ошибка 2. Annual ARPU вместо monthly. Перепутаете: если ARPU 1200 в год, payback = CAC / (100 × 0.8), не CAC / (1200 × 0.8).
Ошибка 3. Не учитывать churn. Если churn high, юзер может не дожить до payback. LTV/CAC ratio лучше.
Ошибка 4. Один CAC на все channels. CAC сильно отличается по каналам. Сегментируйте.
Ошибка 5. Игнорировать pricing trends. Если ARPU растёт со временем — payback короче чем расчётный.
Связанные темы
- Как посчитать CAC в SQL
- Как посчитать LTV в SQL
- Как посчитать payback period в SQL
- Как посчитать unit-economics в SQL
FAQ
Какой CAC Payback считается хорошим?
SaaS B2B: 12-18 месяцев. SaaS B2C: 6-12. <6 — отлично. >24 — критично.
CAC Payback или LTV/CAC?
LTV/CAC — long-term. CAC Payback — короткий горизонт окупаемости. Лучше обе.
Включать gross margin?
Стандарт — да. Без margin payback кажется лучше, чем есть.
CAC Payback < 12 месяцев — что делать?
Растите. Каждый рубль в S&M окупается быстро.
CAC Payback > 24 месяцев — что делать?
- Уменьшить CAC (cheaper channels), 2) Pricing review, 3) Improve conversion (free → paid).