Detecting and Saving At-Risk Users: In-App Churn Prevention with Amply

Stan

02 Mar 2025

Every mobile app loses users. That's not the problem. The problem is losing users you could have saved — the ones who slowly disengage, skip a few sessions, and then disappear entirely. By the time most teams notice the drop, it's too late. The user has already mentally moved on, and your winback email lands in an inbox they never check.

What if you could intercept that moment — the exact session when a lapsing user returns — and deliver a personalized reason to stay? That's what in-app churn prevention looks like with Amply. No push notifications that get ignored. No emails that go to spam. A targeted, in-app experience at the one moment your at-risk user is actually paying attention.


Why Traditional Churn Prevention Fails on Mobile

Most churn prevention strategies were designed for web SaaS: automated email drip sequences, push notification blasts, and retargeting ads. On mobile, these channels have fundamental problems:

  • Push notifications have declining opt-in rates, especially on iOS. Many at-risk users have already disabled them.
  • Emails require the user to leave their current context, open another app, and click through. Conversion rates for winback emails average 2-5%.
  • Retargeting ads are expensive and imprecise. You're paying to reach users who may have already uninstalled.
  • None of these channels can react in real time. There's always a delay between detecting disengagement and reaching the user.

The in-app moment is the highest-intent touchpoint you have. When a lapsing user opens your app after a 10-day gap, they're giving you one more chance. That session is your intervention window, and it closes fast.


Identifying At-Risk Users with Amply's Targeting

Amply's targeting engine lets you define "at-risk" directly in your campaign rules — no separate analytics pipeline required. The core idea is simple: compare the current timestamp against the user's last session to calculate the gap, then trigger your winback campaign only when that gap exceeds a threshold.

Time-Gap Targeting with JsonLogic

Amply uses JsonLogic expressions for targeting conditions. Here's how to target users whose last session was more than 7 days ago (604,800,000 milliseconds):

{
  ">=": [
    { "-": ["@device.nowTs", "@triggeredEvent.lastTriggeredTs"] },
    604800000
  ]
}

This expression runs at campaign evaluation time. @device.nowTs is the current device timestamp, and @triggeredEvent.lastTriggeredTs is the last time the trigger event (in this case, SessionStart) was recorded. If the difference is 7+ days, the user qualifies for the campaign.

Layering Additional Signals

A single time gap might catch vacation returns or one-off absences. To improve precision, layer in additional custom properties:

  • Session frequency dropping: Track weekly_sessions as a custom property and target users where this value has decreased.
  • Engagement flags: Set is_active to false when server-side analytics detect declining usage patterns.
  • Negative exclusion: Exclude users who are still active — you don't want to show a 'welcome back' message to someone who was here yesterday.
// Set engagement properties from your analytics pipeline
AmplySDK.setCustomProperties(mapOf(
    "last_active_date" to "2025-01-10",
    "weekly_sessions" to 1,
    "is_active" to false
))

Building Winback Campaigns

With your at-risk segment defined, the next step is designing the intervention. The goal is clear: give the returning user an immediate, compelling reason to re-engage — before they close the app again.

The Trigger

// Track session start — this is your campaign trigger
AmplySDK.track("SessionStart")

The Action: Deeplink to a Welcome-Back Experience

Instead of showing a generic popup, use Amply's deeplink action to route the user to a dedicated welcome-back screen. Configure your campaign action with the deeplink happens://welcome-back, and handle it in your app:

// Handle the winback deeplink
AmplySDK.setDeeplinkHandler { url ->
    if (url.contains("welcome-back")) {
        showWelcomeBackOffer()
        AmplySDK.track("WinbackShown")
    }
}

Impression Limits

Set the campaign to show once per return. You don't want the same user seeing the welcome-back offer on every session after they've re-engaged. Amply's impression limits let you cap the campaign to a single display.


The Implementation Blueprint

The best churn prevention doesn't feel like churn prevention. It feels like the app knows you came back and is genuinely glad to see you.
  1. Instrument session tracking

    Call AmplySDK.track("SessionStart") when your app launches. This is both your campaign trigger and your timestamp source.

  2. Sync engagement properties

    Push weekly_sessions, is_active, and last_active_date from your analytics backend.

  3. Create the campaign in Amply

    Set the trigger to SessionStart. Add the time-gap condition (7+ days since last trigger). Set the action to deeplink happens://welcome-back. Limit impressions to once.

  4. Build the welcome-back screen

    Handle the deeplink in your app. Design a screen that delivers immediate value: a discount, new feature highlight, or personalized content recap.

  5. Track the funnel

    Fire AmplySDK.track("WinbackShown") when the screen appears and AmplySDK.track("WinbackConverted") when the user takes the desired action.


Measuring Retention Impact

  • Winback show rate

    How many at-risk users triggered the campaign vs. how many actually saw it.

  • Winback conversion rate

    WinbackConverted / WinbackShown. This tells you whether your offer is compelling enough.

  • 7-day and 30-day retention after intervention

    Compare the retention curve of users who saw the winback vs. a control group. Expect a 15-25% lift.

  • Session frequency recovery

    Are winback users returning to their previous session cadence, or do they lapse again within a week?

// Track the full winback funnel
AmplySDK.track("WinbackShown")

// When the user takes the desired action
AmplySDK.track("WinbackConverted")

Using Churn Data Beyond Amply

  • Email winback sequences

    Users who didn't convert from the in-app campaign can be enrolled in an email sequence.

  • Product prioritization

    If a particular user segment churns at higher rates, that's a signal to investigate what's missing.

  • Predictive modeling

    The custom properties and session patterns you track become training data for ML-based churn prediction.

The most valuable outcome of in-app churn prevention isn't just the users you save — it's the data you collect about why users leave and what brings them back.

Conclusion

Churn isn't a single event. It's a process — a gradual disengagement that happens across days and weeks. Amply lets you catch users at the critical moment: the first session after a gap. With time-based targeting, custom property segmentation, and deeplink-driven experiences, you can deliver a personalized welcome-back at exactly the right time.

Start with the 7-day gap rule. Instrument SessionStart, set up the JsonLogic condition, build a simple welcome-back screen, and measure the results against a control group. The users who come back are telling you something. Make sure your app is listening.