We needed a single source of truth for entitlement. Early on we had web purchases that the app did not recognize, and some users accidentally paid twice.
We solved it by issuing a web receipt record and a unique customer id at checkout. The app, on sign in, queries our backend for receipts and entitlement status. If a web purchase exists, we provision access immediately and avoid asking the user to buy in the app. Integrations like RevenueCat or Adapty helped us keep analytics aligned, but the core is a reliable server side mapping between web payment and app user.
How do you handle edge cases where the user creates a new account in the app instead of signing in after web checkout?
We force an email confirmation step after checkout and show a prominent ‘open app and sign in’ CTA.
If the user makes a new app account we merge based on email. I used an SDK to accept the web receipt JSON and reconcile it server side. It reduced duplicate purchases.
Make sign in unavoidable after checkout. Our funnel blocks the download CTA until account creation and confirmation.
For reconciliation we push a receipt to RevenueCat and our backend. That kept analytics and entitlements consistent and prevented double billing.
We added a clear step: ‘already bought on the web? sign in here’.
Also auto link by email when they register in the app. Fewer support cases.
Merge by email. Block in app buys if web receipt exists.
Double billing stems from mismatched identity. Force identity capture at checkout and make it the key for entitlement sync. On the backend, store a canonical customer id, the web receipt, and a reconciliation status. When the app signs in, check for pending web receipts and provision access before showing any paywall.
Use RevenueCat or Adapty as a mirror for analytics, but keep the authoritative record in your backend. Design a flow for account merges and flagged duplicates and automate as much as possible to cut support costs.
We had a merge tool in support that combined app accounts with web purchases. Saved many refunds.
Also consider showing an in‑app message if a user opens the app with the same email that bought on web. That reassures users and reduces duplicate purchases.
Prevent new app account creation until email verification from checkout completes.
If a new account is created offer an easy merge path in settings.