Налаштування ROI-аналітики за рекламними каналами Бітрікс24
Вбудована аналітика Бітрікс24 CRM показує воронку угод та джерела лідів, але не показує, скільки грошей витрачено на кожен канал відносно виручки. ROI-аналітика — це обчислюваний показник, що вимагає даних з двох джерел: витрати з рекламних систем та доходи з CRM. Налаштування повної картини включає збір даних, маппінг атрибуції та візуалізацію.
Моделі атрибуції
Перш ніж налаштовувати звіти — потрібно визначитися з моделлю атрибуції: якому дотику приписується конверсія.
First-click — перший канал, через який користувач прийшов на сайт. Добре показує, що залучає нову аудиторію.
Last-click — останній канал перед конверсією. Стандарт GA4, Метрики. Переоцінює ретаргетинг та брендові запити.
Linear — рівномірний розподіл між усіма дотиками. Вимагає зберігання ланцюжка дотиків.
Для більшості B2B-компаній з довгим циклом угоди (місяць і більше) оптимальна first-click + last-click — два звіти одночасно. Для e-commerce — достатньо last-click.
Зберігання ланцюжка дотиків
Для мультидотикової атрибуції потрібна таблиця подій відвідувань, пов'язаних з лідом/угодою:
class TouchpointTable extends \Bitrix\Main\ORM\Data\DataManager
{
public static function getTableName(): string { return 'local_crm_touchpoints'; }
public static function getMap(): array
{
return [
new \Bitrix\Main\ORM\Fields\IntegerField('ID', ['primary' => true, 'autocomplete' => true]),
new \Bitrix\Main\ORM\Fields\StringField('SESSION_ID'),
new \Bitrix\Main\ORM\Fields\IntegerField('LEAD_ID'),
new \Bitrix\Main\ORM\Fields\IntegerField('DEAL_ID'),
new \Bitrix\Main\ORM\Fields\StringField('UTM_SOURCE'),
new \Bitrix\Main\ORM\Fields\StringField('UTM_CAMPAIGN'),
new \Bitrix\Main\ORM\Fields\StringField('UTM_MEDIUM'),
new \Bitrix\Main\ORM\Fields\StringField('UTM_TERM'),
new \Bitrix\Main\ORM\Fields\IntegerField('TOUCH_ORDER'), // 1=перший, N=останній
new \Bitrix\Main\ORM\Fields\DatetimeField('CREATED_AT'),
];
}
}
Дані про дотики збираються через JavaScript-код на сайті: при кожному візиті з UTM-параметрами — запис у cookie/localStorage, при відправці форми — передача всього ланцюжка на сервер.
Обчислення ROI
class RoiReportBuilder
{
public function buildReport(string $dateFrom, string $dateTo, string $attributionModel = 'last'): array
{
$deals = $this->getWonDeals($dateFrom, $dateTo);
$costs = $this->getAdCosts($dateFrom, $dateTo);
$revenueByChannel = [];
foreach ($deals as $deal) {
$channel = $this->getChannel($deal, $attributionModel);
$revenueByChannel[$channel] = ($revenueByChannel[$channel] ?? 0) + $deal['OPPORTUNITY'];
}
$result = [];
foreach ($costs as $channel => $cost) {
$revenue = $revenueByChannel[$channel] ?? 0;
$result[] = [
'channel' => $channel,
'spend' => $cost,
'revenue' => $revenue,
'profit' => $revenue - $cost,
'roi' => $cost > 0 ? round(($revenue - $cost) / $cost * 100, 1) : null,
'roas' => $cost > 0 ? round($revenue / $cost, 2) : null,
'cpl' => $cost > 0 ? round($cost / max(1, $this->getLeadsCount($channel, $dateFrom, $dateTo)), 0) : null,
];
}
usort($result, fn($a, $b) => ($b['roi'] ?? -PHP_INT_MAX) <=> ($a['roi'] ?? -PHP_INT_MAX));
return $result;
}
}
Метрики ROAS (Return on Ad Spend) та CPL (Cost Per Lead) доповнюють ROI — ROAS показує, скільки гривень виручки приніс кожен карбованець витрат; CPL — вартість ліда.
Дашборд у Бітрікс24
Для відображення ROI-аналітики в Бітрікс24 — два варіанти.
Варіант 1: Кастомний звіт у /local/php_interface/admin/ — таблиця з фільтром за періодом, можливістю перемикання моделі атрибуції, експортом до Excel.
Варіант 2: Вбудований застосунок Бітрікс24 (React) — дашборд відображається на окремій сторінці порталу. Дані беруться з кастомного бекенду (не з Бітрікс24 напряму). Графіки через Recharts або ApexCharts.
// React-компонент ROI-дашборду
function RoiDashboard() {
const [period, setPeriod] = useState({ from: startOfMonth, to: today });
const [model, setModel] = useState<'first' | 'last' | 'linear'>('last');
const { data, isLoading } = useQuery({
queryKey: ['roi', period, model],
queryFn: () => fetchRoiReport(period, model),
});
return (
<div>
<PeriodSelector value={period} onChange={setPeriod} />
<ModelSelector value={model} onChange={setModel} />
{isLoading ? <Spinner /> : (
<>
<RoiTable data={data?.channels} />
<SpendVsRevenueChart data={data?.channels} />
</>
)}
</div>
);
}
Ключові звіти в системі
Зведена таблиця за каналами (основний звіт):
| Канал | Витрати | Ліди | CPL | Виручка | ROAS | ROI |
|---|---|---|---|---|---|---|
| Яндекс/бренд | 45 000 | 38 | 1 184 | 380 000 | 8,4 | 744% |
| VK/ретаргетинг | 28 000 | 22 | 1 273 | 115 000 | 4,1 | 311% |
| Директ/конкуренти | 67 000 | 19 | 3 526 | 95 000 | 1,4 | 42% |
Динаміка по місяцях — тренд ROI кожного каналу. Дозволяє бачити сезонність та деградацію каналів.
Воронка за джерелами — конверсія лід → кваліфікований → угода в розрізі каналів. Канал з дешевими лідами, але низькою конверсією в угоду, може поступатися дорожчому каналу з якісними лідами.
Склад робіт
- Визначення моделі атрибуції під бізнес-логіку
- Користувацькі поля в лідах та угодах для UTM-даних
- Збір ланцюжка дотиків (JavaScript + сервер)
- Імпорт витрат з рекламних систем (cron)
- Звіт з обчисленням ROI, ROAS, CPL
- Дашборд: адміністративний розділ або React-застосунок Б24
Терміни: базовий ROI-звіт (last-click, один канал) — 1 тиждень. Мультиканальний дашборд з кількома моделями атрибуції — 3–5 тижнів.







