When a user hits an unprompted hard limit, churn spikes. We design freemium models with soft gates and transparent usage bars, achieving up to 12% conversion on limit-based paywalls. Freemium isn't just free + paid—it's a crafted experience where every gate and limit serves conversion. Over ten projects (from note-taking apps to AI editors), we've learned: the main mistake is giving either too little (user doesn't see value) or too much (no incentive to pay). Balance comes from clear value separation: feature gating, usage limits, quality gating, and well-timed paywall triggers. Integration cost is custom, but our clients save up to 40% on monetization by reusing our EntitlementManager.
Freemium is a business model where basic functionality is free and advanced features are paid.
Boundaries of Freemium: Feature Gating, Usage Limits, Quality Gating
Three effective patterns:
- Feature gating — basic features free, advanced paid. E.g., task creation unlimited (free) plus team collaboration (premium). If a paid feature is free in a competitor's app, the value is lost.
- Usage limits — same features but with quantitative caps. E.g., 3 projects in free version, 7 AI queries per day. Limits must be noticeable but not frustrating. 80% of users leave if the limit is not shown beforehand.
- Quality gating — export without watermark, high resolution — premium. Popular in creative apps.
On the client, entitlement checks go through a centralized EntitlementManager—a single FeatureFlag + Entitlement layer. No scattered if-else.
When to Use Soft Gate vs Hard Gate
| Aspect | Hard gate | Soft gate |
|---|---|---|
| Block type | Feature physically unavailable | Feature accessible, then paywall |
| Conversion | Lower — user doesn't see value | Up to 40% higher — user tries and buys |
| Application | Resource-intensive features (AI, cloud) | Others |
Soft gate converts better, so we recommend it for most features. On iOS, implement via FeatureGateModifier in SwiftUI:
Button("Export HD") { viewModel.exportHD() } .featureGated(.hdExport, paywallTrigger: .featureTap) Displaying Limits and Progress Bars
Users must see their limits in advance. A hidden limit that triggers suddenly is frustrating. Better: a progress bar '7 of 10 AI requests today' and at 80% — a soft nudge towards premium. Limits are stored server-side; the client receives via API usage_quota. Daily reset is done by cron, with a push {"type": "quota_reset"}.
Effective Paywall Triggers
Freemium requires well-timed paywall presentations. Organic triggers (user naturally hits a limit) convert better than forced ones. PaywallTrigger enum includes: .usageLimitReached, .featureTapped, .exportAttempted, .scheduled(day: 7). Each trigger is A/B tested.
| Trigger | Description | Example Conversion |
|---|---|---|
| usageLimitReached | Limit reached | 12% |
| featureTapped | Attempt to use paid feature | 8% |
| exportAttempted | Attempt to export (premium) | 15% |
| scheduled(day: 7) | 7 days of usage | 10% |
Retention-driven upsell: if a user is active for 7 days, conversion increases. Day-7 retention of such users is 70%+.
Why Smooth Downgrade Boosts LTV
When a user cancels subscription, they downgrade to the free plan. Smooth downgrade: if they have 15 projects with a limit of 3 — do not delete them; mark read-only and display 'Your projects are saved — re-subscribe to edit.' This increases re-subscription chances by 25%. On the client, DowngradeManager when entitlement changes from premium to free, calculates excess and updates UI without data deletion.
StoreKit 2 / Play Billing Integration
Auto-renewable subscription: product.subscription?.renewalInfo contains willAutoRenew — display status. Manage subscription: URL(string: "https://apps.apple.com/account/subscriptions") for iOS, launchBillingFlow with SubscriptionUpdateParams for plan changes on Android. For details, see StoreKit 2 documentation.
Our Process and What's Included
- Feature Map design (free vs premium).
- Develop EntitlementManager + FeatureGate layer.
- Implement limits and their display.
- Configure paywall triggers.
- Integrate StoreKit 2 / Play Billing.
- Implement downgrade logic.
- Set up A/B testing (Firebase Remote Config).
- QA and release.
What's included in freemium implementation
- Feature Map document
- EntitlementManager and FeatureGate code
- Paywall UI (adaptive for iOS/Android)
- A/B testing setup (Firebase Remote Config)
- Monetization model documentation
- Support during app store release
Timeline Estimates
Freemium model implementation with EntitlementManager, feature gating, limits, and soft/hard gates — 5 working days if IAP integration is ready. From scratch including StoreKit 2 / Play Billing — 1.5 to 2 weeks.
Contact us to discuss your monetization model — we'll help find the balance between free and paid to maximize LTV. Get a consultation for your project today.







