Налаштування зв'язки рекламних витрат з CRM Бітрікс24
Рекламні витрати живуть у Яндекс.Директі, Google Ads, ВКонтакте, myTarget — в окремих кабінетах з окремими метриками. Виручка — у CRM Бітрікс24. Без зв'язки неможливо порахувати реальний ROI за каналами: скільки витратили на Директ і скільки з цього закрилося в гроші. Налаштування цієї зв'язки — завдання на перетині рекламних API та CRM.
Принцип атрибуції
Зв'язок «реклама → лід → угода → гроші» будується на UTM-мітках. Кожне оголошення позначається UTM-параметрами, які потрапляють у Бітрікс24 при створенні ліда. Після закриття угоди — виручка за цією угодою атрибутується до кампанії.
utm_source=yandex&utm_medium=cpc&utm_campaign=brand&utm_term=купити
→ Лід (UF_CRM_UTM_*) → Угода → Сума
+ Витрати за кампанією з Яндекс Директ API
= ROI
Структура користувацьких полів
В угодах Бітрікс24 потрібні поля для зберігання UTM-даних:
| Поле | Код | Тип |
|---|---|---|
| Джерело | UF_CRM_UTM_SOURCE | string |
| Кампанія | UF_CRM_UTM_CAMPAIGN | string |
| ID кампанії | UF_CRM_CAMPAIGN_ID | string |
| Канал | UF_CRM_UTM_MEDIUM | string |
| Ключове слово | UF_CRM_UTM_TERM | string |
| Оголошення (ID) | UF_CRM_AD_ID | string |
Поля створюються через crm.userfield.add або в інтерфейсі Бітрікс24.
При створенні ліда з будь-якого рекламного каналу (Директ, VK, Facebook) — UTM-мітки зберігаються в ці поля. При конвертації ліда в угоду — поля копіюються (налаштування через «Джерела» в Б24 або через REST).
Імпорт витрат з рекламних систем
Щоденний cron імпортує витрати за попередній день з кожної рекламної системи в агрегаційну таблицю:
// Яндекс.Директ: витрати за кампаніями за день
public function importDirectCosts(string $date): void
{
$report = $this->directApi->getReport([
'ReportType' => 'CAMPAIGN_PERFORMANCE_REPORT',
'DateRangeType' => 'CUSTOM_DATE',
'DateFrom' => $date,
'DateTo' => $date,
'FieldNames' => ['CampaignId', 'CampaignName', 'Cost', 'Clicks', 'Impressions'],
]);
foreach ($report as $row) {
AdCostTable::add([
'DATE' => $date,
'SOURCE' => 'yandex',
'CAMPAIGN_ID' => $row['CampaignId'],
'CAMPAIGN' => $row['CampaignName'],
'COST' => $row['Cost'] / 1000000, // Директ повертає в мікрорублях
'CLICKS' => $row['Clicks'],
]);
}
}
Аналогічно для VK Ads (ads.getStatistics) та Google Ads (Google Ads API, CampaignService).
Звіт ROI у Бітрікс24
Підсумковий звіт будується запитом, що об'єднує витрати та виручку:
SELECT
d.UF_CRM_UTM_SOURCE as source,
d.UF_CRM_CAMPAIGN_ID as campaign_id,
SUM(ac.COST) as ad_spend,
COUNT(DISTINCT d.ID) as deals_count,
SUM(d.OPPORTUNITY) as revenue,
ROUND((SUM(d.OPPORTUNITY) - SUM(ac.COST)) / NULLIF(SUM(ac.COST), 0) * 100, 1) as roi_pct
FROM b_crm_deal d
LEFT JOIN local_ad_costs ac
ON ac.CAMPAIGN_ID = d.UF_CRM_CAMPAIGN_ID
AND ac.SOURCE = d.UF_CRM_UTM_SOURCE
AND DATE(ac.DATE) = DATE(d.DATE_CREATE)
WHERE d.STAGE_ID = 'WON'
AND d.DATE_CLOSE BETWEEN :date_from AND :date_to
GROUP BY d.UF_CRM_UTM_SOURCE, d.UF_CRM_CAMPAIGN_ID
ORDER BY roi_pct DESC
Звіт відображається в адміністративному розділі Бітрікс24 або в інтегрованому BI-інструменті (Yandex DataLens, Google Looker Studio).
Передача витрат назад до Яндекс.Метрики
Для відображення ROI прямо в Метриці — завантаження витрат через counter.uploadOfflineConversions (застарілий) або через Data2 API. За наявності наскрізної аналітики через Метрику — підключення через «Імпорт даних про витрати» з файлу CSV, який генерує 1С-Бітрікс.
Склад робіт
- Створення користувацьких полів в угодах Б24
- Налаштування передачі UTM при створенні ліда (всі канали)
- Розробка імпортерів витрат: Директ, VK Ads, Facebook/Instagram
- Агрегаційна таблиця
local_ad_costs - Звіт ROI за кампаніями з фільтрами за періодом та каналом
- Налаштування cron-розкладу імпорту
Терміни: 1–2 тижні для базової зв'язки (Директ + один канал). 3–4 тижні для мультиканального ROI-звіту з BI-дашбордом.







