Пиксель ТикТок: как создать, установить и настроить Events API
Пиксель ТикТок по шагам: как создать в Events Manager, поставить код, через GTM и на Тильду, события, Advanced Matching, Events API и конверсии из Keitaro…

Пиксель TikTok (TikTok Pixel): фрагмент JavaScript-кода, который ставят на сайт, чтобы передавать в TikTok действия посетителей: просмотр страницы, заявку, покупку. По этим событиям TikTok Ads считает конверсии, обучает оптимизацию и собирает аудитории для ретаргетинга. Создают пиксель в Events Manager: Tools → Events → Connect data source → Web.
Ниже по шагам: как создать и установить пиксель ТикТок вручную, через Google Tag Manager и Тильду, какие события ставить, как включить Advanced Matching, подключить Events API и передать в TikTok апрувы из Keitaro. Названия кнопок, лимиты и поля взяты из справки TikTok и документации для разработчиков на 1 октября 2026 года.
- Что такое пиксель TikTok и зачем к нему Events API
- Как создать пиксель TikTok
- Как установить пиксель на сайт
- Вручную: базовый код в <head>
- Через Google Tag Manager
- Через CMS и Тильду
- На лендинге в Keitaro
- Стандартные события и параметры
- Event Builder или код
- Advanced Matching: email и телефон в SHA-256
- Events API: серверная отправка событий
- ttclid: главный ключ для арбитражника
- Дедупликация пикселя и Events API
- Как передать конверсию из Keitaro в TikTok
- Способ 1: встроенная интеграция Keitaro
- Способ 2: свой мост от S2S-постбэка к Events API
- Как проверить пиксель
- Почему TikTok и Keitaro показывают разные цифры
- Частые вопросы
- Как активировать пиксель тик ток?
- Где найти ID пикселя TikTok?
- Нужен ли Events API, если пиксель уже стоит?
- Можно ли оптимизировать кампанию на своё событие?
- Почему события не видны в Events Manager?
Что такое пиксель TikTok и зачем к нему Events API
По справке TikTok, пиксель измеряет трафик сайта и результаты кампаний и помогает их оптимизировать. Вместе с событием он передаёт данные о рекламе, время, IP-адрес, User-Agent, cookies, метаданные страницы и клики по кнопкам. Для цели Web Conversions пиксель или Events API обязательны.
Пиксель работает в браузере, поэтому часть событий теряется из-за блокировщиков и обрывов связи. Events API отправляет события с вашего сервера, и TikTok советует подключать оба канала сразу (сравнение способов).
| Способ | Как работает | Срок внедрения по оценке TikTok |
|---|---|---|
| Пиксель | События из браузера | Вручную: несколько минут |
| Events API | События с сервера, вы решаете, какие данные отдать | Своя интеграция: от 1 до 4 недель, через партнёра бывает меньше часа |
| Пиксель + Events API (рекомендуется) | Оба канала, потерь меньше | Дольше: нужна дедупликация |
Как создать пиксель TikTok
- Откройте TikTok Ads Manager и в меню Tools выберите Events: откроется Events Manager.
- Нажмите Connect data source (если источников ещё нет, кнопка называется Get Started).
- Выберите Web и укажите адрес сайта.
- Выберите Partner Integration (Shopify, Google Tag Manager и другие) или Manual Setup.
- При ручной настройке выберите вариант: TikTok Pixel, Events API или TikTok Pixel + Events API.
- Назовите пиксель, лучше по домену. Лимит 128 символов с пробелами.
- Мастер предложит установить базовый код, настроить параметры и события.
Шаги из статьи How to Set Up and Verify TikTok Web Data Connection и Setup guide for Web. ID пикселя (Pixel Code) потом ищите в Events Manager → Data sources: это строка вида CUSG5HBC77UD11VVRQEG.
Как установить пиксель на сайт
Вручную: базовый код в <head>
Базовый код копируйте из мастера в Events Manager. Шаблон есть и в документации Install Pixel using code, в нём замените ВАШ_PIXEL_ID на ID своего пикселя.
<script>
!function (w, d, t) {
w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);ttq.instance=function(t){for(var e=ttq._i[t]||[],n=0;n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e},ttq.load=function(e,n){var i="https://analytics.tiktok.com/i18n/pixel/events.js";ttq._i=ttq._i||{},ttq._i[e]=[],ttq._i[e]._u=i,ttq._t=ttq._t||{},ttq._t[e]=+new Date,ttq._o=ttq._o||{},ttq._o[e]=n||{};var o=document.createElement("script");o.type="text/javascript",o.async=!0,o.src=i+"?sdkid="+e+"&lib="+t;var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(o,a)};
ttq.load('ВАШ_PIXEL_ID');
ttq.page();
}(window, document, 'ttq');
</script>Код ставят как можно выше внутри <head> на всех страницах. Вызов ttq.page() сам отправляет просмотр страницы. Если пикселей несколько, вставляют несколько базовых кодов, а событие для одного пикселя отправляют через ttq.instance('ID').track('Purchase'): простой ttq.track() уйдёт во все.
Через Google Tag Manager
- Из Events Manager (TikTok его рекомендует): Data sources → пиксель → Settings → Partner Platform → Choose Partner → Google Tag Manager → Client-side tagging. Дальше вход в Google-аккаунт, выбор контейнера и рабочей области, способ настройки событий и Publish. Теги, триггеры и переменные TikTok создаст сам (инструкция).
- Вручную в GTM: Templates → Search Gallery → шаблон TikTok Pixel от TikTok → Add to workspace, затем тег Custom HTML с базовым кодом и триггером All Pages (инструкция). События добавляют отдельными тегами на шаблоне TikTok Pixel: в нём 14 событий на выбор.
В обоих случаях нужны права на контейнер: Publish, Approve, Edit и Read.
Через CMS и Тильду
Для Shopify, WooCommerce, Wix, WordPress, OpenCart и других платформ у TikTok есть готовые интеграции без правки кода: в списке партнёров 19 платформ для магазинов и сайтов. Тильды в нём нет, поэтому код вставляют в Настройки сайта → Еще → HTML-код для вставки внутрь Head и публикуют все страницы (справка Tilda). Цели Тильды уходят только в счётчики из раздела «Аналитика», так что события TikTok настраивают отдельно.
На лендинге в Keitaro
В документации Keitaro есть схема для локальных лендингов: ID пикселя приходит в параметре кампании {pixel}, сохраняется в cookie и подставляется в ttq.load() на странице благодарности. Один лендинг так работает с разными пикселями. Чем Keitaro отличается от других трекеров, разобрано в обзоре Keitaro, Binom и AIO.
Стандартные события и параметры
Оптимизировать кампанию можно только на стандартные события. Кастомные TikTok принимает для отчётов и аудиторий, но не для оптимизации (Supported events). Всего стандартных событий для сайта 18, названия чувствительны к регистру.
| Событие | Когда срабатывает по TikTok | Где пригодится в арбитраже |
|---|---|---|
ViewContent | Просмотр важной страницы | Открыт прелендинг или страница оффера |
InitiateCheckout | Начато оформление | Открыта форма заказа |
Lead | Отправлена форма | Заявка на оффер |
CompleteRegistration | Завершена регистрация | Регистрация в сервисе |
SubmitApplication, ApplicationApproval | Заявка подана, заявка одобрена | Финансовые офферы |
Purchase | Оплата завершена | Подтверждённая продажа, апрув |
С 1 мая 2025 года SubmitForm называется Lead, а CompletePayment называется Purchase. Старые имена работают и в отчётах показываются под новыми, а ClickButton и PlaceAnOrder поддерживаются до 2027 года (справка).
Главные параметры: value (число без знака валюты и запятых), currency (код ISO 4217, в списке TikTok есть USD, EUR, RUB, KZT, UAH), content_ids и content_type. Без value и currency не считается ROAS и не работает оптимизация по ценности.
Event Builder или код
Event Builder настраивает события без программиста: по клику на элемент (Button Click) или по посещению адреса с ключевым словом (URL Visits), например /thanks. Изменения вступают в силу в течение 30 минут. Custom Code генерирует код событий, который ставят после базового. Event Builder работает только с пикселем: если события идут ещё и через Events API, настраивайте их кодом, чтобы набор совпадал в обоих каналах (справка).

Пример для страницы благодарности: данные для Advanced Matching и событие заявки.
<script>
// Advanced Matching: сырые значения пиксель сам захеширует SHA-256
ttq.identify({
email: 'EMAIL_ИЗ_ФОРМЫ',
phone_number: '+79991234567' // формат E.164
});
// заявка: третий аргумент с event_id нужен для дедупликации с Events API
ttq.track('Lead', {}, { event_id: 'ID_ЗАЯВКИ' });
</script>Advanced Matching: email и телефон в SHA-256
Advanced Matching добавляет к событиям email, телефон и внешний ID. TikTok сопоставляет их со своими пользователями: в отчёт попадает больше конверсий, растут аудитории ретаргетинга (справка). TikTok советует включать оба режима.
- Automatic: переключатель в Events Manager → Data sources → пиксель → Settings. Пиксель сам находит поля форм, текст на странице и переменные вроде
window.dataLayerи хеширует найденное в браузере алгоритмом SHA-256. - Manual: вы передаёте данные через
ttq.identify()передttq.track(), как в примере выше. Сырые значения пиксель захеширует сам, можно передать и готовый SHA-256.
Правила из документации: email без пробелов по краям и в нижнем регистре, телефон в формате E.164 (+79991234567), только SHA-256. Если данных нет, передайте пустую строку, а не пробел или undefined. Для финансов и медицины TikTok советует ручной режим вместо автоматического. Оба режима работают лучше с включёнными собственными cookies (настройка cookies).
Events API: серверная отправка событий

Events API 2.0 принимает события сайта, приложения, офлайна и CRM через одну точку /event/track/. Старые методы Events API 1.0 (/pixel/track/, /pixel/batch/ и такие же для приложений и офлайна) TikTok выводил из работы во второй половине 2024 года (Events API for Web). Интеграцию по старым примерам стоит перевести на 2.0.
Токен: Events Manager → пиксель → Settings → Generate Access Token. Нужна роль Admin или Operator, токен работает только с пикселями того же рекламного аккаунта. Для нескольких аккаунтов делают свой developer app с правом «Measurement > Report Conversion Event» (Authentication).
Запрос: POST на https://business-api.tiktok.com/open_api/v1.3/event/track/ с заголовками Access-Token и Content-Type: application/json.
| Поле | Что передавать |
|---|---|
event_source, event_source_id | web и ID пикселя |
data | Массив событий, до 1000 в запросе. TikTok советует слать каждое событие сразу |
event, event_time | Название события и время в секундах Unix по UTC |
event_id | Обязателен, если то же событие уходит и пикселем |
user | ttclid, email, phone и external_id в SHA-256, ttp (cookie _ttp), ip, user_agent |
properties | value, currency, content_ids, content_type |
page.url | Адрес страницы события, поле обязательное |
test_event_code | Код с вкладки Test Events, только на время проверки |
curl -X POST 'https://business-api.tiktok.com/open_api/v1.3/event/track/' \
-H 'Access-Token: ВАШ_ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"event_source": "web",
"event_source_id": "ВАШ_PIXEL_ID",
"test_event_code": "КОД_ИЗ_TEST_EVENTS",
"data": [{
"event": "Purchase",
"event_time": 1790849112,
"event_id": "order_1001",
"user": {
"ttclid": "ЗНАЧЕНИЕ_TTCLID",
"email": "848a771458438fc2ec420560d769fb9b9b86851ee338ec56517baabd79d3bb4f",
"phone": "9f7ec22d72092cd3c0b58726ed9c2d91b92e51a3f29837508fb2948bb22dd2fd",
"ip": "203.0.113.7",
"user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X)"
},
"properties": { "value": 25.5, "currency": "USD" },
"page": { "url": "https://ВАШ_ДОМЕН/thanks" }
}]
}'Поля и хеши из Setup guide for Web. С рабочим токеном ответ "code": 0, на неверный токен приходит 40105 «Access token is incorrect or has been revoked», при нехватке прав на пиксель 40001 (FAQ).
ttclid: главный ключ для арбитражника
ttclid (TikTok Click ID) TikTok дописывает к ссылке объявления при клике: ?ttclid=E.C.P..... Он действует столько же, сколько окно атрибуции по клику, и бывает длиной до 1000 символов, обрезать его нельзя. Пиксель сохраняет ttclid в cookie с тем же именем, а API достаёт его из page.url, если параметр остался в адресе (Send TikTok Click ID). Без пикселя ttclid хранит трекер.
Агентствам с десятками аккаунтов TikTok предлагает Events API Gateway: один хост с отдельными «тенантами» под каждый рекламный аккаунт, ролями Host Admin и Tenant Admin и своими доменами. Байеру с парой аккаунтов хватит обычного Events API.
Дедупликация пикселя и Events API
Если одно событие уходит и пикселем, и через API, TikTok должен понять, что это одна конверсия. Когда каналы шлют разные события, например Lead пикселем и Purchase сервером, дедупликация не нужна (справка).
- Ключ: ID пикселя, название события и
event_id. Первое событие остаётся, повторы в течение 48 часов отбрасываются. - Дубль из первых 5 минут дополняет первое событие своими данными, например email.
- Без
event_idTikTok склеивает события по cookie_ttpиз поляuser.ttp: окно 5 минут, отбрасываются только серверные события.
Если всё работает, во вкладке Overview у события стоит Connection Method «Server & Browser». Если таких событий мало, значит, event_id в пикселе и API не совпадают (Event Deduplication).
Как передать конверсию из Keitaro в TikTok
Типичная связка: объявление ведёт на ссылку кампании Keitaro, заявка уходит в партнёрку, статус возвращается в трекер постбэком (как в интеграции M1.TOP с Keitaro). Дальше апрув нужно отдать в TikTok. Ссылки-постбэка, как у тизерных сетей, в справке TikTok для сайтов нет: события принимают пиксель, Events API и партнёрские интеграции.
Сначала ttclid должен попасть в трекер. Для этого в параметрах кампании есть external_id: ID клика, который используется для постбэка в сеть. Шаблон источника TikTok заполняет параметры сам, а при ручной настройке укажите в строке external_id параметр ttclid.
Способ 1: встроенная интеграция Keitaro
В редакциях Expert, Team и Enterprise есть интеграция с TikTok Ads: она тянет расходы и отправляет конверсии.
- Интеграции → TikTok → «Добавить аккаунт», вход в TikTok и доступ для приложения Keitaro.
- В форме указать Advertiser ID и кампании трекера, сами кампании создать по шаблону источника TikTok.
- В Обслуживание → Интеграции → TikTok нажать Mapping и выбрать статусы и события.
- Проверить отправку в логах S2S.
По FAQ Keitaro, конверсия уходит, только если у клика есть ttclid. Передаются event, timestamp, ttclid, value и код валюты, отправка идёт раз в час.
Способ 2: свой мост от S2S-постбэка к Events API
Если нужной редакции нет или конверсию хочется отдавать сразу, с IP и User-Agent для матчинга, поставьте PHP-скрипт. В S2S-постбэке Keitaro задаются только адрес, метод и статусы, а Events API ждёт JSON и токен в заголовке. Поэтому Keitaro шлёт постбэк на скрипт, а скрипт собирает запрос к TikTok.
<?php
// tt-bridge.php: принимает S2S-постбэк Keitaro и отправляет событие в TikTok Events API 2.0
const ACCESS_TOKEN = 'ВАШ_ACCESS_TOKEN'; // Events Manager: пиксель, вкладка Settings, Generate Access Token
const PIXEL_ID = 'ВАШ_PIXEL_ID'; // Pixel Code из раздела Data sources
const SECRET = 'ВАШ_СЕКРЕТ'; // любая длинная строка, та же стоит в ссылке постбэка
const LANDING_URL = 'https://ВАШ_ДОМЕН/'; // адрес лендинга: поле page.url обязательное
const TEST_CODE = ''; // код из вкладки Test Events; после проверки оставить пустым
if (!hash_equals(SECRET, (string)($_GET['key'] ?? ''))) {
http_response_code(403);
exit('forbidden');
}
$ttclid = (string)($_GET['ttclid'] ?? '');
$status = (string)($_GET['status'] ?? '');
if ($ttclid === '' || $ttclid[0] === '{') {
exit('skip: no ttclid'); // клик пришёл не из TikTok или макрос не подставился
}
$events = ['lead' => 'Lead', 'sale' => 'Purchase']; // статус Keitaro => событие TikTok
if (!isset($events[$status])) {
exit('skip: status ' . $status);
}
$item = [
'event' => $events[$status],
'event_time' => time(),
'event_id' => ($_GET['subid'] ?? '') . '_' . $status,
'user' => array_filter([
'ttclid' => $ttclid,
'ip' => (string)($_GET['ip'] ?? ''),
'user_agent' => (string)($_GET['ua'] ?? ''),
]),
'page' => ['url' => LANDING_URL],
];
$revenue = $_GET['revenue'] ?? '';
if ($status === 'sale' && is_numeric($revenue)) {
$item['properties'] = ['value' => round((float)$revenue, 2), 'currency' => 'USD'];
}
$body = ['event_source' => 'web', 'event_source_id' => PIXEL_ID, 'data' => [$item]];
if (TEST_CODE !== '') {
$body['test_event_code'] = TEST_CODE;
}
$ch = curl_init('https://business-api.tiktok.com/open_api/v1.3/event/track/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Access-Token: ' . ACCESS_TOKEN, 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($body),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response === false ? 'curl error' : $response; // ответ TikTok виден в логе S2S-постбэков KeitaroВ кампании Keitaro: вкладка S2S Postbacks → Добавить, метод GET, статусы lead и sale, адрес:
https://ВАШ_ДОМЕН/tt-bridge.php?key=ВАШ_СЕКРЕТ&ttclid={external_id}&status={status}&subid={subid}&revenue={conversion_revenue:usd}&ip={ip}&ua={user_agent}Макросы описаны в документации Keitaro, значения экранируются автоматически. Для проверки впишите в TEST_CODE код с вкладки Test Events, отправьте тестовый постбэк, найдите событие и очистите TEST_CODE. Ответ TikTok виден в Обслуживание → Логи → S2S postbacks. Скрипт проверен на PHP 8.2: без ключа отвечает 403, клик без ttclid и статус rejected пропускает, на тестовый токен TikTok вернул 40105, то есть адрес и формат запроса верные.
Чтобы не задвоить конверсии, разделите события: пиксель на странице благодарности шлёт Lead, а скрипт отдаёт только sale как Purchase. Если Lead идёт и с сервера, нужен общий event_id: в коде лендинга Keitaro пишите {subid}_lead, скрипт соберёт такой же (макрос {subid} работает в лендингах). Та же логика для Meta разобрана в статье Keitaro и Facebook Conversions API.
Как проверить пиксель
Pixel Helper. Расширение TikTok Pixel Helper для Chrome показывает, сработали ли пиксель и события. Частые ошибки из таблицы TikTok: код не в <head>, неверный Pixel ID, выключены собственные cookies, email не в нижнем регистре, телефон не в E.164, в value символ валюты или запятая, value без currency.
Test Events. Вкладка в карточке пикселя. Сайт открывается в тестовом окружении прямо в браузере (в старой справке через QR-код в приложении TikTok), события видны в Event Activity. Для сервера в запрос добавляют test_event_code, а Payload Helper там же проверяет структуру (Verify Events API setup).
Overview и Diagnostics (справка):
- Event Status: Active, если событие приходило за 7 дней, иначе No recent activity;
- Connection Method: browser only, server only или server & browser;
- EMQ Score: взвешенная оценка того, насколько полно переданы ключи сопоставления;
- Last Received: последний час, когда пришло событие, данные идут с задержкой;
- Diagnostics: карточки проблем с важностью, затронутыми объявлениями и инструкцией по исправлению.
Почему TikTok и Keitaro показывают разные цифры
Keitaro считает конверсии по кликам, прошедшим через трекер. TikTok атрибутирует их по окнам из настроек группы объявлений: после клика 1, 7, 14 или 28 дней, после просмотра без клика: выключено, 1 или 7 дней (справка). Просмотровых конверсий обычно больше кликовых: просмотр всегда случается раньше клика.
Разобрать расхождение помогает Attribution Analytics в Ads Manager: сравнение окон, время до конверсии, цепочки касаний, вспомогательные конверсии и сверка с Google Analytics. По внутреннему анализу TikTok за сентябрь 2025 года, больше одной из четырёх атрибутированных конверсий случается так: человек видит рекламу и в тот же день сам заходит на сайт. Деньги при этом считайте по апрувам в трекере, формулы есть в статье про ROI, CR и EPC.
Частые вопросы
Как активировать пиксель тик ток?
Вызвать на сайте настоящее событие: реальную покупку или отправку формы. Для покупки TikTok советует купон на 100% или тестовую карту, вкладка Test Events для активации не подходит. Данные появляются в течение 24 часов, иногда дольше, после этого событие можно выбрать в группе объявлений (справка).
Где найти ID пикселя TikTok?
В Ads Manager: Tools → Events → Data sources, ID указан у пикселя в списке. Он же стоит в базовом коде внутри ttq.load('...').
Нужен ли Events API, если пиксель уже стоит?
TikTok рекомендует оба канала: пиксель теряет часть событий в браузере. В арбитраже сервер нужен ещё и для апрувов: их видит только трекер.
Можно ли оптимизировать кампанию на своё событие?
Нет. Кастомные события годятся для отчётов и аудиторий, оптимизация работает только на стандартных. Апрув передавайте стандартным событием, например Purchase.
Почему события не видны в Events Manager?
Проверьте сайт в Pixel Helper: чаще всего код стоит не в <head> или указан чужой ID. Данные приходят с задержкой до 24 часов, время последнего события показано в Last Received.



