Как посчитать Paid Traffic в SQL
users столбец is_test может быть 0, 1 или NULL. Нужно исключить тестовых пользователей (is_test = 1), но оставить остальных, включая NULL. Какой фильтр корректен?Содержание:
Зачем Paid Traffic
Маркетинг заливает деньги в рекламу: «трафик +200%». Но CPC вырос с 10 до 30 рублей. ROAS — упал. Paid traffic — палка о двух концах: масштабируется легко, но стоит дорого. Знание метрик помогает его оптимизировать.
Определение
Paid traffic — посещения, оплаченные через рекламу (Yandex.Direct, Google Ads, ВКонтакте Ads и т.д.).
В UTM: utm_medium=cpc / paid / display / social.
Базовый расчёт
SELECT
DATE_TRUNC('month', session_date) AS month,
COUNT(DISTINCT visitor_id) AS paid_visitors,
COUNT(*) AS paid_sessions
FROM sessions
WHERE medium IN ('cpc', 'paid', 'display', 'social-paid')
AND session_date >= '2026-01-01'
GROUP BY 1
ORDER BY 1;CPC
WITH spend AS (
SELECT
DATE_TRUNC('month', DATE) AS month,
SUM(spend) AS total_spend,
SUM(clicks) AS total_clicks
FROM ad_spend
WHERE DATE >= '2026-01-01'
GROUP BY 1
)
SELECT
month,
total_spend,
total_clicks,
total_spend / NULLIF(total_clicks, 0) AS cpc
FROM spend
ORDER BY month;CPC растёт по мере роста конкуренции и увеличения бюджета.
По каналам
WITH paid_stats AS (
SELECT
utm_source,
utm_campaign,
COUNT(DISTINCT visitor_id) AS visitors,
COUNT(*) AS sessions
FROM sessions
WHERE medium = 'cpc'
AND session_date >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY utm_source, utm_campaign
),
ad_data AS (
SELECT
utm_source,
utm_campaign,
SUM(spend) AS spend,
SUM(clicks) AS clicks
FROM ad_spend
WHERE DATE >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY utm_source, utm_campaign
)
SELECT
p.utm_source,
p.utm_campaign,
p.visitors,
p.sessions,
a.spend,
a.spend / NULLIF(p.sessions, 0) AS cost_per_session,
a.spend / NULLIF(a.clicks, 0) AS cpc
FROM paid_stats p
LEFT JOIN ad_data a USING (utm_source, utm_campaign)
ORDER BY a.spend DESC NULLS LAST;Частые ошибки
Ошибка 1. Потеря UTM-параметров. Пользователь кликнул по платному объявлению, потом зашёл из органики — засчитывается последнее касание, и UTM платного канала теряется. Отслеживайте первое касание (first-touch).
Ошибка 2. Ботовый трафик в платном канале. Click-fraud — это накрутка кликов ботами. Из-за неё реальный CPC за живой трафик выше, чем показывает отчёт.
Ошибка 3. Сравнивать конверсию платного и органического трафика напрямую. У платного трафика интент обычно ниже, поэтому и конверсия закономерно ниже. Сравнивайте динамику внутри одного канала, а не каналы между собой.
Ошибка 4. Мешать брендовую платную рекламу с органикой. Брендовая платная реклама (запросы с названием компании) по сути перехватывает органический спрос. Выделяйте её в отдельный сегмент.
Ошибка 5. CPC vs CPM vs CPA. Это разные модели оплаты. CPC — плата за клик. CPM — за 1000 показов. CPA — за целевое действие.
Связанные темы
- Как посчитать ROAS в SQL
- Как посчитать CAC в SQL
- Как посчитать organic traffic в SQL
- Как посчитать конверсию в SQL
FAQ
Какой CPC считается нормальным?
Зависит от индустрии. В массовом B2C по России это 5–30 руб за клик, в финтех-B2C — 50–200 руб, а в B2B SaaS доходит до 200–1000 руб и выше. Ориентируйтесь не на абсолютную цифру, а на то, окупается ли клик вашей выручкой.
Какая доля платного трафика считается нормой?
У стартапа в фазе активного роста платный трафик занимает 50–70%. В зрелом бизнесе здоровая доля — 30–50%, потому что органика и удержание уже дают устойчивый поток без рекламы.
CPC растёт — что делать?
Первым делом пересмотрите ставки и стратегию биддинга, а затем уточните таргетинг, чтобы не платить за нецелевую аудиторию. Улучшите объявления и посадочные страницы — это поднимает quality score и снижает цену клика. Параллельно тестируйте более дешёвые каналы.
Paid traffic CR ниже organic — норма?
Да, это нормально: у платного трафика интент в среднем ниже, чем у органического. Чтобы сократить разрыв, работайте над посадочными страницами и соответствием объявления той странице, на которую оно ведёт.
Что использовать для трекинга — UTM или fingerprint?
UTM-метки — это стандарт и основа атрибуции. Fingerprint используют как дополнение, чтобы связывать сессии одного пользователя между устройствами, когда UTM не хватает.