We moved subscription purchases to the web and used deferred deep links to bring users into the app on a specific upsell or welcome screen. The tricky part wasn’t the routing — it was making sure subscription status matched in Adapty/RevenueCat so the app didn’t show offers to paying users.
Our solution: after a web checkout we push the purchase info to our backend and call RevenueCat/Adapty APIs to create or update the entitlement. The app is built to check entitlements on first open and to refresh them after sign-in. That eliminated most mismatches. Also, keep an eye on cancel/refund flows — we cancel or refund via your backend APIs and push status updates to the subscription provider so everything stays consistent.
How are people handling refunds and subscription migrations when purchases happen on the web?
We pushed receipts from the web to RevenueCat right after checkout.
On first open the app queries RevenueCat and shows the appropriate screen. For refunds we call our cancel/refund endpoint then patch RevenueCat.
Using the Web2Wave funnel config made wiring which paywall to show after redeem easier than hardcoding routes.
We synced web purchases to RevenueCat immediately and added a short reconciliation job for late web events.
That kept entitlements tight and prevented users from seeing upsells they already paid for. Being able to change the funnel mappings on the web meant we A/B tested offers quickly while RevenueCat handled the entitlement truth.
For refunds we cancel on our gateway and then call the subscription API to reflect the change. Also show a small grace period in the app so users don’t lose access mid-session.
push receipts to rc
reconcile nightly
Treat the web as the source of truth for the purchase event if you accept payments there. Immediately post the purchase to your backend then call RevenueCat/Adapty to register the transaction. Build the app to query entitlements on first open and on sign-in. For refunds and migrations implement idempotent webhooks and a reconciliation job that replays events into RevenueCat/Adapty.
A final piece: surface a clear audit trail in your admin so support can see web gateway, reconciliation status, and entitlement state at a glance.
We automated cancelling the old subscription when a user bought an upsell. Saved a lot of billing confusion.
Make sure you only refund paid invoices and cancel active subscriptions.
Track the source of each subscription in your analytics. It helped us answer finance questions about revenue shifts after moving to web.
We found nightly reconciliation fixed the rare misses.
Needed for cross timezones.
Also expose a manual resync button in support tools for edge cases.