Что лучше — обычный 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)



