Hey everyone 👋
We’ve been experimenting with exit offers and rewrote our paywall presentation flow on iOS. We moved from embedding PaywallView to using presentPaywallIfNeeded.
However, we encountered a couple of questions about exit offers during testing.
No client-side signal when an exit offer is shown
There’s no local callback or hook in the SwiftUI presenter API that tells us when an exit offer is displayed or which offering is shown.
We can see this in RevenueCat debug logs, but we found no way of observing it.
Since we track conversions and funnels via Mixpanel, this makes it hard to understand:
- Whether an exit offer was shown
- Whether a conversion came from the main paywall or the exit offer
Exit offers always show on dismiss
Exit offers appear every time the user dismisses the paywall. Many users open the paywall, quickly close it, and continue using the app.
If the exit offer always shows immediately on the first close, it feels like two paywalls back-to-back, defeating the purpose of an “exit” offer, especially if the second paywall is a better deal and always shown.
So as a user: I’d probably “learn” this behavior, no?
Ideally, we’d like to:
- Programmatically suppress or delay exit offers (e.g., only show after N dismissals or not on first exposure).
- Know locally when the exit offer is displayed to reason about user behavior and conversions.
So, have you guys also run into the same limitations? How are you tackling them?
Are you solely relying on server-side attribution (webhooks/dashboards) or have you found a clean client-side approach?
Can you control or conditionally disable exit offers per session or user? Is that intentionally not exposed?
Thanks :)
