1) Как это должно работать по цепочке
- Keitaro принимает клик и генерит свой click id = subid.
- Пользователь уходит на Adjust link (https://app.adjust.com/...).
- В этот Adjust link мы докидываем label=<keitaro_subid> — чтобы Adjust «запомнил», какой именно клик у нас был.
- Когда Adjust фиксирует install или in-app event, он шлёт server callback на URL Keitaro:
https://ваш-домен/<postback_key>/postback?subid=...&status=... - Keitaro по subid находит клик и записывает конверсию.
В Keitaro 11 для записи конверсии обязательны два параметра: subid и status.
2) Что важно именно в Keitaro 11 (чтобы не “не работает”)
2.1. Keitaro 11 теперь игнорирует постбэки без status
Если в запросе нет status=..., Keitaro автоматически игнорирует конверсию и пишет в лог.
То же самое — если пришёл неизвестный status, и вы не настроили маппинг/тренировку.
2.2. Набор “дефолтных” статусов/типов конверсий в Keitaro 11
Keitaro 11 “из коробки” понимает и отображает:
lead, sale, rejected, registration, deposit, trash + custom conversion types.
То есть тезис “в Keitaro только lead/sale/rejected/rebill” для Keitaro 11 уже неактуален (rebill как отдельный тип убрали).
2.3. Если хотите несколько покупок/депозитов — нужен tid
В Keitaro 11: если два постбэка приходят с одинаковым status подряд, предыдущая конверсия может быть перезаписана. Чтобы записывать отдельные конверсии — передавайте уникальный tid.
3) Как правильно передать click id из Keitaro в Adjust
3.1. Используем label (стандартный параметр Adjust)
В официальной документации Adjust — это ровно то, что нужно:
- вы задаёте label в ссылке,
- а потом в коллбэках используете плейсхолдер {label}.
⚠️ В Adjust нет «официального» синтаксиса вида label[1][2] для этой задачи — используется один label и плейсхолдер {label}.
3.2. Пример Adjust ссылки, которую ставим в оффер Keitaro
В Keitaro (Offer URL / Redirect) ставим:
https://app.adjust.com/TRACKER_TOKEN?label={subid}
Но в Keitaro 11 subid в новом формате содержит точки. Keitaro сам рекомендует при необходимости передавать subid с _ вместо . через плейсхолдер {subid:_}.
Поэтому на практике часто лучше так:
https://app.adjust.com/TRACKER_TOKEN?label={subid:_}
4) Как сделать S2S callback из Adjust в Keitaro без слива всего трафика рекламодателя
4.1. Почему нельзя “просто вставить в Global callbacks”
Потому что Global callbacks в Adjust — это коллбэк, который может “покрывать каждый datapoint, который измеряет Adjust”.
Если рекламодатель вставит туда ваш Keitaro URL без фильтров — вы реально получите тонны мусора (органика/другие источники), а рекламодатель — утечку.
4.2. Правильный вариант №1 (рекомендуемый): прикрепить callbacks к конкретной ссылке
Adjust позволяет динамически прикреплять callback URLs прямо к link URL — и тогда коллбэк срабатывает, когда пользователь, атрибутированный к этой ссылке, совершает нужное действие.
Практически это делают через Adjust Encoding Tool (он генерит корректно закодированную ссылку).
Важно: если у тебя нет доступа к Adjust — это делает владелец приложения, потому что “только клиенты Adjust могут создавать ссылки в Adjust dashboard”.
4.3. Правильный вариант №2 (если почему-то упёрлись в глобальные): Conditional callbacks
Adjust поддерживает условные коллбэки:
структура:
method, prefix, {placeholder}, value, callback URL[, body]
Тогда рекламодатель может оставить коллбэк “в общем месте”, но добавить условие, например только для конкретного tracker token ({tracker}) — и вы не получите органику/другие сети.
5) Конкретные URL’ы для Keitaro 11
5.1. Базовый endpoint Keitaro
Keitaro postback URL содержит домен + Postback key (это security/auth) и параметры.
Выглядит так (пример):
https://YOUR-KEITARO-DOMAIN/POSTBACK_KEY/postback
5.2. Install ➜ Keitaro (как “регистрация/инсталл”)
Самый простой и логичный вариант под Keitaro 11:
https://YOUR-KEITARO-DOMAIN/POSTBACK_KEY/postback?subid={label}&status=registration
Почему registration? Потому что это валидный тип/статус в Keitaro 11.
(Если хочешь, можешь слать lead, но registration обычно удобнее для мобайла.)
5.3. Purchase / revenue event ➜ Keitaro (как sale)
Keitaro принимает сумму в payout (или revenue) и валюту в currency.
В Adjust для revenue в callbacks есть плейсхолдеры дохода; пример в документации партнёров показывает revenue={revenue_usd}.
Пример для события покупки:
https://YOUR-KEITARO-DOMAIN/POSTBACK_KEY/postback?subid={label}&status=sale&payout={revenue_usd}¤cy=USD&tid={event}_{created_at}
- {event} — event token (можно использовать для “разведения” разных событий)
- {created_at} — timestamp события
- tid=... — чтобы Keitaro записывал каждую покупку отдельно, а не перезаписывал предыдущую.
Да, это уже не “tid={created_at}”, это значительно менее коллизионно, но идеал — см. следующий пункт.
5.4. “Правильный” tid по-взрослому (без коллизий и без дублей от retry)
Лучшее решение — чтобы приложение передавало transaction_id / order_id как event callback parameter (или partner parameter) в Adjust: Adjust прямо пишет, что для события покупки может понадобиться callback-параметр вроде transaction_id.
Дальше два варианта:
- Вариант A: рекламодатель добавляет transaction_id как callback parameter → Adjust добавит &transaction_id=... в запрос →
в Keitaro ты в Settings → Postback URL → Parameters настраиваешь alias, чтобы transaction_id воспринимался как tid (Keitaro поддерживает алиасы параметров). - Вариант B: если это partner parameters → они придут JSON’ом, это менее удобно, обычно выбирают вариант A.
6) Как это реально настроить в Adjust (что просить у рекламодателя)
6.1. Минимум, что должен сделать рекламодатель в Adjust
- Создать/выдать тебе Adjust link (tracker token).
- В этот link добавить label={subid} (ты это делаешь на стороне Keitaro, если link отдаётся “как есть”).
- Прикрепить callbacks к link (лучше через Encoding tool).
- Для events — настроить callbacks по каждому event token отдельно.
7) Готовый текст рекламодателю (под Keitaro 11)
Можно отправлять почти дословно:
Привет! Для S2S интеграции Adjust ➜ Keitaro 11 нужно:
- Мы передаём click id в Adjust через параметр label в трекинг-ссылке: ... ?label={subid} (значение на клике).
- Просьба настроить callbacks на уровне нашей ссылки (не глобально), чтобы коллбэки уходили только по атрибуции на наш tracker token (иначе Global callbacks покрывают все datapoints).
- Install callback:
https://YOUR-KEITARO-DOMAIN/POSTBACK_KEY/postback?subid={label}&status=registration - Event callback(и) по нужным event token (пример purchase):
https://YOUR-KEITARO-DOMAIN/POSTBACK_KEY/postback?subid={label}&status=sale&payout={revenue_usd}¤cy=USD&tid={event}_{created_at} - Если возможно, добавьте transaction_id как callback parameter к purchase-событиям — мы используем его как tid для корректного учёта повторных покупок/ретраев.
8) Быстрый чек-лист “почему не летит”
- В коллбэке есть status? Без него Keitaro 11 игнорит конверсию.
- status — один из известных (lead/sale/rejected/registration/deposit/trash) или вы создали custom type / сделали training?
- subid реально приходит в Keitaro как {label}? (Если label пустой — значит click не ваш или label не передаётся.)
- Для повторных покупок/депозитов есть уникальный tid?
- Не воткнули ли ваш URL в global callbacks без фильтра?