Воронка PWA: от клика до депозита
Что такое PWA и как оно работает
PWA (Progressive Web App) — веб-приложение, которое устанавливается на главный экран телефона и работает как нативное приложение: иконка, полноэкранный режим, push-уведомления.
Почему арбитражники используют PWA вместо нативных приложений:
Обход модерации: рекламные сети (FB, TikTok) проверяют содержимое по URL. PWA устанавливается с нейтрального домена, а money-оффер открывается уже в установленном приложении
Быстрый запуск: не нужен Google Play / App Store, не нужна подпись разработчика. Конструктор PWA в Adset.Pro — создал за минуты
Push-уведомления: после установки запрашивается разрешение на пуши — бесплатная база для ретаргетинга
Не требуется скачивание APK: установка через браузер (Add to Home Screen) — быстрее и безопаснее с точки зрения пользователя
Типы PWA в Adset.Pro:
Тип | Описание |
|---|---|
| PWA создан в конструкторе Adset.Pro (Step-by-Step builder) |
| PWA на внешнем сервисе (подключается через URL) |
| iOS App — отдельная воронка для iOS устройств |
Полная воронка PWA
Каждый шаг воронки фиксируется как отдельное событие в трекере:
[Рекламное объявление FB/TikTok/Push]
↓
SOURCE_CLICK ← трекер генерирует event_click_id (UUID), определяет GEO/device/IP
↓
SOURCE_FILTER ← [если не прошёл фильтры] клик заблокирован → White Page
↓
[In-App WebView?] ← FB/Instagram/TikTok/Telegram?
↓ YES ↓ NO
Bridge Page Лендинг / PWA
(кик в Chrome/Safari)
↓
LAND_VIEW ← пользователь открыл прелендинг
↓
LAND_CLICK ← кликнул кнопку "Установить" / "Далее"
↓
PWA_VIEW ← открыл страницу PWA (видит install prompt)
↓
PWA_INSTALL ← принял install prompt, PWA установлено на главный экран
↓
[Страница подписки] ← запрос пуш-уведомлений
↓
NOTIFICATION_REQUEST ← показан нативный запрос на пуши
NOTIFICATION_SUBSCRIBE ← пользователь согласился (или DECLINE — отказался)
↓
[Redirect на оффер] ← click_id передаётся партнёрке через paramTemplate
↓
CPA_HOLD ← регистрация на сайте партнёрки (постбэк)
↓
CPA_ACCEPT ← первый депозит / FTD (постбэк)
↓
CPA_REDEP ← повторный депозит (постбэк)
Дополнительные события:
PWA_OPEN— повторное открытие уже установленного PWA (через дни/недели)IOS_INSTALL— установка на iOS (Redis-дедупликация, один раз на clickId)POSTLANDING_VIEW/POSTLANDING_CLICK— страница между PWA-подпиской и редиректом на оффер
Ключевые метрики воронки
Все метрики доступны в статистике Adset.Pro:
Базовые метрики
Метрика | Формула | Группа | Что показывает |
|---|---|---|---|
| Уникальные | Traffic | Охват: сколько людей кликнули |
|
| PWA | Сколько дошло до страницы установки |
|
| PWA | Сколько установило PWA |
|
| PWA | Повторные открытия установленного PWA |
|
| PWA | Установки на iOS |
Конверсионные метрики
Метрика | Формула | Что показывает |
|---|---|---|
|
| Основная метрика эффективности воронки |
|
| Конверсия страницы PWA в установку |
|
| Регистраций через PWA |
|
| FTD (первых депозитов) |
|
| Install → Registration |
|
| Install → FTD |
|
| Click → Registration |
|
| Click → FTD |
Postlanding метрики
Метрика | Формула | Что показывает |
|---|---|---|
|
| Просмотры postlanding-страницы |
|
| Клики на postlanding |
|
| CTR postlanding |
Где теряются пользователи: анализ воронки
Каждая ступень воронки — потенциальная точка потерь. Разбираем по порядку:
Клик → PWA_VIEW (потеря на прелендинге/переходе)
Типичные причины потерь:
Медленная загрузка — мобильный трафик, плохой интернет в Tier-3 GEO. PWA-шаблон тяжёлый (JS, картинки)
In-App WebView — FB/Instagram/TikTok открывают ссылку во встроенном WebView. Adset.Pro отдаёт Bridge Page для кика во внешний браузер, но часть пользователей теряется
Cloak-фильтры — если бот-фильтрация или фильтры Stream Set сработали, пользователь уходит на White Page вместо PWA
Как диагностировать:
Сравни
LAND_VIEW / clicksratioСмотри
SOURCE_FILTER— сколько кликов заблокированоGroup by
user_device/user_browser— где потери больше
PWA_VIEW → PWA_INSTALL (конверсия страницы PWA)
Факторы, влияющие на install_rate:
Дизайн PWA: иконка (выглядит ли как настоящее приложение?), название, цветовая схема
Install prompt: На Android (Chrome) — нативный баннер «Add to Home Screen». На iOS (Safari) — нет нативного промпта, нужны инструкции через UI
Браузер: Chrome > Samsung Browser > Safari (по install_rate)
iOS специфика:
Нет
beforeinstallpromptсобытия — PWA используетPwaManagerс fallback-инструкциямиУстановка фиксируется через
IOS_INSTALLс Redis-дедупликацией (один раз на clickId)Install rate на iOS значительно ниже — обычно в 3-5 раз ниже Android
Как диагностировать:
pwa_view_to_instal_rateс group byuser_device/user_os/user_browserСравни Android vs iOS — разница должна быть ожидаемой (если нет — проблема в iOS-воронке)
PWA_INSTALL → CPA_HOLD (install → registration)
Типичные причины потерь:
Качество оффера: лендинг партнёрки не мотивирует зарегистрироваться
Бонусное предложение: нерелевантная валюта для GEO, устаревший бонус
Скорость редиректа: после установки PWA → редирект на оффер. Если медленный — пользователь уходит
Страница подписки: после PWA_INSTALL показывается страница запроса пуш-уведомлений (
subscribe-template). Если пользователь закрывает на этом этапе — он не доходит до оффера
Как диагностировать:
pwa_install_to_hold_rate— типичное значение 20-50% для gamblingGroup by
cmp_offer/cmp_cpa— какой оффер конвертирует лучше
CPA_HOLD → CPA_ACCEPT (registration → deposit)
Типичный % для gambling/betting:
Tier-1 GEO (DE, UK, CA): 30-50% регистраций → депозит
Tier-2 GEO (UA, KZ, PL): 20-40%
Tier-3 GEO (NG, IN, BD): 10-25%
Что влияет:
Маппинг статусов: если
holdне настроен в CPA-сети — конверсия «пропадает»Платёжные методы: доступность локальных способов оплаты для пользователя
Онбординг партнёрки: верификация, KYC, минимальный депозит
Метрика: cpa_accept / cpa_hold или click_to_dep / click_to_reg
Анализ по группировкам
Воронку можно разбить по любому срезу:
Group Key | Что анализируешь |
|---|---|
| Какое GEO лучше конвертируется |
| Android vs Desktop vs iOS |
| Android vs iOS (принципиально разный install_rate) |
| Chrome vs Samsung Browser vs Safari |
| Сравнить два дизайна PWA |
| Сравнить две кампании |
| Сравнить два оффера |
| Сравнить потоки внутри кампании |
Кейс: A/B тест двух PWA
Задача: Запущена одна кампания с двумя PWA через Flow 50/50.
Как смотреть:
Статистика → период last 7 days
Метрика:
pwa_view_to_instal_rateGroup by:
cmp_pwaДополнительно:
click_to_instal_rate,pwa_install_to_accept_rate
Интерпретация: Если PWA-1 показывает install_rate 35%, а PWA-2 — 25%, при сопоставимом CPA → масштабируй PWA-1.
iOS vs Android: важные отличия
Параметр | Android + Chrome | Android + Samsung | iOS + Safari |
|---|---|---|---|
Install Prompt | Нативный | Похожий нативный промпт | Нет нативного — инструкции через UI |
PWA Install | Лучшая конверсия | Хорошо работает на Galaxy | Значительно ниже install_rate |
Standalone Mode | Работает | Работает |
|
Push | FCM | FCM | FCM (с ограничениями) |
Событие |
|
|
|
WebView kick |
|
|
|
iOS App в Adset.Pro:
Отдельный тип PWA (
ios-app) — специальная обработка для iOSИспользует
IOS_INSTALLвместоPWA_INSTALLдля учёта установокRedis-дедупликация через
acquireInstallGate(clickId)— гарантирует один install-ивент на clickIdПоддержка
ios26query-параметра для специфики iOS 26
Практический совет: Разделяй трафик iOS и Android в разные кампании или разные Stream Sets. Причины:
Разный install_rate (Android 30-40%, iOS 5-15%)
Разная воронка (нативный промпт vs инструкции)
Разные PWA-дизайны оптимальны для каждой платформы
Пуш-подписка в воронке PWA
После установки PWA пользователь попадает на страницу подписки (subscribe-template), где показывается запрос на пуш-уведомления:
Событие | Что происходит |
|---|---|
| Браузер показал нативный запрос на пуши |
| Пользователь согласился → FCM-токен сохраняется в Subscription |
| Пользователь отказался |
| Отписался позже (через настройки браузера) |
Поведение после подписки:
Если
SUBSCRIBE→ редирект на оффер + запись в Subscription (clickId, country, campaign, pwa, fcmToken)Если
DECLINE→ всё равно редирект на оффер (но без пуш-подписки)Если PWA уже в standalone mode + уже подписан → сразу открывает оффер через Chrome Custom Tab
Бизнес-ценность пуш-базы:
Обычно 40-70% установивших PWA подписываются на пуши
Подписчики — это ретаргетинговая аудитория: бесплатные повторные касания через push-кампании
Связь с LTV: пользователи, получающие пуши, делают больше редепозитов (триггерные пуши после REGISTRATION и DEPOSIT)
Push-база «стареет» (~10-20% FAIL в месяц) — нужно постоянно пополнять новыми подписчиками
Standalone mode (установленное PWA):
Если пользователь открыл PWA с домашнего экрана (standalone) и уже подписан на пуши — страница подписки пропускается
Переход на оффер через Chrome Custom Tab (CCT) — URL открывается в Chrome поверх PWA, не теряется контекст
Cookie
push_statusиспользуется для определения статуса подписки при повторных визитах
Конфигурация воронки в кампании
На уровне Flow в Stream Set настраивается:
Параметр | Описание |
|---|---|
| Какое PWA использовать (internal / external / ios-app) |
| Прелендинг перед PWA (опционально) |
| Использовать лендинг как PWA (без отдельной PWA-страницы) |
| Страница между подпиской на пуши и редиректом на оффер |
Варианты воронки:
Полная: Landing → PWA → Subscribe → Postlanding → Offer
Без прелендинга: PWA → Subscribe → Offer (короткая воронка)
Landing as PWA: Landing (в режиме PWA) → Subscribe → Offer
Без PWA: Landing → Offer (если
pwa = null)
Частые вопросы
Q: Почему pwa_installs в статистике Adset.Pro больше, чем FTD в кабинете партнёрки?
Это нормально. Установка PWA ≠ депозит. Между ними ещё несколько шагов:
PWA установлено → нужно перейти на оффер
Оффер открылся → нужно зарегистрироваться
Зарегистрировался → нужно задепозить
Типичная конверсия install → FTD: 10-30% (зависит от GEO, оффера, качества PWA).
Q: Пользователь установил PWA, но депозит атрибутировался не к нашему клику — почему?
Возможные причины:
click_id не передался — paramTemplate настроен неправильно, или пользователь перешёл на оффер по другой ссылке
Sticky Flow выключен — при повторном входе через PWA_OPEN генерируется новый click_id, если
stickyFlowKeepClickId = falseОкно атрибуции истекло — пользователь задепозил через неделю, а cookie с click_id очистился
Пользователь открыл оффер напрямую — зашёл на сайт партнёрки через браузер, минуя PWA
Q: Как проверить что paramTemplate правильно передаёт click_id?
Создай тестовый клик по трекинговой ссылке
Проверь URL, на который тебя редиректит (URL оффера)
Убедись, что параметр с click_id присутствует и содержит UUID
Пример: если paramTemplate =
?sub1={event.event_click_id}, то URL оффера должен бытьhttps://partner.com/offer?sub1=35d542f6-56ec-...Если click_id отсутствует — проверь что CPA-шаблон и paramTemplate настроены правильно
Q: В чём разница между PWA_INSTALL и IOS_INSTALL?
PWA_INSTALL— стандартное событие установки черезbeforeinstallprompt(Android: Chrome, Samsung Browser)IOS_INSTALL— специальное событие для iOS, где нет нативного install prompt. Фиксируется через Redis-дедупликацию (гарантирует один ивент на clickId). Используется когдаuser_os = iOSили передан?ios=1
Q: Что такое landingAsPwa и когда использовать?
Если landingAsPwa = true, лендинг работает в режиме PWA — пользователь видит лендинг, ему предлагается установить на Home Screen, а после установки происходит редирект на оффер. Это упрощённая воронка без создания отдельного PWA в конструкторе. Подходит для быстрого тестирования.
