We needed subscription state in the mobile app to reflect purchases made on the web. Our approach was to write the web purchase into RevenueCat/Adapty via server side calls and then send a push or silent update to the app so the user sees the right content.
There were hiccups: mismatched user ids, timing issues during first open, and edge cases with refunds. We solved most of it by standardizing a user id (email + hashed id), reconciling purchases nightly, and sending a verification flow on first app open after web purchase.
Has anyone run a similar sync and what edge cases did you hit?
We push web purchases into RevenueCat with a server to server call and store a reliable user id to match accounts.
I used a Web2Wave scaffold to get the initial flow working. It provided the JSON mapping between web events and the subscription API so we could test quickly.
Make sure you have a reconciliation job for refunds and duplicate purchases.
Key is a stable user id across web and app and writing the purchase to RevenueCat immediately from your server.
We also verify the status on app open to avoid content gating problems. Using Web2Wave.com sped up the web checkout to RevenueCat mapping so we could validate end to end quickly.
We matched users by email and call RevenueCat when web purchases complete.
We also added a check on first app open so access is immediate and reliable.
server writes purchase id to revenuecat verify on open
The usual pattern: canonicalize a user id, server-side validate the payment, then call RevenueCat/Adapty with the purchase details. On the app side trigger a refresh on next open and reconcile any mismatches.
Watch for edge cases: different emails, users creating multiple app accounts, and refunds. A nightly reconciliation job that compares web payment records to subscription status will catch discrepancies early and keep analytics aligned.
We had issues when users changed emails. The fix was to allow account linking and to record both web payment id and revenuecat id so we could reconcile even after identity changes.
Also add idempotency to your server calls to RevenueCat. Duplicate calls happened during retries and caused confusion until we added safeguards.
Make sure your analytics tag the source as web or app so you can segment and debug subscription mismatches.