Перейти к содержанию

Пиксель ТикТок: как создать, установить и настроить Events API

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

Пиксель ТикТок: как создать, установить и настроить Events API

Пиксель 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, пиксель измеряет трафик сайта и результаты кампаний и помогает их оптимизировать. Вместе с событием он передаёт данные о рекламе, время, IP-адрес, User-Agent, cookies, метаданные страницы и клики по кнопкам. Для цели Web Conversions пиксель или Events API обязательны.

Пиксель работает в браузере, поэтому часть событий теряется из-за блокировщиков и обрывов связи. Events API отправляет события с вашего сервера, и TikTok советует подключать оба канала сразу (сравнение способов).

СпособКак работаетСрок внедрения по оценке TikTok
ПиксельСобытия из браузераВручную: несколько минут
Events APIСобытия с сервера, вы решаете, какие данные отдатьСвоя интеграция: от 1 до 4 недель, через партнёра бывает меньше часа
Пиксель + Events API (рекомендуется)Оба канала, потерь меньшеДольше: нужна дедупликация
Таблица прокручивается вбок

Как создать пиксель TikTok

  1. Откройте TikTok Ads Manager и в меню Tools выберите Events: откроется Events Manager.
  2. Нажмите Connect data source (если источников ещё нет, кнопка называется Get Started).
  3. Выберите Web и укажите адрес сайта.
  4. Выберите Partner Integration (Shopify, Google Tag Manager и другие) или Manual Setup.
  5. При ручной настройке выберите вариант: TikTok Pixel, Events API или TikTok Pixel + Events API.
  6. Назовите пиксель, лучше по домену. Лимит 128 символов с пробелами.
  7. Мастер предложит установить базовый код, настроить параметры и события.

Шаги из статьи 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, настраивайте их кодом, чтобы набор совпадал в обоих каналах (справка).

Event Builder и Custom Code в TikTok Ads
Иллюстрация из справки TikTok Ads по настройке событий через Event Builder и Custom Code.

Пример для страницы благодарности: данные для 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: серверная отправка событий

Consolidated endpoint в TikTok Events API
Иллюстрация из материала TikTok For Business о consolidated endpoint для 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_idweb и ID пикселя
dataМассив событий, до 1000 в запросе. TikTok советует слать каждое событие сразу
event, event_timeНазвание события и время в секундах Unix по UTC
event_idОбязателен, если то же событие уходит и пикселем
userttclid, email, phone и external_id в SHA-256, ttp (cookie _ttp), ip, user_agent
propertiesvalue, 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_id TikTok склеивает события по 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: она тянет расходы и отправляет конверсии.

  1. Интеграции → TikTok → «Добавить аккаунт», вход в TikTok и доступ для приложения Keitaro.
  2. В форме указать Advertiser ID и кампании трекера, сами кампании создать по шаблону источника TikTok.
  3. В Обслуживание → Интеграции → TikTok нажать Mapping и выбрать статусы и события.
  4. Проверить отправку в логах 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.

Редакция BoostClicks

Пишем только то, что сами гоняли на проливах. Разборы источников, клоаки и трекинга без воды и универсальных схем.

Информационные партнёры

С кем мы работаем

Обмениваемся материалами и тестами с площадками и сервисами, которыми пользуемся сами.

Прайс на рекламу →