Как посчитать Paid Traffic в SQL

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

Зачем Paid Traffic

Маркетинг bombs ads: «трафик +200%». Но CPC вырос с 10 до 30 рублей. ROAS — упал. Paid traffic — двусторонний меч: легко растёт, но дорого. Знание метрик помогает оптимизировать.

Определение

Paid traffic — посещения, оплаченные через ads (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 растёт по мере конкуренции / увеличения budget.

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

По каналам

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-параметры losing. Юзер кликнул paid, потом organic — последний касается. UTM может быть lost. Track first-touch.

Ошибка 2. Bot traffic в paid. Click-fraud — fake clicks. CPC выше за реальный traffic, чем измеренный.

Ошибка 3. Compare paid и organic CR напрямую. Paid intent ниже. CR ожидаемо ниже. Сравнивайте within-channel trends.

Ошибка 4. Включить branded paid в organic анализ. Branded paid (search «company name») — часто часть organic strategy. Сегментируйте.

Ошибка 5. CPC vs CPM vs CPA. Разные модели. CPC — pay per click. CPM — per 1000 impressions. CPA — per action.

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

FAQ

Какой CPC считается ok?

Зависит от индустрии. B2C: 5-30 руб (РФ). Финтех B2C: 50-200 руб. B2B SaaS: 200-1000+ руб.

В growth-mode стартапа: 50-70% paid. В зрелом бизнесе: 30-50%.

CPC растёт — что делать?

  1. Optimize bidding. 2) Better targeting. 3) Improve ad copy / quality score. 4) Найдите cheaper channels.

Да. Paid intent ниже. Optimize landing pages, ad-page relevance.

Tracking — UTM или fingerprint?

UTM — standard. Fingerprint — дополнение для cross-device.