RevenueCat vs Adjust: Which One Tells You Your Real LTV?
RevenueCat and Adjust answer different questions. Here's what each one actually knows, why their revenue numbers disagree, and when you need both.
The question gets typed as versus. The honest answer is and — but not because both are nice to have. Because each one is structurally blind to what the other sees, and the gap between them is where subscription apps lose money.
Here's what each actually knows, why their revenue numbers never match, and how to decide whether you need both.
What Adjust knows: where the user came from
Adjust is a mobile measurement partner. Its job is attribution — connecting an install to the ad that caused it.
- Install attribution across every network, deterministic where possible and probabilistic where it isn't.
- SKAdNetwork postback handling — receiving, decoding, and aggregating the postbacks that iOS gives you instead of user-level data.
- Fraud detection — click spam, install hijacking, SDK spoofing. On incentivized and programmatic networks this is not optional.
- Deep linking and re-engagement attribution.
- Cost aggregation from ad network APIs.
What Adjust does not have is a direct line to the store's billing ledger. It knows what your app told it happened. If your SDK fires purchase on a trial start, Adjust believes a purchase happened.
What RevenueCat knows: what the user actually paid
RevenueCat sits between your app and the app stores. It reconciles against store receipts.
- Realized revenue — transactions that cleared, not events your app reported.
- The full subscription lifecycle — trial start, conversion, renewal, grace period, billing retry, cancellation, churn.
- Refunds, netted against the period the transaction belongs to.
- Proceeds — revenue after estimated store commission and taxes, as a distinct figure from gross.
- Cohorts and realized LTV, sliced by days since first seen.
What RevenueCat does not have is attribution. Out of the box it doesn't know a subscriber came from a TikTok video, unless something tells it — an MMP, or Apple's AdServices token for Search Ads.
Side by side
| Adjust | RevenueCat | |
|---|---|---|
| Which ad drove the install | ✅ | Only via MMP or AdServices |
| SKAN postback handling | ✅ | ❌ |
| Ad fraud detection | ✅ | ❌ |
| Deep linking | ✅ | ❌ |
| Ad spend / cost data | ✅ | ❌ |
| Store-verified revenue | ❌ | ✅ |
| Trial → paid conversion | Only what the SDK reports | ✅ |
| Renewals and churn | Partial | ✅ |
| Refunds netted | ❌ | ✅ |
| Revenue after store cut | ❌ | ✅ |
| Realized LTV by cohort | Modeled | ✅ |
Read the two columns as one row and the architecture is obvious: Adjust owns the left side of the equation, RevenueCat owns the right side, and ROAS is the division.
Why their revenue numbers disagree
If you connect them and the numbers don't match, it's almost always one of four things — in this order of likelihood.
1. Reporting mode. The revenue value RevenueCat forwards is what drives Adjust's ROAS. If RevenueCat is set to send proceeds and you're comparing against a RevenueCat chart showing gross, you'll see roughly a 30% gap and chase it for a week. Match the mode on both sides first.
2. Attribution window. Adjust assigns revenue to an install based on its attribution window. RevenueCat assigns it to a customer's first-seen date. A user who installs in March and subscribes in May sits in different buckets.
3. Trial events. If your app fires a revenue event on trial start and RevenueCat only counts paid conversions, Adjust will show more transactions at lower average value.
4. Refunds. RevenueCat reverses them. Once an event is in Adjust, it generally stays there.
None of these are bugs. They're definitional differences, and you settle them once by writing down which definition you use for which report.
Do you actually need both?
Apple Search Ads only, subscription app. RevenueCat alone can work. AdServices gives you campaign, ad group, and keyword IDs without an MMP in the path. Add an MMP when you add a second network.
Two or more paid networks. You need both. There is no honest cross-network ROAS without attribution, and no honest revenue without store reconciliation.
Heavy programmatic or incentivized spend. You need both, and you need the MMP specifically for fraud. RevenueCat will happily report realized revenue from users a fraud network claimed credit for.
Organic-led, small paid budget. RevenueCat first. An MMP is expensive infrastructure for attributing a budget that doesn't need optimizing yet.
Systems required before cross-network subscription ROAS is trustworthy
Attribution on one side, store-verified revenue on the other
The third problem neither one solves
Say you've done it properly: Adjust attributing, RevenueCat reconciling, events flowing between them. You still can't answer the question you actually have on Monday morning — which campaign should get more budget this week?
Because the spend lives in seven ad platforms, the attribution lives in Adjust, the revenue lives in RevenueCat, and joining them is a manual export. (For the aggregate version of that join, there's our blended ROAS calculator.) Most UA teams end up rebuilding that join in a spreadsheet every week, which is why most UA teams reallocate budget on gut feel by Wednesday.
- Adjust answers 'where did this user come from'. RevenueCat answers 'what did they pay'. Neither answers the other.
- RevenueCat has a native Adjust integration that forwards subscription lifecycle events — this is the supported path, not a workaround.
- When revenue disagrees, check reporting mode first; it explains most gaps on its own.
- One network and subscriptions? RevenueCat may be enough. Two or more, or any programmatic spend? You need both.
- Having both still leaves the join — spend in seven platforms, revenue in one — unsolved.
Where Roasy fits
Roasy isn't a third attribution tool and doesn't ask you to replace either one. It connects to your ad networks, your Adjust account, and your RevenueCat project, and puts spend, attribution, and realized cohort revenue in one table — with a single revenue definition applied across every network.
The math is the same one you'd build yourself, laid out in how to calculate true ROAS from RevenueCat. The difference is that it's there when you open the tab.
Berk Aydın
Performance Marketing Lead at Roasy. Writes about ROAS, retention, and the messy economics of mobile UA.