Как посчитать blended CAC в SQL
Содержание:
Зачем blended CAC
Paid CAC = расходы paid каналов / paid users. Blended CAC = все маркетинг-расходы / все customers. Blended честнее показывает «сколько в реальности стоит юзер»: даже у organic есть costs (контент-команда, SEO tools, branding). Инвесторы и борды обычно смотрят blended.
Формула
blended_CAC = (total marketing + sales spend) / (total new customers)В отличие от paid CAC, в знаменатель идут ВСЕ customers, включая organic, referral, branded.
Blended CAC в SQL
WITH spend AS (
SELECT SUM(amount) AS total_spend
FROM marketing_spend
WHERE spend_date >= '2026-04-01' AND spend_date < '2026-05-01'
),
all_new AS (
SELECT COUNT(*) AS new_users
FROM users
WHERE created_at >= '2026-04-01' AND created_at < '2026-05-01'
)
SELECT
s.total_spend,
a.new_users,
s.total_spend / NULLIF(a.new_users, 0) AS blended_cac
FROM spend s, all_new a;Включайте sales-расходы (зарплаты, инструменты) — реальный CAC для B2B обычно выше, чем выглядит только по marketing.
Paid vs blended
WITH paid AS (
SELECT SUM(amount) AS spend
FROM marketing_spend
WHERE channel_type = 'paid'
AND spend_date >= '2026-04-01' AND spend_date < '2026-05-01'
),
paid_users AS (
SELECT COUNT(*) AS n
FROM users
WHERE utm_source IN ('google_ads', 'facebook_ads', 'tiktok_ads')
AND created_at >= '2026-04-01' AND created_at < '2026-05-01'
),
total_spend AS (
SELECT SUM(amount) AS spend
FROM marketing_spend
WHERE spend_date >= '2026-04-01' AND spend_date < '2026-05-01'
),
all_users AS (
SELECT COUNT(*) AS n FROM users
WHERE created_at >= '2026-04-01' AND created_at < '2026-05-01'
)
SELECT
paid.spend / NULLIF(paid_users.n, 0) AS paid_cac,
total_spend.spend / NULLIF(all_users.n, 0) AS blended_cac,
paid.spend / NULLIF(paid_users.n, 0) - total_spend.spend / NULLIF(all_users.n, 0) AS gap
FROM paid, paid_users, total_spend, all_users;Big gap (paid CAC >> blended) — organic тянет вниз blended. Это «бесплатные» customers, но реальная цена контента.
Помесячная динамика
WITH monthly_spend AS (
SELECT DATE_TRUNC('month', spend_date)::DATE AS month, SUM(amount) AS spend
FROM marketing_spend
GROUP BY DATE_TRUNC('month', spend_date)
),
monthly_users AS (
SELECT DATE_TRUNC('month', created_at)::DATE AS month, COUNT(*) AS n
FROM users
GROUP BY DATE_TRUNC('month', created_at)
)
SELECT
s.month,
s.spend,
u.n AS new_users,
s.spend / NULLIF(u.n, 0) AS blended_cac
FROM monthly_spend s
JOIN monthly_users u USING (month)
ORDER BY s.month;Растущий blended CAC — flag: рост стоит дороже, нужен новый ход.
Частые ошибки
Ошибка 1. Не включать sales costs. Для B2B sales — половина CAC. Если считаете только marketing, занижение в 2 раза.
Ошибка 2. Считать только paid users в знаменатель blended. Это уже не blended, это paid CAC.
Ошибка 3. Включать full FTE costs частично. Если у вас designer 50% marketing, 50% product — include 50%, не 100%.
Ошибка 4. Игнорировать tooling costs. HubSpot, GA, attribution tools — все идут в numerator.
Ошибка 5. Сравнивать blended CAC между компаниями без контекста. Стадии (early vs late stage), модель (PLG vs sales-led), сегмент (Enterprise vs SMB) — несравнимо без нормализации.
Связанные темы
- Как посчитать CAC в SQL
- Как посчитать CAC по каналам в SQL
- Как посчитать LTV в SQL
- Как посчитать CAC payback в SQL
FAQ
Paid CAC vs blended — что доверять?
Борды и инвесторы — blended. Performance-команды — paid (контролируют только это).
Какой blended CAC хороший?
SaaS B2C: $50-200. B2B SMB: $500-2000. B2B Enterprise: $5K+.
Включать ли refunds?
Customers с refund = чистые потери. Обычно не включают в knowledge base (или считают net new = new − refunds).
Headcount costs полностью?
Pro-rata по времени. Если marketing team 40% время на ABM-кампанию — 40%.
Free trial → paid — это CAC?
CAC обычно считают per paid customer. Trial conversion — отдельно.