Как посчитать payback period в SQL

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

Что такое payback period

Payback period — за сколько месяцев привлечённый клиент окупит свой CAC. Если CAC = $1200, а клиент приносит $200 валовой прибыли в месяц — payback ≈ 6 месяцев.

Зачем это знать:

  • Подсказывает финансовому здоровью бизнеса (короткий payback = быстрее реинвестируем)
  • Влияет на стратегию роста (длинный payback требует много капитала)
  • Стандарт для SaaS: <12 месяцев — хорошо, >24 — тревога

На собесе аналитика часто спрашивают вместе с CAC и LTV.

Формула

Payback period = CAC / Gross Margin per Month

Где Gross Margin per Month = ARPU × Margin (1 - cost_of_revenue_share).

Для простоты в учебниках часто используют:

Payback period (months) = CAC / Monthly ARPU

Это даёт период до того, как клиент окупит привлечение по выручке (без учёта стоимости обслуживания).

SQL: payback period простой

Допустим, есть таблицы customers (с CAC) и revenue_monthly (с выручкой по месяцам):

WITH customer_cac AS (
  SELECT customer_id, cac
  FROM customers
  WHERE acquired_at >= '2026-01-01'
),
customer_arpu AS (
  -- ARPU = средняя месячная выручка за наблюдаемый период
  SELECT
    customer_id,
    AVG(monthly_revenue) AS avg_monthly_revenue
  FROM revenue_monthly
  GROUP BY customer_id
)
SELECT
  ROUND(AVG(c.cac::NUMERIC / NULLIF(a.avg_monthly_revenue, 0)), 1) AS payback_months
FROM customer_cac c
JOIN customer_arpu a USING (customer_id);

Без NULLIF запрос упадёт на клиентах с нулевой выручкой.

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

SQL: payback по когортам

Чтобы видеть payback по месяцу регистрации:

WITH cohort AS (
  SELECT
    customer_id,
    DATE_TRUNC('month', acquired_at) AS cohort_month,
    cac
  FROM customers
),
revenue AS (
  SELECT
    customer_id,
    AVG(monthly_revenue) AS avg_arpu
  FROM revenue_monthly
  GROUP BY customer_id
)
SELECT
  c.cohort_month,
  COUNT(*) AS customers,
  ROUND(AVG(c.cac), 0) AS avg_cac,
  ROUND(AVG(r.avg_arpu), 0) AS avg_arpu,
  ROUND(AVG(c.cac::NUMERIC / NULLIF(r.avg_arpu, 0)), 1) AS payback_months
FROM cohort c
LEFT JOIN revenue r USING (customer_id)
GROUP BY 1
ORDER BY 1;

Это даст когортный график payback. Если payback растёт — CAC опережает ARPU, проблема.

Месячный payback

Точнее — кумулятивная выручка с клиента к месяцу N. Когда она перевалила за CAC — окупился.

WITH cumulative AS (
  SELECT
    customer_id,
    months_since_signup,
    SUM(monthly_revenue) OVER (
      PARTITION BY customer_id
      ORDER BY months_since_signup
    ) AS cumulative_revenue
  FROM revenue_monthly
)
SELECT
  cum.customer_id,
  MIN(cum.months_since_signup) AS payback_month
FROM cumulative cum
JOIN customers c ON c.customer_id = cum.customer_id
WHERE cum.cumulative_revenue >= c.cac
GROUP BY cum.customer_id;

Этот запрос даёт реальный payback по каждому клиенту. Среднее или медиана — финальный показатель.

Частые ошибки

Использовать выручку вместо gross margin. Если у вас high cost of revenue (например, маркетплейс с комиссией 10% — дешевле в разы) — payback по выручке завышен. Корректно — gross margin per month.

Не учитывать blended CAC vs paid-only CAC. Если 50% клиентов пришли organic — blended CAC ниже реального ROI на платный канал.

Делить на ноль. Бесплатные тарифы → 0 ARPU. NULLIF спасает.

Считать payback на маленькой когорте. Один большой клиент → искажённое среднее. Используйте медиану или взвешенное среднее.

Не учитывать churn. Если payback 18 месяцев, а 70% клиентов уходит за 6 месяцев — фактический payback не достигается. Считайте payback с поправкой на retention.

FAQ

Какой payback считается хорошим?

SMB SaaS — <12 месяцев. Enterprise SaaS — <24 месяцев. Маркетплейс — обычно <6 месяцев.

Что важнее — payback или LTV/CAC?

Связанные, но разные метрики. Payback — про скорость окупаемости (cash flow). LTV/CAC — про долгосрочную прибыльность. На собесе спросят оба.

Это официальная информация?

Нет. Статья основана на индустриальных практиках.