Как посчитать CAC Payback в SQL

Закрепи формулу cac payback в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать cac payback в Telegram

Зачем 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 в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать cac payback в Telegram

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 короче чем расчётный.

Связанные темы

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 месяцев — что делать?

  1. Уменьшить CAC (cheaper channels), 2) Pricing review, 3) Improve conversion (free → paid).