Adset.ProAdset.ProKnowledge base
Home/Обучающие материалы/Воронка PWA: от клика до депозита

Воронка 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:

Тип

Описание

internal

PWA создан в конструкторе Adset.Pro (Step-by-Step builder)

external

PWA на внешнем сервисе (подключается через URL)

ios-app

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:

Базовые метрики

Метрика

Формула

Группа

Что показывает

clicks

Уникальные SOURCE_CLICK

Traffic

Охват: сколько людей кликнули

pwa_views

countIf(PWA_VIEW)

PWA

Сколько дошло до страницы установки

pwa_installs

countIf(PWA_INSTALL)

PWA

Сколько установило PWA

pwa_opens

countIf(PWA_OPEN)

PWA

Повторные открытия установленного PWA

ios_installs

countIf(IOS_INSTALL)

PWA

Установки на iOS

Конверсионные метрики

Метрика

Формула

Что показывает

click_to_instal_rate

pwa_installs / clicks

Основная метрика эффективности воронки

pwa_view_to_instal_rate

pwa_installs / pwa_views

Конверсия страницы PWA в установку

registrations (cpa_hold)

countIf(CPA_HOLD)

Регистраций через PWA

cpa_accept (ftds)

countIf(CPA_ACCEPT)

FTD (первых депозитов)

pwa_install_to_hold_rate

cpa_hold / pwa_installs

Install → Registration

pwa_install_to_accept_rate

cpa_accept / pwa_installs

Install → FTD

click_to_reg

cpa_hold / clicks

Click → Registration

click_to_dep

cpa_accept / clicks

Click → FTD

Postlanding метрики

Метрика

Формула

Что показывает

postlanding_views

countIf(POSTLANDING_VIEW)

Просмотры postlanding-страницы

postlanding_clicks

countIf(POSTLANDING_CLICK)

Клики на postlanding

postlanding_ctr

postlanding_clicks / postlanding_views

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 / clicks ratio

  • Смотри 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 by user_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% для gambling

  • Group 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

Что анализируешь

user_country

Какое GEO лучше конвертируется

user_device

Android vs Desktop vs iOS

user_os

Android vs iOS (принципиально разный install_rate)

user_browser

Chrome vs Samsung Browser vs Safari

cmp_pwa

Сравнить два дизайна PWA

cmp_campaign

Сравнить две кампании

cmp_offer

Сравнить два оффера

cmp_flow

Сравнить потоки внутри кампании

Кейс: A/B тест двух PWA

Задача: Запущена одна кампания с двумя PWA через Flow 50/50.

Как смотреть:

  1. Статистика → период last 7 days

  2. Метрика: pwa_view_to_instal_rate

  3. Group by: cmp_pwa

  4. Дополнительно: 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

Нативный beforeinstallprompt

Похожий нативный промпт

Нет нативного — инструкции через UI

PWA Install

Лучшая конверсия

Хорошо работает на Galaxy

Значительно ниже install_rate

Standalone Mode

Работает

Работает

navigator.standalone

Push

FCM

FCM

FCM (с ограничениями)

Событие

PWA_INSTALL

PWA_INSTALL

IOS_INSTALL (Redis-дедуп)

WebView kick

intent:// → Chrome

intent:// → default browser

x-safari-https:// → Safari

iOS App в Adset.Pro:

  • Отдельный тип PWA (ios-app) — специальная обработка для iOS

  • Использует IOS_INSTALL вместо PWA_INSTALL для учёта установок

  • Redis-дедупликация через acquireInstallGate(clickId) — гарантирует один install-ивент на clickId

  • Поддержка ios26 query-параметра для специфики iOS 26

Практический совет: Разделяй трафик iOS и Android в разные кампании или разные Stream Sets. Причины:

  • Разный install_rate (Android 30-40%, iOS 5-15%)

  • Разная воронка (нативный промпт vs инструкции)

  • Разные PWA-дизайны оптимальны для каждой платформы


Пуш-подписка в воронке PWA

После установки PWA пользователь попадает на страницу подписки (subscribe-template), где показывается запрос на пуш-уведомления:

Событие

Что происходит

NOTIFICATION_REQUEST

Браузер показал нативный запрос на пуши

NOTIFICATION_SUBSCRIBE

Пользователь согласился → FCM-токен сохраняется в Subscription

NOTIFICATION_DECLINE

Пользователь отказался

NOTIFICATION_UNSUBSCRIBE

Отписался позже (через настройки браузера)

Поведение после подписки:

  • Если 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

Какое PWA использовать (internal / external / ios-app)

landing

Прелендинг перед PWA (опционально)

landingAsPwa

Использовать лендинг как PWA (без отдельной PWA-страницы)

postlanding

Страница между подпиской на пуши и редиректом на оффер

Варианты воронки:

  1. Полная: Landing → PWA → Subscribe → Postlanding → Offer

  2. Без прелендинга: PWA → Subscribe → Offer (короткая воронка)

  3. Landing as PWA: Landing (в режиме PWA) → Subscribe → Offer

  4. Без PWA: Landing → Offer (если pwa = null)


Частые вопросы

Q: Почему pwa_installs в статистике Adset.Pro больше, чем FTD в кабинете партнёрки?

Это нормально. Установка PWA ≠ депозит. Между ними ещё несколько шагов:

  • PWA установлено → нужно перейти на оффер

  • Оффер открылся → нужно зарегистрироваться

  • Зарегистрировался → нужно задепозить

Типичная конверсия install → FTD: 10-30% (зависит от GEO, оффера, качества PWA).

Q: Пользователь установил PWA, но депозит атрибутировался не к нашему клику — почему?

Возможные причины:

  1. click_id не передался — paramTemplate настроен неправильно, или пользователь перешёл на оффер по другой ссылке

  2. Sticky Flow выключен — при повторном входе через PWA_OPEN генерируется новый click_id, если stickyFlowKeepClickId = false

  3. Окно атрибуции истекло — пользователь задепозил через неделю, а cookie с click_id очистился

  4. Пользователь открыл оффер напрямую — зашёл на сайт партнёрки через браузер, минуя PWA

Q: Как проверить что paramTemplate правильно передаёт click_id?

  1. Создай тестовый клик по трекинговой ссылке

  2. Проверь URL, на который тебя редиректит (URL оффера)

  3. Убедись, что параметр с click_id присутствует и содержит UUID

  4. Пример: если paramTemplate = ?sub1={event.event_click_id}, то URL оффера должен быть https://partner.com/offer?sub1=35d542f6-56ec-...

  5. Если 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 в конструкторе. Подходит для быстрого тестирования.