RevenueCat Alternatives in 2026: Choosing a Subscription Platform for Mobile Apps
A decision framework for picking between RevenueCat, Adapty, Qonversion, Apphud, Chargebee, and Stripe Billing in 2026, with pricing math and DMA impact.
Mobile subscription infrastructure is a layered choice: the SDK and entitlement engine on-device, the billing/catalog/tax layer behind it, and the paywall, experimentation, and analytics tools on top. RevenueCat is the default for the first layer, and it covers the other two well enough for most teams. Its 1% MTR fee on gross revenue changes the math past roughly $100k MTR, and the 2026 market has alternatives that beat the default on one axis each: Adapty on paywall experimentation, Qonversion on analytics-per-dollar, Apphud on win-back flows, Chargebee and Stripe Billing on cross-platform billing.
Six platforms are worth comparing seriously, and the choice between them comes down to app stage, platform mix, and region. The post-DMA external payment rules, the StoreKit 2 and Google Play Billing v7 gotchas, and the migration costs that rarely appear on vendor marketing pages all move the answer.
The 2026 Landscape#
Two groups of tools compete for the same logo on a slide deck, but they solve different problems.
- Mobile-first infrastructure: RevenueCat, Adapty, Qonversion, Apphud. Built around StoreKit and Google Play Billing. Entitlements are the core abstraction. Paywall builders, A/B testing, and attribution integrations are table stakes.
- Cross-platform billing: Chargebee, Stripe Billing. Built around web subscriptions, catalog, tax, and invoicing. Mobile is a bolt-on, and for digital goods in a mobile app, Apple and Google IAP are still mandatory outside narrow DMA and US post-Epic carve-outs.
Most serious apps in 2026 run a hybrid model: IAP on mobile for digital goods, web checkout (Stripe or Chargebee) for upgrades, B2B seats, and DMA-eligible external payments. The practical question is which mobile platform pairs with which web platform, reconciled on a single user identity.
Decision Framework#
The diagram below routes most teams to a sensible default before any feature or pricing detail enters the picture. Use it as a starting point, not a verdict.
The branches map to real constraints: if you are pre-$2.5k MTR, any free tier works and optimizing is a waste of engineering time. Above $100k MTR, the 1% gross fee on RevenueCat is a line item your finance team will notice, and Adapty, Apphud, or Qonversion enter the picture. If you need to bill on the web as well, you almost always end up hybrid.
Feature Comparison#
The dimensions that matter for a platform decision are fewer than vendor pages suggest. Ignore the raw feature counts and focus on these.
| Dimension | RevenueCat | Adapty | Qonversion | Apphud | Chargebee | Stripe Billing |
|---|---|---|---|---|---|---|
| Paywall Builder | Paywalls v2, AI generation | Mature builder, remote config | Lighter | Visual editor + Rules | Web checkout only | Web checkout only |
| A/B Testing | Experiments, integrated | Bayesian + AI winner prediction | Basic | Solid | None for mobile | None for mobile |
| Analytics Depth | Charts + Customer Center | Revenue + LTV prediction | Historically strongest for small apps | Real-time | SaaS MRR/ARR | Sigma / dashboards |
| Attribution | AppsFlyer, Adjust, Branch, Singular, Amplitude, Mixpanel | Same set, deep | Same set | Same set | Weak for mobile | Weak for mobile |
| Receipt Validation | Server-side, handled | Server-side, handled | Server-side, handled | Server-side, handled | Wrapper available | Not provided; bring your own |
| Entitlements Model | Entitlements API (de facto standard) | Access Levels | Entitlements | Entitlements | Reconciliation layer, leaky on refunds | Subscriptions only |
| Webhooks | Reference taxonomy | Full set | Full set | Full set | Full set | Full set |
| Cross-platform Sync | iOS, Android, web, Stripe | iOS, Android, web | iOS, Android, web | iOS, Android, web | Web-first | Web-first |
The mobile-first four are more similar than their marketing suggests: basic plumbing is nearly identical across all four, and the real differences live in paywall experimentation rigor and analytics depth. Chargebee and Stripe Billing are not mobile IAP platforms at all; putting them in the same list is a category error unless you deliberately want them for the web half of a hybrid setup.
Pricing Reality in 2026#
Pricing pages are written to be skimmed, so let’s do the arithmetic that matters.
- RevenueCat: Free up to $2,500 MTR. Above that, 1% of gross MTR, where gross means pre-store-commission revenue. On non-small-business accounts, that translates to roughly 1.43% of your actual net proceeds after Apple and Google take their cut. No seat fees, no per-transaction fees.
- Adapty: Tiered by MTR with a free starter band. Pro plans unlock A/B testing, AI, and integrations. Revenue-share pricing at higher tiers; published numbers are less granular than RevenueCat and usually require a sales conversation at scale.
- Qonversion: Free plan typically up to $10k MTR. Paid plans priced around $6 to $8 per $1,000 MTR depending on Starter vs Growth. The best analytics-per-dollar for small and mid apps.
- Apphud: Free tier up to roughly $1k MTR. Pro plan around $49 per month up to roughly $5k MTR, Expert plan around $59 per month for higher bands with server-to-server webhooks, and custom pricing above. Rules engine included on paid tiers.
- Chargebee: Tiered SaaS pricing starting at Performance and Enterprise bands, plus percentage-of-revenue above thresholds. The mobile SDK is a legacy product being superseded by the newer Omnichannel Subscriptions offering.
- Stripe Billing: roughly 0.5% to 0.7% on recurring charges (Stripe moved most customers from 0.5% to 0.7% in mid-2025) on top of payment processing (roughly 2.9% plus 30 cents per transaction), plus 0.4% for Revenue Recognition or Sigma add-ons. No MTR concept; per-transaction instead.
A worked example to make the tradeoffs concrete. Consider an app with $100k MTR split evenly across iOS and Android. On RevenueCat, the fee is roughly $1,000 per month. On Adapty or Apphud at comparable tiers, the cost is competitive but typically requires a custom conversation. On Qonversion, the raw MTR math is often the cheapest, though you give up some of the growth features. On Chargebee or Stripe Billing alone, you cannot legally collect this revenue for digital goods inside the app on either platform, so the comparison is void.
Now consider a $500k MTR hybrid split 70% mobile and 30% web. RevenueCat for mobile is $3,500 per month, Stripe for the web slice is roughly 0.5% of $150k or $750, for a total around $4,250. Replacing the mobile side with a DIY Chargebee integration looks cheaper on paper but costs meaningfully more in engineering time for receipt validation, grace period handling, and webhook plumbing. For any team below a dedicated payments platform group, that overhead typically exceeds the savings.
Store commissions dwarf all of these fees. Apple and Google still take 15% to 30% off the top; the gap between RevenueCat and Adapty pricing is small next to whether you qualify for the Small Business Program or the DMA reduced rates in the EU.
StoreKit 2 and Google Play Billing v7 Gotchas#
Vendor SDKs hide most of the complexity, but the edge cases still bite. These are the ones that most often cause silent failures in production, regardless of which platform you pick.
StoreKit 2 requires subscribing to Transaction.updates at app launch, before any UI work. If you listen later, promoted offers, Ask-to-Buy purchases, and parental approvals can arrive while nothing is listening, and the transaction disappears from your app’s perspective even though Apple has completed it. Transaction.currentEntitlements also does not include entries that were refunded after being active; you need server notifications for a complete picture.
// Must run at app launch, not after sign-in or paywall open
Task.detached {
for await result in Transaction.updates {
guard case .verified(let transaction) = result else { continue }
await handleTransaction(transaction)
await transaction.finish()
}
}
Google Play Billing v7 removed several deprecated fields on ProductDetails.OneTimePurchaseOfferDetails and now requires PendingPurchasesParams to be configured explicitly when building the client. queryPurchasesAsync no longer returns pending purchases by default, which quietly breaks flows that relied on the old behavior.
val pendingPurchasesParams = PendingPurchasesParams.newBuilder()
.enableOneTimeProducts()
.enablePrepaidPlans()
.build()
val billingClient = BillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
.enablePendingPurchases(pendingPurchasesParams)
.build()
Other edge cases: refunds arrive via Subscription Status API and Server-to-Server Notifications v2 on Apple, and via voided purchases polling on Google. Family sharing entitlements look different from primary purchases. Upgrade and downgrade proration trips up naive webhook handlers. Sandbox testers do not count toward MTR but do generate webhook noise that has broken automation in production integrations.
Webhook Idempotency#
Every mobile subscription platform ships webhooks, but their event taxonomies differ. RevenueCat’s is the de facto reference other vendors are judged against: INITIAL_PURCHASE, RENEWAL, PRODUCT_CHANGE, CANCELLATION, EXPIRATION, BILLING_ISSUE, SUBSCRIBER_ALIAS, and so on. The non-obvious one is PRODUCT_CHANGE during upgrades, which can arrive before or after the corresponding RENEWAL, and deduplication by original_transaction_id is the safest key to use.
A minimal idempotent handler pattern:
async function handleWebhook(event: RevenueCatEvent) {
const dedupKey = `${event.type}:${event.original_transaction_id}:${event.event_timestamp_ms}`;
const inserted = await db.processedEvents.insertIfAbsent(dedupKey);
if (!inserted) return; // already processed
switch (event.type) {
case "INITIAL_PURCHASE":
case "RENEWAL":
case "PRODUCT_CHANGE":
await upsertEntitlement(event);
break;
case "CANCELLATION":
case "EXPIRATION":
await revokeEntitlement(event);
break;
}
}
Migration Considerations#
Switching subscription platforms is painful regardless of which direction you go. The SDK swap is routine work; historical cohort analytics and entitlement edge cases are what stretch the timeline.
- Entitlement mapping: Product IDs are flat; entitlement IDs are an abstraction each platform models slightly differently. Lifetime subscribers and grandfathered pricing cohorts need explicit handling.
- Historical analytics: Most platforms cannot import historical transactions cleanly. Plan to dual-run for at least one or two renewal cycles and accept that cohort history on the new side starts empty.
- Webhook rewriting: Taxonomies differ. A thin adapter that translates vendor events to a canonical internal event is almost always cheaper than rewriting downstream consumers.
- SDK swap: Introduce the new SDK behind a feature flag, gated to a small percentage of users. Validate entitlement parity with the old SDK for at least one full renewal cycle before cutting over.
- Server-side reconciliation: Keep a canonical
user_id → entitlementtable in your own database.
A concrete sketch for a Qonversion to Adapty move: export historical purchases from Qonversion as CSV, import into Adapty as the starting state, run both SDKs in parallel on a 5% feature-flag cohort for one renewal cycle, reconcile the entitlement tables daily, then ramp to 100% once the drift is under a fraction of a percent.
What Post-Mortems Keep Repeating#
A few patterns show up in almost every post-mortem in this space.
- Treating the vendor’s entitlement store as the source of truth. It is a cache. When the vendor has an outage or a webhook lag, your app should fall back to your own canonical store, not lock users out.
- Assuming Stripe Billing can replace IAP for digital goods in a mobile app. It cannot, except under narrow DMA conditions in the EU or specific US post-Epic carve-outs, and even there the operational overhead is real.
- Under-powered A/B tests on small MAU apps. Bayesian methods (Adapty) help, but they do not eliminate sample size discipline. A “winner” on 200 users per variant is almost always noise.
- Ignoring App Store Server Notifications v2 in favor of client-driven state. The client lies. A jailbroken device or a killed process can skip the webhook round trip.
- Forgetting
PRODUCT_CHANGEduring upgrades. Users get double-charged or lose entitlements for a billing cycle. Write integration tests for this specific event. - Writing your own receipt validation to “save the 1%”. Unless you have dedicated backend capacity for refund edge cases, grace periods, family sharing, and voided purchases, the vendor fee is cheaper than the on-call load.
Regulatory Shifts: DMA and Post-Epic Economics#
The EU Digital Markets Act and the US post-Epic v. Apple rulings have changed the edges of what is possible, though not the center. Apple and Google IAP are still mandatory for most digital goods flows in most regions. The exceptions worth understanding:
Under the EU DMA, External Purchase Link Entitlement allows linking to a web checkout from inside an EU-distributed app; Apple’s Core Technology Commission applies (currently around 5% in the EU), lower than the standard store commission but non-zero. In the US, the Ninth Circuit’s December 2025 ruling held that Apple cannot collect its prior commission on external US payments, but sent the case back to the district court to set a reasonable cost-recovery fee; Apple has pursued further appeal, and the situation is still in motion and should be tracked monthly. Google User Choice Billing is live in several regions with a discounted commission rate, less dramatic than the Apple changes but operationally simpler.
Practically, DMA-eligible hybrid architectures pair a mobile platform (RevenueCat or Adapty) for standard IAP with Stripe Checkout for the external purchase flow, reconciled via a single user identity on the backend. This takes real engineering work, and the ROI is only there for apps with enough EU revenue to justify the investment.
Recommendations by Scenario#
Rolling the decision framework up into concrete recommendations:
- Solo developer or indie, iOS-only, under $2.5k MTR: RevenueCat free tier or Apphud free tier. Zero operational cost, and you can swap later if needed.
- Early-stage startup, mobile-only, fast paywall iteration: Adapty for the experimentation rigor, or RevenueCat Paywalls v2 if you value ecosystem and docs more than A/B test depth.
- Growth-stage mobile app with an analytics-heavy marketing team: Qonversion for cost efficiency, or Adapty if predictive LTV matters.
- Scale-up with mobile and web and B2B seats: Hybrid. RevenueCat or Adapty on mobile, Stripe Billing on web, reconciled server-side.
- Enterprise SaaS with some mobile exposure: Chargebee as billing of record, with a mobile platform acting as an IAP receipt broker into Chargebee.
- EU-targeted app planning DMA external payments: Hybrid Stripe plus mobile platform, with explicit handling of the Core Technology Commission and External Purchase Link Entitlement.
Conclusion#
RevenueCat holds as the default for mobile-only apps from the free tier up to the point where the 1% gross fee is worth negotiating, and the ecosystem keeps it defensible above that. Override it when one of three pressures outgrows the default: paywall experimentation depth, analytics cost per dollar of MTR, or a web revenue share large enough to need its own billing of record. Whichever way that goes, keep the canonical user_id → entitlement table in your own database, so the rest of the setup stays reversible.
References#
- RevenueCat Pricing & Plans (opens in new tab) - Official pricing page with MTR thresholds and the 1% fee structure.
- Navigating RevenueCat’s new pricing for existing users (opens in new tab) - Official explanation of the updated MTR-based pricing.
- Announcing RevenueCat Paywalls v2 GA (opens in new tab) - Paywalls v2 feature set and Experiments integration.
- Generate a paywall with AI (RevenueCat Changelog) (opens in new tab) - AI paywall generation update.
- The State of Subscription Apps 2026 (opens in new tab) - 2026 benchmarks covering 115k+ apps.
- Why hybrid monetization is the default in 2026 (opens in new tab) - Hybrid IAP + web framing.
- Adapty vs RevenueCat Comparison (opens in new tab) - Adapty’s official comparison covering A/B testing and AI predictions.
- Adapty Paywall A/B Testing (opens in new tab) - Bayesian AB testing and AI winner prediction.
- Qonversion Pricing (opens in new tab) - Starter and Growth MTR pricing details.
- Qonversion: Handbook on App Store Receipt Validation (opens in new tab) - Receipt validation edge cases.
- Apphud Pricing (opens in new tab) - Free and Pro tier structure with MTR caps.
- Apphud Product Overview (opens in new tab) - Rules engine and infrastructure positioning.
- Chargebee Mobile Subscriptions Docs (opens in new tab) - Mobile subscription flows and legacy SDK notes.
- Stripe: Accept in-app purchases on iOS and Android (opens in new tab) - Stripe’s official mobile digital goods guidance.
- Can You Use Stripe for In-App Purchases? (RevenueCat) (opens in new tab) - Post-Epic analysis of Stripe for IAP.
- App-to-web external purchases (RevenueCat) (opens in new tab) - Practical DMA external purchase guide.
- New App Store Fees in 2026: EU DMA (FunnelFox) (opens in new tab) - 2026 EU DMA fee structure breakdown.
- An overview of StoreKit 2 (RevenueCat) (opens in new tab) - StoreKit 2 architecture and Transaction.updates model.
- Server-side purchase validation on Google Play (Adapty) (opens in new tab) - Google Play Billing validation guide.
Related posts
A practical guide to mobile in-app purchase rules, paywall patterns, and RevenueCat integration with server-side receipt validation and event-driven architecture.
in-app-purchase · subscriptions · mobile +1
An engineering guide to connecting ad clicks to paid subscriptions under SKAN 4, AdAttributionKit, and post-ATT privacy, with event taxonomy and reconciliation.
mobile · in-app-purchase · subscriptions +1
How to build a reliable entitlement sync layer that keeps subscription access consistent across web, iOS, and Android with EventBridge and idempotent processing.
webhooks · idempotency · subscriptions +3
A practical comparison of payment providers for SaaS: Merchant of Record vs Payment Processor models, PSD2/SCA compliance, VAT, and a provider decision framework.
payment-systems · subscriptions · compliance
A practical guide to subscription state machines, proration strategies, dunning management, and fraud detection patterns with Stripe webhooks and AWS EventBridge.
subscriptions · payment-systems · security +1