We integrate Soft Paywall with skip capability into mobile apps, balancing monetization and user experience. This approach avoids scaring users away at the start, offering a paid subscription after they appreciate the product's value. With extensive experience, we have implemented 20+ projects with paywall mechanics, and A/B test results show: conversion with proper triggers increases 2–3 times. In one edtech app, switching from hard paywall to Soft Paywall with skip button increased conversion 4x (from 2% to 8%). Subscription price starts at $4.99/month, and users can save up to 50% with annual plans.
Soft Paywall with Skip Mechanism
Soft Paywall differs from hard paywall in that the user can close the paywall without purchasing and continue using the app's functionality. According to App Store Review Guidelines Section 4.2, the skip button must be immediately visible and conveniently placed. This reduces frustration and improves app perception.
Effective Soft Paywall Triggers
A typical mistake is showing soft paywall on the first launch. The user hasn't yet understood the value, dismisses — the 'seen paywall' metric increases, but conversion does not. Proper triggers:
- After reaching an aha-moment (user created their first project, generated first result, completed their first lesson).
- When attempting to use a premium feature.
- After N sessions (3–5 opens) — user returned, so they felt value.
- By time: on the 3rd day using the free trial.
All these triggers are managed via PaywallTriggerManager — logic on the server or in Firebase Remote Config. When to show, how often, after how many sessions — these parameters are A/B tested.
Configuring Display Triggers Properly
Triggers are of two types: event-based and time-based. Event-based — after a specific user action (creation, completion). Time-based — after a certain number of days or sessions. The best result comes from a combination: first display event-based, repeat displays time-based with cooldown.
| Trigger type | Example | Conversion (A/B) |
|---|---|---|
| Event-based | After creating a project | 8–12% |
| Time-based | 3rd day of use | 5–7% |
| Intent-based | Attempting premium feature | 15–20% |
For instance, in a meditation app, an intent-based trigger when trying to open a premium course showed 18% conversion, which is 25% higher than the market average.
Why the Skip Button Must Be Available
The 'Skip' / 'Continue for free' button must not be hidden. Apple rejects UI where Skip is deliberately placed inconveniently, in small font, or appears with a delay. The rule: if the free version functionally works — the user must see a way back without obstacles.
Technically: pressing Skip is logged in analytics (Analytics.logEvent("paywall_skipped", parameters: ["trigger": triggerName, "variant": variantId])). This data is for A/B testing — different paywall variants have different skip rates and conversion rates. Both numbers are important: a paywall with zero skip rate and 1% conversion is worse than a paywall with 40% skip rate and 5% conversion. Soft paywall with skip button converts 2–3 times better than hard paywall without alternatives.
Display Frequency
Showing soft paywall every time a premium feature is accessed is aggressive and annoying. Standard scheme: show if lastPaywallShownAt was more than N days ago OR if the user manually accessed a premium feature (intent-triggered). lastPaywallShownAt is stored in UserDefaults / SharedPreferences, updated on each display.
Server-side configuration via Remote Config: soft_paywall_cooldown_days: 3, max_impressions_per_week: 2 — can be changed without a release during A/B testing.
Overlay vs Full-Screen
Soft paywall can be:
-
Half-sheet / bottom sheet —
UISheetPresentationController(iOS 15+) with.mediumdetent. The user sees content underneath, reducing anxiety from being 'locked in'. - Full-screen modal with transparent background (blur overlay) over content — for feature-triggered paywall, showing exactly what is available in premium.
- Inline banner in the feed at a specific position — least aggressive option, lower conversion but doesn't interrupt UX.
On iOS, UISheetPresentationController with prefersGrabberVisible = true signals that the sheet can be dismissed. This is not accidental — people interact more with UI when they understand they can exit.
| Overlay type | Conversion | User experience |
|---|---|---|
| Bottom sheet | 8–12% | Low aggression |
| Full-screen modal | 12–18% | Medium, but effective |
| Inline banner | 3–5% | Minimal intrusion |
Soft paywall with inline banner showed a 30% lower churn rate compared to full-screen modal in one of our projects.
Logic After Skip
User skipped the paywall — do not aggressively show the 'Upgrade' button everywhere. Save a record of intent (user_intent_score) and use it for more precise targeting of the next display: if the user attempted to use a premium feature 3 times — show the next paywall earlier than the standard cooldown.
PaywallTriggerManager increments premium_feature_attempt_count on each attempt. When reaching a threshold — shows paywall regardless of cooldown.
Our Workflow
- Determine display triggers together with the product owner.
- Develop PaywallTriggerManager + Remote Config integration.
- UI for paywall + skip logic.
- Analytics events (skip rate, conversion).
- Set up A/B test (minimum 2 variants).
- QA and publish.
More on trigger configuration via Remote Config
In Remote Config, we set parameters: paywall_triggers (JSON with list of events and time conditions), cooldown_days, max_impressions_per_week. Each trigger has priority, weight for A/B tests, and enabled flag. This allows changing logic without a release.
Estimated Timelines
Soft paywall with configurable triggers, event analytics, and Remote Config management — from 2 to 3 business days with ready IAP integration and Server API.
| Stage | Duration | Result |
|---|---|---|
| Analytics and design | 4–8 hours | Trigger and UI specification |
| Component development | 1–2 days | PaywallTriggerManager + screen |
| Remote Config integration | 2–4 hours | Parameters in console |
| A/B test setup | 2–4 hours | Ready split |
| QA and release | 4–8 hours | Pass review |
What's Included
- PaywallTriggerManager (iOS/Android)
- Remote Config integration
- Event analytics (Firebase, Amplitude)
- A/B test (minimum 2 variants)
- QA and documentation
- Post-release support (2 weeks)
We guarantee stable operation and compliance with App Store Review Guidelines. For a consultation on your project, contact us. Experience of 20+ paywall integrations — let's discuss your case. Get an engineer consultation to choose the optimal triggers for your app.







