Аналитическая база PostgreSQL: живое демо ETL/ELT

Отдельный контур рядом с CRM: данные Bitrix24 + рекламных кабинетов + Google Sheets, история изменений, витрины для воронок и ИИ-агентов. Цифры ниже посчитаны реальным прогоном на синтетических данных (боевые доступы не использовались).

Аналитик смотрит на дашборд с воронкой и расходами
Один источник правды для маркетинга, продаж и ИИ-агентов
516Лидов
240Сделок (актуальных)
269Версий сделок (SCD2)
461Уникальных людей
659 460Выручка WON, грн
268 119Расход рекламы, грн

516 контактов Bitrix24 склеены в 461 человек: один человек с разными форматами телефона не считается дважды.

Серверная стойка с дисками

Слои базы

rawкак пришло из API, версии записей, ничего не теряетсяbitrix_entity, ads_daily, sheets_plan
stagingтипы, нормализация телефона/UTM, последняя версияпредставления, без копий данных
coreлюди без дублей, SCD2 по сделкам, расход по дням, связиdeal_history, lead, dim_person, ad_spend_daily
martворонка, кампании, стадии, план/фактчитают и аналитик, и ИИ-агент

Выручка по кампаниям: расход из кабинетов + сделки из Bitrix24

Lookalike UAmeta_ads
196 455 грн
Search Genericgoogle_ads
134 566 грн
PMax Cataloggoogle_ads
120 722 грн
Search Brandgoogle_ads
89 713 грн
Retarget 30dmeta_ads
48 559 грн
platformcampaignspendclicksleadsdealswonrevenuecplcacromi_pct
meta_adsLookalike UA55 3167 376944917196 4555883 254255
google_adsSearch Generic83 87411 1851245710134 5666768 38760
google_adsPMax Catalog64 3948 469814110120 7227956 43987
google_adsSearch Brand41 4975 2595921589 7137038 299116
meta_adsRetarget 30d23 0393 0366033448 5593845 760111

Связь по utm_campaign: лид из рекламы доходит до оплаты. CPL = расход / лиды, CAC = расход / оплаченные сделки, ROMI = (выручка − расход) / расход.

Воронка по месяцам

МесяцЛидыБез мусораСделкиОплаченоВыручкаЛид → сделка, %
2026-081701507317180 50742.9
2026-091671538122294 31148.5
2026-101571377413184 64247.1
2026-112222110050

Сколько сделки живут на стадиях (из истории SCD2)

СтадияВерсийСредне дней на стадии
NEGOTIATION1140.5
PREPARATION738.5
NEW838.1
PROPOSAL336.5

План (Google Sheets) против факта (Bitrix24)

МенеджерМесяцПланФактВыполнено, %
112026-1071 00077 925110
122026-1072 000103 746144
132026-1073 000105 055144
112026-1171 00025 14135
122026-1172 00057 45480
132026-1173 00000

История одной сделки (SCD2): каждое изменение = версия с интервалом

СделкаДействует споСтадияСуммаАктуальна
1322026-09-28 00:28:002026-11-01 12:00:00NEW58 324нет
1322026-11-01 12:00:00–NEGOTIATION58 324да

Прогоны

ПрогонРежимСтатусСделок от APIНовых версийДублей отброшеноВерсий в coreВ карантинПересчётов расхода
1day1success227227022700
2day2+replaysuccess4743442115
3day2+replaysuccess404000

Прогон 3 повторил прогон 2 с теми же данными: новых версий 0, число строк в таблицах не изменилось (идемпотентность). «Дублей отброшено» = записи, пришедшие повторно (webhook-replay и нахлёст водяного знака).

Разработчики проверяют код пайплайна

Проверки качества данных (последний прогон)

ПроверкаВажностьСтрок с проблемойСтатус
deal_amount_not_negative_quarantinedwarn0ok
scd2_one_current_version_per_dealcritical0ok
scd2_no_overlapping_intervalscritical0ok
no_duplicate_current_dealscritical0ok
deal_has_known_contactwarn1WARN
raw_to_core_deal_reconciliationcritical0ok
ad_spend_no_gapscritical0ok
lead_utm_matches_campaigninfo16info
lead_has_personcritical0ok
source_freshness_under_72hwarn0ok

Критичная проверка не прошла: прогон откатывается целиком, водяной знак не двигается. Предупреждения не блокируют, но видны в отчёте. Отбракованное лежит в etl.rejected:

dealreason
240отрицательная сумма

Пересчёты расходов рекламными кабинетами

Кабинеты задним числом правят последние дни, поэтому окно загрузки перекрывает 3 последних дня, а изменённые цифры пишутся в журнал (всего пересчётов: 15). Последние:

platformcampaign_iddayold_costnew_cost
google_adsG-10022026-10-311 0151 028
google_adsG-10012026-10-31528542
google_adsG-10032026-10-31704727
meta_adsM-20012026-10-31457482
meta_adsM-20022026-10-31227236
google_adsG-10022026-10-301 1321 154