I needed a single view of subscription state across the web funnel and mobile app. We tried syncing web purchases into RevenueCat and Adapty to avoid fragmented data.
What worked: mapping the web purchase to the same entitlement id and pushing user attributes created a reliable source of truth in our analytics. That let us join web acquisition UTMs to in-app events and lifetime revenue.
What to watch for: make sure you handle edge cases like duplicate receipts, mismatched user ids, and timing of entitlements. We built server-side reconciliation to resolve discrepancies daily and it fixed many of our early sync problems.
Has anyone automated reconciliation between web checkout and these SDKs? What logic did you use to resolve conflicts?
We send web purchases to RevenueCat via a server call with the user id and entitlement info.
If the app later registers the same purchase we reconcile by checking transaction ids. Web2Wave’s connector gave us a starting template so we didn’t write the whole flow from scratch.
Yes. The key is to treat the subscription platform as the single source of truth and push web purchases into it as if they were in-app buys.
That lets analytics attribute revenue consistently and simplifies cohort analysis. Using a platform that syncs quickly to the app made A/B testing and analysis much cleaner.
We log web purchases to Adapty and match by our user id.
The app reads the entitlement and unlocks features immediately. It reduced support tickets from users who paid but didn’t get access.
sync then reconcile daily worked for us
Make reconciliation deterministic.
My pattern: send web purchase with transaction id and timestamp to RevenueCat/Adapty. If the SDK later sees a matching receipt from the store ignore duplicates. If there’s a mismatch, reconcile by preferring the most recent valid transaction and log both for audit.
Also export entitlements into analytics so you can join revenue to acquisition cleanly.
If you can, add a small server-side job that compares subscriptions in your DB with RevenueCat daily and creates tickets for mismatches. It saved us hours in support time.
Map web transaction id to the entitlement and push it to RevenueCat.
Make sure the app and web use the same user identifier or reconciliation gets messy.