subscription-push-lifecycle

Pushlane: Paywall Abandonment Push Notifications

Build a paywall abandonment push from product intent, verified subscription state and one useful return path without inventing urgency or discounts.

A paywall abandonment push notification should continue a decision the person already started. It should not assume that every closed paywall is a failed purchase or that a discount is the only reason to return.

The app observes paywall behavior. RevenueCat verifies subscription state. Pushlane can combine those signals so the message is sent only while the original context remains true.

This guide builds a narrow recovery flow without treating a paywall view as proof of intent.

Define what abandonment means in your app

paywall_viewed is not enough by itself. A paywall can appear automatically during onboarding, open from a premium feature, or be revisited from account settings. Those placements represent different questions.

Record at least:

  • placement, such as advanced_export or settings;
  • the premium job that led to the paywall;
  • whether the person was activated before the view;
  • whether the paywall was dismissed or the session ended;
  • a stable content or feature identifier when a return path exists.

Use product event names your app actually emits. Pushlane recommends paywall_viewed as a product event, but the app owns the instrumentation. RevenueCat purchase webhooks remain the payment source of truth.

Pushlane does not currently bridge RevenueCat PAYWALL_* webhook events into flows. Do not assume enabling them creates a usable entry event. Instrument the product moment directly and verify it in the catalogue.

Qualify the moment before sending

A useful candidate has shown both product value and premium intent.

paywall_dismissed
  -> branch: placement is advanced_export
  -> branch: activation completed
  -> branch: no verified purchase or trial start
  -> wait until the active session ends
  -> branch: reachable, consent-eligible iOS device
  -> send one return path

An automatic onboarding paywall should usually return to onboarding help, not a price reminder. A paywall opened from a specific premium action can support copy about that action.

The freemium conversion guide explains how to separate activation from monetization.

Stop on the first verified subscription event

The critical failure is sending an upgrade reminder after the person has already started a trial or paid.

RevenueCat sends INITIAL_PURCHASE for a new purchase. A trial is an INITIAL_PURCHASE with period_type: "TRIAL". Pushlane emits the raw revenuecat.initial_purchase event and derives revenuecat.trial_started for the trial path.

Use the raw initial-purchase event as an immediate stop for the abandonment flow. It arrives before the derived trial event and covers both paid and trial starts.

wait after paywall exit
  -> cancel on revenuecat.initial_purchase
  -> cancel on logout or opt-out
  -> send only if premium intent is still unresolved

RevenueCat's official trial flow documentation describes the raw purchase and renewal sequence.

Choose one unanswered question

Paywall exits often leave one of three questions:

What does premium change?

See the full category analysis

Review the trends included with the report you started.

Will this solve my task?

Preview your advanced plan

See the sessions and progression before choosing a subscription.

Can I return later?

Your comparison is still available

Return when you are ready to review the plan options.

Do not claim work was saved unless it was. Do not create a countdown unless the destination enforces the same deadline. Do not mention a discount unless the store will resolve an eligible, current offer for that user.

Deep link to the same decision

Landing on the home screen breaks the continuity that justified the notification. Return to the feature preview, saved task or exact paywall placement.

Test these states:

  • the app was terminated;
  • authentication expired;
  • the product or offering changed;
  • the user purchased on another device;
  • the original content no longer exists;
  • entitlement state is still syncing.

Refresh current entitlement state before showing the paywall. A verified subscriber should see access, not another purchase request.

Keep the sequence short

One useful reminder is a strong first version. A second message is justified only when it removes a different blocker.

For example, the first message can restore a feature preview. A later message can explain plan differences if the user revisits but remains undecided. Repeating the same upgrade line is not a sequence.

Stop after an explicit dismissal or a documented contact limit. Healthy free users can continue using the free product without being chased indefinitely.

Separate paywall recovery from trial onboarding

Once revenuecat.trial_started fires, the abandonment flow is finished. Trial onboarding has a different job: help the person experience paid value before the real expiration time.

The trial-to-paid sequence should own that state. Post-purchase activation should own immediately paid users. Explicit ownership prevents three flows from welcoming the same customer.

Measure a qualified revisit, not just an open

Use a funnel that preserves the original audience:

  1. qualified paywall exit;
  2. send or suppression;
  3. attributed open;
  4. original feature or comparison viewed;
  5. verified trial or paid start;
  6. first premium value completed;
  7. opt-out or support guardrails.

A paywall revisit may be the correct primary action when the message promises information, not a purchase. Keep subscription outcomes downstream and avoid claiming every purchase as caused by the push.

When traffic supports it, hold out a stable share of the same qualified exits. Compare the predefined outcome within a fixed window.

Recover context, not every exit

Paywall abandonment push is useful when the app knows what the person was trying to do and can restore that path accurately. Instrument the placement, exclude unactivated users, stop on verified RevenueCat state and send one honest reason to return.

Silence is the correct outcome when the context is weak or the user has already decided.

Pushlane: Paywall Abandonment Push Notifications