All insights

Mobile · Monetization

In-App Subscriptions Without the Pain

Subscriptions look like a solved problem — both stores provide APIs, how hard can it be? Harder than any other 'standard' mobile feature, it turns out. Here's how we implement subscriptions in apps like Invoice Guru, and why we stopped building this layer by hand.

Why subscriptions are deceptively hard

The happy path — user taps buy, store dialog, feature unlocks — is a week of work. Everything around the happy path is the actual project: receipt validation that can't be spoofed, restoring purchases on a new phone, a user who subscribed on iOS opening the app on Android, refunds, billing-retry grace periods, family sharing, expired cards, and the store-specific quirks of each of those on two platforms that model subscriptions differently.

Getting these wrong has a special property: every bug is either a paying user locked out of what they paid for, or a non-paying user getting product for free. Both cost real money and trust, and both tend to surface in one-star reviews rather than bug reports.

Why we use RevenueCat instead of hand-rolling

For subscription apps we build — Invoice Guru among them — we use RevenueCat as the subscription layer rather than talking to StoreKit and Google Play Billing directly. The reasoning is the same build-vs-buy logic we apply everywhere: this layer is undifferentiated heavy lifting, identical for every app, with an enormous edge-case surface that a specialized vendor handles better than any product team will:

  • One API over both stores — entitlements ('does this user have pro?') replace platform-specific receipt logic in app code
  • Server-side receipt validation out of the box — the check users can't spoof, without building your own validation backend
  • Cross-platform entitlements — subscribe on iOS, keep access on Android, with no custom account plumbing
  • The edge cases — grace periods, refunds, upgrades, restores — handled once by people whose whole product is these edge cases
  • Revenue analytics and churn data for free, which the business side will ask for the week after launch

The store rules you must design around

Digital-goods subscriptions must use the stores' in-app purchase systems — routing around Apple's commission with an external payment link inside the app is a rejection (or removal) waiting to happen. The commission is real: 30% headline, 15% for most small businesses via the small-business programs, and the pricing model needs to absorb that from day one rather than discover it at the first payout.

The stores also regulate the subscription UX itself: what a paywall must disclose, how trials convert, how cancellation must work. Apple in particular rejects apps for paywalls that obscure the price or the renewal terms. Designing the paywall to be honest isn't just compliance — clear paywalls measurably convert better than clever ones.

Product advice that outlasts the plumbing

The technical layer is buyable; the product decisions aren't. What should be free forever, what's behind the subscription, and where the paywall appears in the user journey determine revenue more than any implementation detail. Our general guidance: let users experience the core value before the paywall — a user who has created their first invoice understands what they're paying for; one who hits a wall on first launch doesn't. Price against the value delivered, not against your costs. And instrument everything from day one, because paywall placement is a hypothesis you'll revise.

Takeaways

  • The happy path is a week; the edge cases are the project. Every subscription bug costs money or trust directly.
  • Buy the undifferentiated layer: RevenueCat-style entitlements beat hand-rolled StoreKit + Play Billing for almost every app.
  • Design pricing around store commissions (30%/15%) from day one — and never route digital goods around the stores' IAP.
  • Honest paywalls are both compliance and conversion: clear price and terms outperform clever obscurity.
  • Let users reach core value before the paywall, and instrument it — placement is a hypothesis, not a decision.

Building something where this matters?

This is how we work on every project — mobile, web, and AI. If you want a team that reasons this way about your product, let's talk.

Get a free estimate