Настройка сквозной аналитики для сайта
Сквозная аналитика связывает рекламные расходы с конкретными продажами. Вы видите: реклама в Яндекс.Директ принесла 50 заявок, из них 15 купили на общую сумму 450 000 ₽ при затратах 30 000 ₽. ROAS = 15. Без сквозной аналитики видно только количество кликов или заявок, но не деньги.
Компоненты сквозной аналитики
Трекер рекламных расходов — получает данные о затратах из Яндекс.Директ, Google Ads, ВКонтакте, Facebook через их API.
Коллтрекинг — подменяет номера телефонов на уникальные для каждого источника, чтобы отслеживать звонки.
CRM — хранит сделки с привязкой к источнику лида.
BI/Дашборд — объединяет всё в единую таблицу: расход → визиты → лиды → продажи → выручка.
Готовые решения
Roistat — российская платформа сквозной аналитики. Встраивается скриптом, интегрируется с Директом, Google Ads, amoCRM, Bitrix24. Подходит для большинства малого/среднего бизнеса.
Calltouch — коллтрекинг + базовая сквозная аналитика.
CoMagic — аналог с коллтрекингом.
Собственная реализация — нужна, если готовые решения не покрывают специфику или слишком дороги при больших объёмах.
Собственная сквозная аналитика: архитектура
Рекламные системы (API)
→ ETL-сервис (Python/Go)
→ Хранилище данных (ClickHouse / PostgreSQL / BigQuery)
→ BI-инструмент (Redash / Metabase / Superset)
→ Дашборд
Сайт (UTM + cookies)
→ Backend
→ Хранилище данных
CRM
→ Хранилище данных
Получение данных из рекламных систем
# Яндекс.Директ: получить расходы за период
import requests
headers = {'Authorization': f'Bearer {YANDEX_TOKEN}', 'Client-Login': CLIENT_LOGIN}
report_body = {
'params': {
'SelectionCriteria': {
'DateFrom': '2024-03-01', 'DateTo': '2024-03-31'
},
'FieldNames': ['Date', 'CampaignName', 'Impressions', 'Clicks', 'Cost'],
'ReportName': 'Cost Report',
'ReportType': 'CAMPAIGN_PERFORMANCE_REPORT',
'DateRangeType': 'CUSTOM_DATE',
'Format': 'TSV',
'IncludeVAT': 'YES'
}
}
response = requests.post(
'https://api.direct.yandex.com/json/v5/reports',
headers=headers,
json=report_body
)
Связь лид → рекламный источник
-- Таблица для хранения сессий с UTM
CREATE TABLE sessions (
session_id UUID PRIMARY KEY,
user_id BIGINT REFERENCES users(id),
utm_source VARCHAR(100),
utm_medium VARCHAR(100),
utm_campaign VARCHAR(200),
referrer TEXT,
created_at TIMESTAMP
);
-- Лиды с привязкой к сессии
CREATE TABLE leads (
id BIGINT PRIMARY KEY,
session_id UUID REFERENCES sessions(session_id),
phone VARCHAR(20),
type VARCHAR(50), -- 'form' | 'call' | 'chat'
created_at TIMESTAMP
);
-- Заказы с привязкой к лиду
CREATE TABLE orders (
id BIGINT PRIMARY KEY,
lead_id BIGINT REFERENCES leads(id),
total INTEGER,
status VARCHAR(20),
created_at TIMESTAMP
);
Основной отчёт сквозной аналитики
SELECT
s.utm_source,
s.utm_campaign,
COUNT(DISTINCT s.session_id) as visits,
COUNT(DISTINCT l.id) as leads,
COUNT(DISTINCT o.id) as orders,
SUM(o.total) / 100.0 as revenue,
SUM(rc.cost) / 100.0 as ad_spend,
ROUND(SUM(o.total) / NULLIF(SUM(rc.cost), 0), 2) as roas
FROM sessions s
LEFT JOIN leads l ON l.session_id = s.session_id
LEFT JOIN orders o ON o.lead_id = l.id AND o.status = 'completed'
LEFT JOIN ad_costs rc ON rc.utm_source = s.utm_source
AND rc.utm_campaign = s.utm_campaign
AND DATE_TRUNC('day', rc.date) = DATE_TRUNC('day', s.created_at)
WHERE s.created_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY s.utm_source, s.utm_campaign
ORDER BY revenue DESC NULLS LAST;
Коллтрекинг в собственной реализации
Для отслеживания звонков — интеграция с Calltouch или CoMagic. Они заменяют номер телефона на сайте в зависимости от источника трафика. При звонке передают UTM-параметры через webhook.
Альтернатива — собственный коллтрекинг через SIP-провайдера: пул виртуальных номеров, каждый визитёр получает уникальный номер из пула.
Дашборд в Metabase
Metabase подключается к PostgreSQL напрямую и строит дашборды без написания кода. Для нетехнических маркетологов — оптимальный выбор.
Срок разработки: 4–6 недель для собственной реализации с ETL, хранилищем и дашбордом. Через Roistat — 1–2 недели на интеграцию.







