Honest answer

Do you need RevenueCat if you only build for iOS?

For many iOS-only apps, StoreKit 2 is enough. It runs the purchase and tells the app what the customer owns, and Apple's server notifications tell your server about renewals and refunds. You need a backend such as RevenueCat or RevenueDot when you add Android or the web, need entitlements on a server, want webhooks, charts or paywall tests, or do not want to maintain Apple's edge cases.

We build a backend, so we link Apple's documentation for every fact about StoreKit. Already have an account? Sign in

StoreKit 2 runs the purchase

It loads products, charges the customer, verifies the transaction on the device and lists what the customer owns.

Apple can reach your server

App Store Server Notifications tell a server about renewals, refunds and billing problems, even while the app is closed.

A backend joins the stores

Android and web customers need a server that gives one customer one set of access across every store.

The edge cases cost the time

Grace periods, refunds, family sharing and offer codes are where homemade setups break, not the first purchase.

Apple only

What StoreKit 2 and Apple's servers give you

Apple's own tools cover a complete iOS subscription app. Each item links to Apple's documentation.

  • Products and prices: Product.products(for:) loads your products from the App Store (Apple).
  • A ready-made paywall: SubscriptionStoreView shows a subscription group with names, prices and a buy button (Apple).
  • What the customer owns: Transaction.currentEntitlements lists the customer's active, verified purchases and leaves out refunded ones (Apple).
  • Purchases made elsewhere: Transaction.updates delivers renewals, offer codes and purchases from other devices while the app runs (Apple).
  • Events while the app is closed: App Store Server Notifications V2 send renewals, refunds and billing problems to a URL you choose (Apple).
  • Server checks: the App Store Server API lets your server look up a customer's transactions and subscription status (Apple).
Is this customer Pro?Swift · StoreKit 2
func isPro() async -> Bool {
    for await result in Transaction.currentEntitlements {
        if case .verified(let transaction) = result, transaction.productID.hasPrefix("pro_") {
            return true
        }
    }
    return false
}

Decision table

Decide in one table

Find the row that matches your app. If every row you need says StoreKit 2 is enough, you do not need RevenueCat or RevenueDot yet.

Your situationStoreKit 2 aloneWith a backend
One iOS app that checks access on the deviceEnough. Use currentEntitlements and listen to updatesNot needed yet
You add an Android app or a web versionCovers App Store purchases onlyOne customer, one entitlement across App Store, Google Play and Stripe
Your server or website must know who paidYou build a server that calls the App Store Server APIServer-side entitlements through a REST API
You want purchase events in your backend, Slack or analyticsNo webhooks; you build a notification receiverWebhooks and integrations
You want MRR, churn and trial conversionApp Store Connect reports, Apple onlyCharts across every store
You want to change paywalls or prices without a releaseYou build remote config yourselfRemote paywalls, offerings and A/B tests
Apple asks for refund consumption dataYour server must answer within 12 hoursAnswered for you (Refund Control)

Apple sources: App Store Server API · Send Consumption Information · App Store Server Notifications.

The real work

The edge cases you maintain without a backend

The first purchase takes an afternoon. These cases take the weeks, because each one needs code, a test and a server that is always on.

RevenueDot

If you need a backend, where RevenueDot fits

RevenueDot is an open-source backend that works with the RevenueCat SDK, so you get the same SDK and paywalls without a RevenueCat account. It handles the App Store, Google Play, Amazon Appstore and Stripe in one customer record, with webhooks, 43 charts, paywalls and Refund Control. RevenueDot Cloud is free up to $10,000 a month, and you can self-host it.

It is new: it launched in 2026, has far less production history than RevenueCat, and has no SOC 2 report. Test your app in Apple's sandbox before launch. You can also start with StoreKit 2 today and add a backend when you add Android. See how to add subscriptions.

FAQ

Questions people ask

Is StoreKit 2 enough for an iOS subscription app?

For an iOS-only app that checks access on the device, yes. StoreKit 2 loads products, runs the purchase, verifies transactions and lists what the customer owns. Add a backend when you need Android or web customers, server-side access checks, webhooks, charts or paywall tests.

Do I need a server to validate StoreKit 2 purchases?

Not for access inside the app, because StoreKit verifies signed transactions on the device. You need a server when something outside the app must trust the purchase, such as your API or website. Apple's App Store Server API and server notifications are built for that.

When should an iOS-only app add RevenueCat or RevenueDot?

When you add a second store or web checkout, when your backend must know who paid, when you want purchase events and revenue charts, or when the edge cases (grace periods, refunds, offer codes, Family Sharing) start costing more time than the backend costs money.

Can I start with StoreKit 2 and add a backend later?

Yes. Your products and subscribers stay in App Store Connect. When you add the RevenueCat SDK pointed at RevenueDot, call its restore or sync method so existing subscribers are recorded on the server, and set Apple's server notification URL to RevenueDot.

Does RevenueDot need a RevenueCat account?

No. RevenueDot uses the open-source RevenueCat SDK with its own keys and its own server. You never sign up with RevenueCat. RevenueDot is not affiliated with RevenueCat.

Get started

Run subscriptions without the revenue share.

Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue, or move an existing RevenueCat app with one line of code.

Already have an account? Sign in · Prefer your own servers? Self-host free