Что лучше — обычный Facebook Pixel или cAPI? На практике и тот, и другой работают одинаково эффективно, даже на больших объёмах. Однако когда в Facebook начинаются «тряски», сообщество традиционно начинает перебирать все варианты и внедрять что-то новое — в столь непростые времена.
Ранее в нашей команде мы использовали трекер Keitaro в связке с S2S-постбэками для передачи конверсий в Facebook через API. Но, как вы знаете, такая связка устроена по принципу:
1 кампания в Keitaro — 1 пиксель — 1 токен,
что не совсем удобно и ограничивает гибкость.
Поэтому мы решили протестировать наработки Адама — платформу для передачи конверсий по API в Meta. У неё был плюс: можно было наглядно отслеживать все переданные события, данные к ним и статусы ответов от Facebook. Однако она не решала ключевую проблему, о которой я говорил выше — необходимость передавать в постбэке и пиксель, и токен.
Чтобы решить этот вопрос, я добавил функционал сохранения пикселя и токена в базу данных. Теперь, когда на платформу приходит S2S-постбэк от Keitaro, в нём содержится только пиксель. Далее система проверяет в БД наличие токена, соответствующего этому пикселю.
Если токен найден — мы отправляем событие в Facebook через API.
Если токен не найден — возвращаем в ответ на постбэк ошибку с сообщением о том, что для указанного Facebook Pixel не найден токен.
- Плафторма для Facebook Conversions API
- Передача данных о лидах с Keitaro в Facebook Conversions API
- Как передаём имя и телефон с Keitaro в cAPI
- Работа с Facebook Pixel и cAPI одновременно
- Пример реализации JS-пикселя с дедупликацией
- Где храним данные для пикселя и cAPI
- Настройка S2S-постбеков для передачи событий Lead и Sale в Facebook через платформу
- 🔹 Постбек для лида (Lead):
- ⚙️ Пошаговая инструкция по настройке постбеков в Keitaro:
- 🧩 Макросы, которые нужно указать вручную в параметрах кампании:
- Как использовать платформу
Плафторма для Facebook Conversions API
Ниже — скриншот платформы для работы с Keitaro и Facebook cAPI.
Интерфейс понятный и интуитивный. На главной странице размещена инструкция по настройке необходимых параметров и постбеков в Keitaro.
Также доступны вкладки «Статистика» и «Пиксели», где баинг вносит свои пиксели и соответствующие им токены.

Передача данных о лидах с Keitaro в Facebook Conversions API
Все основные данные для отправки конверсий мы передаём S2S-постбеком из кампании в Keitaro на собственную платформу. Исключение — токен. Он заранее хранится в базе данных и подтягивается по пикселю.
В дополнение к основным параметрам постбека мы также можем передавать дополнительные данные, такие как имя, телефон, а при наличии — email. Эти данные пригодятся для улучшения качества события в cAPI и повышения точности атрибуции.
Как передаём имя и телефон с Keitaro в cAPI
На всех наших лендингах в файле api.php
после успешной отправки лида мы редиректим пользователя на страницу «спасибо», передавая имя и номер телефона в URL-параметрах для отображения и записи:
header('Location: success.php?name=' . urlencode($_POST['name']) . '&phone=' . urlencode($_POST['phone']));
На странице success.php
мы записываем эти данные в нужные саб-айди следующим образом:
document.addEventListener("DOMContentLoaded", () => { const getCookie = (name) => { const cookies = document.cookie.split(';'); for (let cookie of cookies) { const [key, value] = cookie.trim().split('='); if (key === name) return decodeURIComponent(value); } return null; }; const subid = getCookie('_subid'); const name = new URLSearchParams(window.location.search).get("name"); const phone = new URLSearchParams(window.location.search).get("phone"); if (subid && name && phone) { const pingUrl = `${location.protocol}//${location.hostname}?_update_tokens=1&sub_id=${encodeURIComponent(subid)}&sub_id_22=${encodeURIComponent(name)}&sub_id_23=${encodeURIComponent(phone)}`; const trackingImg = new Image(); trackingImg.src = pingUrl; trackingImg.referrerPolicy = 'no-referrer-when-downgrade'; trackingImg.style.display = 'none'; document.body.appendChild(trackingImg); } });
Эти значения сохраняются и используются для дальнейшей отправки событий в Facebook Conversions API.
Работа с Facebook Pixel и cAPI одновременно
Мы используем как обычный JavaScript Pixel, так и сервисную отправку через cAPI. Чтобы события не дублировались, применяется дедупликация: мы передаём одинаковый eventID
как в js-пикселе, так и в cAPI. Это позволяет Facebook перезаписать событие с более актуальными или точными данными, пришедшими позже через сервер.
Пример реализации JS-пикселя с дедупликацией
document.addEventListener("DOMContentLoaded", () => { const eventKey = "fbEventSent"; const now = Date.now(); const twoHours = 7200 * 1000; const storedEvent = localStorage.getItem(eventKey); if (storedEvent) { try { const { timestamp } = JSON.parse(storedEvent); if (timestamp && now - timestamp < twoHours) return; } catch (e) {} } const pxl = sessionStorage.getItem('pxl'); const subid = sessionStorage.getItem('external_id'); const eventId = sessionStorage.getItem('event_id'); const contentIds = sessionStorage.getItem('content_ids'); if (!pxl) return; !function(f,b,e,v,n,t,s){ if(f.fbq)return; n=f.fbq=function(){ n.callMethod ? n.callMethod.apply(n,arguments) : n.queue.push(arguments); }; if(!f._fbq)f._fbq=n; n.push=n; n.loaded=!0; n.version='2.0'; n.queue=[]; t=b.createElement(e); t.async=!0; t.src=v; s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s) }(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', pxl); const customData = {}; if (subid) customData.external_id = subid; if (contentIds) customData.content_ids = contentIds; if (eventId) { fbq('track', 'Lead', customData, { eventID: eventId }); } else { fbq('track', 'Lead', customData); } localStorage.setItem(eventKey, JSON.stringify({ timestamp: now })); });
Где храним данные для пикселя и cAPI
Все ключевые параметры сохраняем на главной:
const pxl = sessionStorage.getItem('pxl'); const subid = sessionStorage.getItem('external_id'); const eventId = sessionStorage.getItem('event_id'); const contentIds = sessionStorage.getItem('content_ids');
мы сохраняем в sessionStorage
на главной странице лендинга. Это позволяет использовать их как в JS-пикселе, так и в серверной части для отправки через Conversions API.
Настройка S2S-постбеков для передачи событий Lead и Sale в Facebook через платформу
Чтобы корректно отправлять события Lead и Sale в Facebook с помощью нашей платформы, необходимо настроить следующие URL постбеков в Keitaro.
🔹 Постбек для лида (Lead):
https://keitaro/lander/capi/postback.php?clickid={subid}&name={sub_id_22}&phone={sub_id_23}&time={conversion_time}&owner={sub_id_24}&fbclid={fbclid}&country={country_code}&city={city}&ip={ip}&user_agent={user_agent}&revenue={payout}&pixel={pxl}&domain={sub_id_25}&action=lead
🔹 Постбек для продажи (Sale):
https://keitaro/lander/capi/postback.php?clickid={subid}&name={sub_id_22}&phone={sub_id_23}&time={conversion_time}&owner={sub_id_24}&fbclid={fbclid}&country={country_code}&city={city}&ip={ip}&user_agent={user_agent}&revenue={payout}&pixel={pxl}&domain={sub_id_25}&action=sale
⚙️ Пошаговая инструкция по настройке постбеков в Keitaro:
- Перейдите в раздел Кампании → S2S постбеки
- Нажмите кнопку «Добавить»
- Выберите метод запроса: GET
- Вставьте соответствующий URL (для лида или продажи)
- Установите нужный статус события: lead или sale
🧩 Макросы, которые нужно указать вручную в параметрах кампании:
name
— имя клиентаphone
— телефон клиентаowner_name
— имя байера (owner)domain
— домен страницы «спасибо»fbclid
— идентификатор клика Facebook ({fbclid}
)
Как использовать платформу
Внизу вы найдёте архив с платформой. Просто:
- Залейте содержимое архива в директорию оффера в Keitaro
- Подключите платформу к нужной кампании
- Отправляйте S2S-постбеки на файл
postback.php
, как указано выше - Для открытия интерфейса используйте параметр доступа:
?secret=5555
По итогам прикрепляю саму платформу для Keitaro и Facebook Conversions API (cAPI)