The Second Chance Paywall: In-App Retargeting for Returning Users

Stan
Stan

02 Mar 2025

Every e-commerce team knows the playbook: a visitor adds items to their cart, leaves without buying, and gets a well-timed email with a discount code 24 hours later. Abandoned cart retargeting recovers billions in lost revenue each year. But if you build mobile apps, you're facing the exact same problem with a much worse toolkit.

A user opens your app for the first time, hits the paywall, and closes it. They're gone. Unlike the web, there's no email in your CRM, no cookie trail, and no retargeting pixel. In this article, we'll build a second chance paywall — an in-app retargeting campaign that surfaces a time-limited offer to returning free users on their 2nd or 3rd session.


Why First-Session Paywalls Fail

  • No trust established: The user doesn't know if your app delivers on its promise.
  • Price anchoring works against you: Without perceived value, any price feels too high.
  • One-shot interaction: Once the user dismisses the paywall, there's no built-in mechanism to show it again.

Most users who see a first-session paywall say "not now" — and without a second touchpoint, they never see a subscription offer again. That is the leak a second-chance paywall is designed to plug.

The biggest revenue leak in mobile apps isn't users who say no. It's users who say 'not yet' and never get asked again.

The Second Chance Strategy

  1. Track user status

    Set is_premium = false for every free user. Update it when they subscribe.

  2. Identify returning non-subscribers

    Target users whose session count equals 2 or 3 AND whose subscription status is still free.

  3. Present a time-limited offer

    At session start, Amply fires a deeplink action and your app renders a time-limited offer screen or popup — for example, 50% off the first month. A no-code popup builder is also in closed beta for teams who prefer not to ship their own UI.

  4. Deeplink to a custom paywall

    When the user taps the offer, navigate them directly to a dedicated discount paywall screen.

  5. Cap the impressions

    Show this offer once per device. No spam, no annoyance.


Configuring Session-Based Retargeting with Amply

  • Triggering event + Repeat Rules: trigger on your SessionStart event and set Repeat Rules to on 2, 3 globally so the campaign evaluates only on the 2nd and 3rd lifetime sessions.
  • Custom Property: add a rule on is_premium (Boolean) with operator ≠ not equal to true — filters out existing subscribers.
  • Impression limit: Once per device lifetime.

Crafting the Perfect Offer

  • Acknowledge the return

    'Welcome back!' signals that you value their attention.

  • Create urgency

    A visible countdown ('Expires in 24 hours') gives the user a reason to decide now rather than later — and with Amply you can measure whether your audience actually responds to it.

  • Lower the commitment

    '50% off your first month' is easier to accept than an annual plan discount.

Treat your returning free users the way e-commerce treats cart abandoners: with a specific, time-bound incentive that removes the friction from their original hesitation.

Code Implementation

Three small pieces wire the scenario to your app: tag free users so Amply can target them, route the campaign's deeplink to your discount paywall, and update the user's properties on successful purchase so they exit the retargeting segment.

// Android (Kotlin). 'amply' is the Amply instance created in your Application class.
amply.setCustomProperties(mapOf(
    "is_premium" to false,
    "subscription_status" to "free"
))

// Track session start so Amply can evaluate the Repeat Rules on this campaign
amply.track("SessionStart")
// Android (Kotlin). Register a DeepLinkListener; the host app renders the popup or paywall.
import tools.amply.sdk.actions.DeepLinkListener

amply.registerDeepLinkListener(object : DeepLinkListener {
    override fun onDeepLink(url: String, info: Map<String, Any>): Boolean {
        if (url.contains("special-offer")) {
            showDiscountPaywall(discount = 50)
            amply.track("RetargetPaywallShown")
            return true
        }
        return false
    }
})
// Track successful subscription from the retargeting campaign
amply.track("SubscriptionStarted", mapOf(
    "source" to "retarget_campaign",
    "discount" to 50
))

// Update the user property so they exit the target segment
amply.setCustomProperties(mapOf(
    "is_premium" to true,
    "subscription_status" to "pro"
))

Note the final setCustomProperties call. Once the user subscribes, updating is_premium to true ensures they immediately exit the retargeting segment.


Measuring Retargeting ROI

  1. Impression rate: How many returning free users saw the popup?
  2. Tap-through rate: How many tapped the CTA?
  3. Conversion rate: How many subscribed?
  4. Revenue per recovered user: What's the LTV of retargeted users vs. organic subscribers?

Conclusion

E-commerce solved the abandoned cart problem years ago. Mobile apps are just catching up. With Amply's session count targeting, custom property filters, deeplink actions, and impression limits, you can build a complete retargeting flow without shipping a new app version.

Your first-session paywall is the pitch. The second chance paywall is the close.