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 показать не может:
twclidcapture при клике через 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.