787 reached the screen.
All post-test production users. Trial rows are % of the unified paywall cohort; Stayed means no matching auto-renew-off webhook yet.
Blended = unique standard 3-day and rescue 7-day trial users. No A/B arm allocation remains in this cohort.
The popup appears after an interrupted 3-day Apple checkout. This is the live rescue path after the test.
The unified funnel tracks the downstream 7-day rescue trial. Popup shown and Try for free require their own live instrumentation in this post-test cohort.
5,773 reached the screen.
Fixed Paywall V1 and Popup V1 before randomization. Descriptive context only, not combined with or statistically compared to V1 vs V1.1.
Popup V1 shown: 40 · client events are linked to the same Hook within two hours; popup follows Buy within 90 seconds. Server trials are linked observations, not causal attribution.
experiment exposed: V1 2950 and V1.1 2880. 5792 have both assignment and tagged Hook; 38 have assignment without Hook and 32 have Hook without assignment. These are telemetry timing gaps, not a third paywall arm.Trial rows are % of assigned. Stayed rows are % of their matching trial cohort: no auto-renew-off webhook yet. Standard trials come from Adapty's server paywall tag.
Blended = unique 3-day + 7-day trial users. Stayed means no matching auto-renew-off webhook yet. The Popup V1/V2 final is shown in the Popup tab.
Trial rows are % of assigned. Stayed rows are % of their matching trial cohort: no auto-renew-off webhook yet. Standard trials come from Adapty's server paywall tag.
Blended = unique 3-day + 7-day trial users. Stayed means no matching auto-renew-off webhook yet. The Popup V1/V2 final is shown in the Popup tab.
The overall onboarding tab starts at 26 Sep 00:00 and includes all fresh production app 1.4.0–1.4.1 users. This A/B starts later, at 19:08, and includes only tagged experiment exposed users. Do not add the two cohorts.
Rows through 7-day trial are % of popup shown, because popup assignment occurs only after an interrupted checkout.
Parent-paywall diagnostic: v1: 54 trials / 387 shown · v1.1: 47 trials / 347 shown.
Rows through 7-day trial are % of popup shown, because popup assignment occurs only after an interrupted checkout.
Parent-paywall diagnostic: v1: 46 trials / 385 shown · v1.1: 35 trials / 318 shown.
paywall shown carrying both the Paywall and Popup experiment tags. Assigned therefore equals Paywall shown for that exact route, rather than duplicating the parent Paywall's whole assignment cohort. Popup is still assigned later in the flow, so these are reporting cohorts, not four independently randomized arms.Assigned = first tagged paywall shown for this exact Paywall × Popup route. Trial rows are % of this route cohort. Stayed rows are % of their matching trial cohort.
Assigned = first tagged paywall shown for this exact Paywall × Popup route. Trial rows are % of this route cohort. Stayed rows are % of their matching trial cohort.
Assigned = first tagged paywall shown for this exact Paywall × Popup route. Trial rows are % of this route cohort. Stayed rows are % of their matching trial cohort.
Assigned = first tagged paywall shown for this exact Paywall × Popup route. Trial rows are % of this route cohort. Stayed rows are % of their matching trial cohort.
Blended = unique 3-day + exact 7-day-popup-route trial users. Stayed means no matching auto-renew-off webhook yet.
experiment exposed: V1 2950 and V1.1 2880. 5792 have both assignment and tagged Hook; 38 have assignment without Hook and 32 have Hook without assignment. These are telemetry timing gaps, not a third paywall arm.Trial rows are % of assigned. Stayed rows are % of their matching trial cohort: no auto-renew-off webhook yet. Standard trials come from Adapty's server paywall tag.
Blended = unique 3-day + 7-day trial users. Stayed means no matching auto-renew-off webhook yet. The Popup V1/V2 final is shown in the Popup tab.
Trial rows are % of assigned. Stayed rows are % of their matching trial cohort: no auto-renew-off webhook yet. Standard trials come from Adapty's server paywall tag.
Blended = unique 3-day + 7-day trial users. Stayed means no matching auto-renew-off webhook yet. The Popup V1/V2 final is shown in the Popup tab.
The overall onboarding tab starts at 26 Sep 00:00 and includes all fresh production app 1.4.0–1.4.1 users. This A/B starts later, at 19:08, and includes only tagged experiment exposed users. Do not add the two cohorts.
Rows through 7-day trial are % of popup shown, because popup assignment occurs only after an interrupted checkout.
Parent-paywall diagnostic: v1: 54 trials / 387 shown · v1.1: 47 trials / 347 shown.
Rows through 7-day trial are % of popup shown, because popup assignment occurs only after an interrupted checkout.
Parent-paywall diagnostic: v1: 46 trials / 385 shown · v1.1: 35 trials / 318 shown.
Assigned to push group = experiment allocation, not a confirmed notification send. Opened = confirmed tap. Send and delivery counts are not instrumented yet.
Gross confirmed revenue: $49.98 · screen: 118/11/16 · reactivated: 3/0/1 · re-cancelled: 1/0/1
installs since the flip: 2836 · unique users per step · red = step drop ≥4.5% · same step list as V2
2149 reached the Notifications screen · asked during onboarding, before the paywall
Each popup viewer first tapped Buy on the 3-day paywall, then cancelled the Apple checkout. This is a separate rescue path, not a subset of completed purchases.
paywall: FarmToTablePaywall3Days$39.99 · % in this column are % of onboarding-start cohort — same base as the frozen panes and the 1.3.0 tab
Stayed = no trial_renewal_cancelled webhook yet. This includes users who later paid and users still in an unfinished lifecycle; it is not a paid-retention metric. Blended combines standard 3-day and rescue 7-day cohorts; accidental 30-day and promo trials stay separate.
Trial conversion in the first hours can read high: late trials from pre-flip paywall views land here (webhook has no version tag). A stayed trial can already have converted to paid or still be pending; use conversion events for paid retention.
installs on 1.3.1–1.4.0: 1959 · unique users per step · red = step drop ≥4.5% · same step list as V2
1492 reached the Notifications screen · asked during onboarding, before any paywall is assigned
paywall: FarmToTablePaywall3Days$39.99
tapped buy, dismissed the Apple payment sheet, still trialed later · baseline for the cancel-recovery popup test
paywall: FarmToTableV3
tapped buy, dismissed the Apple payment sheet, still trialed later · baseline for the cancel-recovery popup test
Trials and cancels are attributed by Adapty's own server-side paywall tag on the webhook
(ab_test_name + paywall_name) — matches the Adapty A/B dashboard; a person-id join loses a few.
Stayed = no auto-renew-off webhook on the same trial cohort; it is the exact complement of the former cancel rate. Conversion lags 3 days.
654 reached the Notifications screen · app 1.3.0, since 2026-08-23
775 reached the Notifications screen · app 1.3.0, since 2026-08-23
Historical cohort: app 1.3.0. Unique users per step; red marks a step drop of at least 4.5%.
Payment started and checkout billing error are unique PostHog people, so repeat errors from one person count once. Payment finished is distinct settled billing customers. Renewal billing error is the current production status past_due or unpaid.
Each behavioral row is a unique PostHog person as a share of Current landing views. The cohort remains current until a new explicitly tagged web experiment starts.
Plan and Scratch discount already belong to the main funnel above. This card starts at the next screen, Paywall shown, and every percentage uses the initial Hook cohort. Paywall, checkout, and client billing-error rows are PostHog behavior; purchases and renewal state are current production billing records for the frozen V1 purchase window.
Trial renewal status is shown in Plans and checkout with the base purchase that created it.
Upsell counts are settled Stripe purchases after a base purchase. Refunds and disputes are reconciled in the payment source and do not appear as client telemetry here.
Confirmed when a web-email account has a later successful sign-in within 30 days and its timestamp matches that account's device last-seen timestamp within 2 seconds. Counts are aggregate only.
hook_variant: a = текущий Hook, b = Hook + Values V2. В сравнение не входят 1,140 Hook visitor(s) без этого свойства. Поэтому проверка фактического 50/50 сейчас возможна только на 1,310 явно размеченных входах.Hook → Values: B 65% против A 60% (+5 п.п.). Ниже сохранена полная Web V1 воронка обоих вариантов.Purchase, upsell, and access events are attributed to the tagged Hook cohort by person_id. Plans and renewal state are current billing records joined through each cohort's web account.
Purchase, upsell, and access events are attributed to the tagged Hook cohort by person_id. Plans and renewal state are current billing records joined through each cohort's web account.
Каждая строка — уникальные люди как доля от Hook landing своего варианта. Values измеряется подтверждённым событием web onboarding started. Анонимная web-идентичность может меняться в сессии, поэтому это направляющая продуктовая воронка, не платёжный ledger.
Location → Locked map. Это отделяет эффект нового входного Hook от эффекта IP-подтверждения на Location.A · current Hook
A · current GPS · 337 assigned people
A · current Hook
B · IP confirmation · 354 assigned people
B · Hook + Values V2
A · current GPS · 358 assigned people
B · Hook + Values V2
B · IP confirmation · 343 assigned people
Вариант берём на самом событии, поэтому IP-метрики не смешиваются с последующими сменами assignment.
«Другой способ» считаем только когда есть web location chosen после IP result, но нет ни IP-confirm, ни ZIP. Сейчас этот event не передаёт source, поэтому GPS и поиск внутри этой категории разделить нельзя.
Шаги 1–7 общие для всего трафика. Сегментация начинается строго с Location, по первому tagged /location.
50/50-normalized to the shared pre-Location flow · 348 assigned people
Counts are actual unique people in the branch. Percentages normalize each 50/50 branch back to the shared pre-Location flow, so they are directly comparable and do not halve at the split.
50/50-normalized to the shared pre-Location flow · 345 assigned people
Counts are actual unique people in the branch. Percentages normalize each 50/50 branch back to the shared pre-Location flow, so they are directly comparable and do not halve at the split.
Это продуктовая когорта, не финансовый ledger: anonymous person_id может меняться. Stripe подтверждает только расчёты, соединённые с analytics ID когорты; PostHog web purchase completed остаётся клиентской телеметрией.
Вариант определяется по свойствам hook_variant и location_variant. Главная метрика теста — Location opened → Locked map; сквозный Hook landing → Locked map показан отдельно, чтобы не смешивать эффект Location с потерями на предыдущих экранах. Метрики checkout и purchase остаются в полной Web V1 воронке и пока не дублируются здесь: этот таб измеряет взаимодействие двух тестируемых экранов до paywall.
Selected · trial started · stayed
Selected · trial started · stayed
Trial started = qualifying 3-day or 7-day production trial users ÷ people whose latest selected city or state matches that row. Stayed = those trial users without a matching auto-renew-off webhook yet ÷ qualifying trial users. Promotional and other products are excluded; recent trials may still receive a cancellation webhook.
Monthly unique people. Re-selecting a city in another month counts once in each month.
Farm-density and replay examples are intentionally not shown here: their snapshot was static and scoped only to the old 1.3.0 test cohort. They remain preserved in the backup, not presented as current all-time data.