Prooflytics + X Ads: атрибуция рекламы до закрытой сделки

Prooflytics + X Ads: атрибуция рекламы до закрытой сделки

X Ads (бывший Twitter Ads) сложнее атрибутировать чем Meta или Google: twclid (X click ID) живёт 7 дней, пиксель теряет данные из-за блокировщиков и iOS-ограничений, нативная X Analytics показывает только конверсии в рамках платформы. Prooflytics замыкает цепочку: клик в X -> лид -> сделка в CRM -> реальный CAC по кампании.

Проблема стандартной атрибуции X Ads

Большинство маркетологов оценивают X Ads по CTR и CPM внутри X Analytics. Это половина картины:

  • X Analytics не видит что происходит после клика
  • X Pixel фиксирует конверсию на сайте (форма, покупка), но не замыкает на CRM
  • Если лид прошёл через SDR-квалификацию и закрылся через 45 дней - X Pixel это не видит (окно 7 дней для клика)
  • Блокировщики и iOS 14+ обрезают pixel-данные

Результат: маркетолог не знает, какая кампания в X приводит платящих клиентов. Оптимизирует по CPL - метрике, которая не коррелирует с выручкой.

X Click ID: twclid

twclid - проприетарный click ID X Ads, аналог gclid Google и fbclid Meta. Передаётся в URL как query-параметр при клике на рекламу.

https://exceltic.dev/landing?twclid=2-1234567890abcdef&utm_source=twitter&utm_campaign=q2_b2b

Характеристики:

  • Срок жизни: 7 дней (у Google - 90, у Meta - 28)
  • Доступен только при paid click (не органика)
  • Уникален для каждого клика

Prooflytics Pixel захватывает twclid при загрузке страницы и привязывает к сессии пользователя.

Архитектура Prooflytics + X Ads

X Ad Click
    |
    v
Landing Page (Prooflytics Pixel захватывает twclid + utm_*)
    |
    v
CRM Lead создан (Prooflytics привязывает twclid к lead_id)
    |
    v
Сделка закрыта (Prooflytics получает событие из CRM webhook)
    |
    v
X Conversions API <- Prooflytics отправляет conversion event с twclid
    |
    v
X Ads Dashboard <- видит реальные конверсии в продажи
    |
    v
Prooflytics Dashboard <- cost per closed deal по кампании/ad group

X Conversions API: server-side события

X CAPI позволяет отправлять события напрямую с сервера минуя браузер. Это устраняет влияние блокировщиков и cookieless браузеров.

Аутентификация через OAuth2 (app-only):

import requests, hashlib

X_CONSUMER_KEY    = "your_consumer_key"
X_CONSUMER_SECRET = "your_consumer_secret"
X_BEARER_TOKEN    = "your_bearer_token"  # app-only, не user token
X_PIXEL_ID        = "your_pixel_id"
X_AD_ACCOUNT_ID   = "your_ad_account_id"

CAPI_BASE = f"https://ads-api.x.com/12/measurement/conversions/{X_PIXEL_ID}"

capi_session = requests.Session()
capi_session.headers.update({
    "Authorization": f"Bearer {X_BEARER_TOKEN}",
    "Content-Type":  "application/json",
})

Отправка conversion event при закрытии сделки:

import hashlib, time, uuid

def hash_email(email: str) -> str:
    """SHA-256 hash of lowercase trimmed email."""
    return hashlib.sha256(email.strip().lower().encode()).hexdigest()

def send_x_conversion(twclid: str, email: str, deal_value: float, deal_id: int) -> dict:
    """Send closed deal conversion to X Conversions API."""
    event = {
        "event_id":          str(uuid.uuid4()),       # для дедупликации с пикселем
        "event_name":        "Purchase",               # стандартное X событие
        "conversion_time":   int(time.time() * 1000), # milliseconds
        "identifiers": [
            {"twclid": twclid} if twclid else None,
            {"hashed_email": hash_email(email)},
        ],
        "contents": [
            {
                "content_id":    f"deal_{deal_id}",
                "content_name":  "Closed Deal",
                "content_price": deal_value,
                "currency":      "EUR",
            }
        ],
        "value": deal_value,
        "currency": "EUR",
        "custom_data": {
            "crm_deal_id": str(deal_id),
        }
    }
    # Убрать None из identifiers
    event["identifiers"] = [i for i in event["identifiers"] if i]

    payload = {
        "conversions": [event],
        "ad_account_id": X_AD_ACCOUNT_ID,
    }
    r = capi_session.post(CAPI_BASE, json=payload)
    r.raise_for_status()
    return r.json()

PII (email) передаётся только в SHA-256 хешированном виде. X не получает реальный email.

Дедупликация: пиксель + CAPI

Если пиксель X уже сработал при заполнении формы, а CAPI отправит событие при закрытии сделки - это два разных события (lead capture vs closed deal). Дедупликация нужна только если одно и то же событие отправляется с обоих каналов. В схеме Prooflytics пиксель фиксирует PageView и Lead, CAPI фиксирует Purchase - дублей нет.

Если всё же нужна дедупликация: event_id должен быть одинаковым в пикселе и CAPI для одного события.

CAC per campaign в Prooflytics

После отправки conversion X Ads Dashboard обновляется в течение 24-48 часов. В Prooflytics доступна более детальная разбивка без задержки:

Campaign A → 12 closed deals → $28,500 revenue
Cost (X Ads spend) → $3,200
CAC → $267 per closed deal

Campaign B → 3 closed deals → $7,200 revenue
Cost (X Ads spend) → $4,100
CAC → $1,367 per closed deal

Prooflytics получает spend из X Ads Reporting API (GET /12/accounts/{id}/campaigns) и замыкает с deal data из CRM.

Особенности X Ads атрибуции

Короткое окно twclid: 7 дней. Для B2B с циклом 30-90+ дней большинство закрытых сделок не будут иметь twclid. Prooflytics использует twclid когда он есть и UTM-параметры как фолбэк для атрибуции по первому/последнему касанию.

View-through атрибуция: X Ads поддерживает атрибуцию показов (не кликов). В B2B это менее актуально - пользователь увидел рекламу но не кликнул, через неделю сам перешёл. Prooflytics не учитывает view-through по умолчанию для B2B сделок (только click-based).

X Ads и органика: X не передаёт twclid для органических переходов с платформы. Если пользователь кликнул на органический пост - атрибуция через UTM.

Реальный кейс

SaaS-компания тратила $6,000/мес на X Ads. X Analytics показывал 340 “конверсий” (lead forms) и CPL $17.6. Через месяц Prooflytics замкнул данные с CRM:

  • Из 340 лидов квалифицированы: 42
  • Закрыто сделок: 8
  • Реальный CAC из X Ads: $750
  • Сравнение с Google Ads: CAC $280

Решение: снизить бюджет X Ads на 60%, перераспределить в Google. Через 2 месяца общий CAC компании снизился на 23%.

Для кого подходит

Компании которые тестируют X Ads как B2B-канал и хотят понять реальный ROI без опоры на платформенную аналитику. Особенно актуально для FinTech, DevTool и SaaS-продуктов, чья аудитория активна на X.

Аналогичная атрибуция для других рекламных платформ: Prooflytics + LinkedIn Ads, Prooflytics + Meta Ads, Prooflytics + Google Ads.

Часто задаваемые вопросы

Что такое X Conversions API и зачем он нужен если есть пиксель?

X Pixel работает в браузере - его блокируют блокировщики рекламы (uBlock, Brave) и iOS App Tracking Transparency. CAPI работает на сервере и не зависит от браузерных ограничений. По данным X, CAPI увеличивает точность атрибуции на 20-30% по сравнению с pixel-only подходом.

Как X Conversions API верифицирует данные?

Данные отправляются с вашего сервера через Bearer token (app-only OAuth2). Хешированный email (hashed_email) используется X для match с аккаунтами пользователей. twclid даёт точное совпадение - email матчинг нужен для атрибуции без twclid (когда пользователь зашёл без клика на рекламу).

X Ads эффективен для B2B?

Зависит от ниши. DevTools, FinTech, SaaS для технических команд - X (Twitter) остаётся активной площадкой. Enterprise B2B - LinkedIn эффективнее. eCPM в X значительно ниже чем в LinkedIn, что даёт больше охвата при том же бюджете. Но качество аудитории нужно проверять через Prooflytics по реальным CAC, не по платформенным метрикам.

Сколько времени занимает настройка Prooflytics для X Ads?

Pixel устанавливается за 30 минут (один скрипт на сайте). CAPI-интеграция через Prooflytics настраивается без кода - только ввод credentials X Ads. CRM-интеграция для передачи данных о закрытых сделках - ещё 1 час для Kommo или HubSpot. Первые данные в Prooflytics Dashboard появляются в течение 24 часов.

Итог

Prooflytics + X Ads даёт картину, которую X Analytics показать не может:

  • twclid capture при клике через Prooflytics Pixel
  • X CAPI: server-side events при закрытии сделки (Bearer token, OAuth2 app-only)
  • SHA-256 хеш email для mathing без PII
  • CAC per campaign в Prooflytics без 7-дневного ограничения twclid через UTM-фолбэк

Если тестируете X Ads и хотите реальный ROI-анализ - свяжитесь с командой Exceltic.dev. Настроим Prooflytics под ваш рекламный аккаунт и CRM.

Ещё статьи

Все →