Skip to main content
RevenueCat handles in-app subscriptions and provides analytics that Apple and Google don’t surface easily. It’s the leading subscription infrastructure for mobile apps. Website: revenuecat.com Docs: docs.revenuecat.com

What It Provides

Key Features for ASO Skills

FeatureDescriptionUsed By
Subscription analyticsMRR, churn, LTV, trial conversionmonetization-strategy, app-analytics
Paywall A/B testingTest pricing, trial length, paywall designmonetization-strategy, ab-test-store-listing
Cohort analysisRevenue by acquisition date/sourceua-campaign, retention-optimization
Customer listsActive, churned, trial usersretention-optimization
WebhooksReal-time subscription eventsapp-analytics
Cross-platformiOS + Android + WebAll subscription-based skills

Metrics Available

MetricDescription
MRRMonthly Recurring Revenue
Active SubscribersCurrently paying users
Active TrialsUsers in free trial
Trial Conversion RateTrials → Paid
Churn RateMonthly subscriber loss
ARPUAverage Revenue Per User
LTVLifetime Value
Refund RateRefunds / Purchases
Renewal RateSubscribers who renewed

Setup

pod 'RevenueCat'
Get your API key from app.revenuecat.com → Projects → API Keys

Usage Examples

Fetch Available Offerings

Purchases.shared.getOfferings { offerings, error in
  if let offerings = offerings, let current = offerings.current {
    // Display packages: monthly, annual, lifetime
    let packages = current.availablePackages
    
    // Show paywall with packages
    displayPaywall(packages: packages)
  }
}

Purchase a Subscription

Purchases.shared.purchase(package: selectedPackage) { transaction, customerInfo, error, userCancelled in
  if customerInfo?.entitlements["premium"]?.isActive == true {
    // User is now subscribed
    unlockPremiumFeatures()
  }
}

Check Subscription Status

Purchases.shared.getCustomerInfo { customerInfo, error in
  if customerInfo?.entitlements["premium"]?.isActive == true {
    // User has active subscription
  } else {
    // User is free tier
  }
}

API Access

For server-side analytics and automation:
curl -H "Authorization: Bearer $REVENUECAT_API_KEY" \
  "https://api.revenuecat.com/v1/subscribers/$APP_USER_ID"

Paywall A/B Testing

Test different pricing strategies, trial lengths, and paywall designs:
1

Create Offerings

Go to RevenueCat Dashboard → Offerings → Create Offering
  • Control: Monthly 9.99,Annual9.99, Annual 69.99
  • Variant A: Monthly 7.99,Annual7.99, Annual 59.99 (lower price)
  • Variant B: Annual $79.99 only (annual-only)
2

Set Up Experiment

Go to Experiments → Create Experiment → Select offerings → Set traffic split (33/33/33)
3

Implement in App

// RevenueCat automatically assigns users to experiments
Purchases.shared.getOfferings { offerings, error in
  // User sees control or variant based on assignment
  let current = offerings?.current
}
4

Analyze Results

View conversion rate, revenue per user, and LTV by variant in the dashboard

Integration with ASO Skills

monetization-strategy

Uses RevenueCat for:
  • Current MRR and growth trend
  • Trial-to-paid conversion rate
  • Churn rate by plan
  • LTV for CAC calculations
  • Optimal pricing recommendations

retention-optimization

Uses RevenueCat for:
  • Subscription churn patterns
  • Cancellation reasons (via webhooks)
  • Win-back campaign targeting (churned user lists)
  • Revenue retention curves

ua-campaign

Uses RevenueCat for:
  • LTV by acquisition source (via attributes)
  • ROAS calculation
  • Payback period by channel
  • Campaign optimization based on subscription value

app-analytics

Uses RevenueCat for:
  • Real-time subscription events
  • Revenue funnels
  • Subscription cohort analysis
  • Cross-platform revenue aggregation

When to Use RevenueCat vs App Store Connect

NeedRevenueCatApp Store Connect
Real-time subscription eventsDelayed
Paywall A/B testing✓ Paywalls SDK
Cross-platform (iOS + Android)iOS only
Cohort revenue analysisBasic
Churn analysis✓ DetailedBasic
LTV prediction
Refund handling✓ AutomaticManual
Grace period handling✓ AutomaticManual
Free tier✓ $2.5K MRR

Best Practices

Entitlements

Use entitlements (not products) to unlock features:
// Good: Check entitlement
if customerInfo.entitlements["premium"]?.isActive == true {
  unlockFeatures()
}

// Bad: Check specific product ID
if customerInfo.activeSubscriptions.contains("monthly_999") {
  unlockFeatures()
}
This allows you to change product IDs or add new products without code changes.

User Attributes

Set attributes for cohort analysis:
Purchases.shared.setAttributes([
  "acquisition_source": "facebook_ads",
  "campaign_id": "holiday_2024",
  "user_segment": "power_user"
])

Webhooks

Set up webhooks for real-time events:
  • INITIAL_PURCHASE — First subscription
  • RENEWAL — Successful renewal
  • CANCELLATION — User cancelled
  • BILLING_ISSUE — Payment failed
  • EXPIRATION — Subscription ended
Use webhooks to:
  • Send thank-you emails
  • Trigger win-back campaigns
  • Update user status in your database
  • Send to analytics platforms

Trial Strategy

Test different trial lengths:
  • 3 days: Quick decision, higher intent
  • 7 days: Standard, balanced
  • 14 days: More time to engage, higher conversion
  • 30 days: Premium apps, high LTV
A/B test to find optimal trial length for your app.

Resources

Build docs developers (and LLMs) love