Why Your RevenueCat Numbers Don't Match Your Ad Platform — And What It Costs You

Why Your RevenueCat Numbers Don't Match Your Ad Platform — And What It Costs You
Meta Ads Manager says your ROAS is 3.2x. RevenueCat says you added 40 subscribers last month at $9.99/month. You multiply 40 by $9.99, get $400 in subscription revenue, and compare it to your $2,000 ad spend. That is a 0.2x ROAS — not the 3.2x Meta is reporting.
The numbers do not reconcile because they were never designed to. Meta counts view-through conversions using its own attribution model. RevenueCat records billing events from Apple and Google servers. These two systems measure different things, at different times, using different definitions of "conversion."
Key Takeaways
- A 10–15% install discrepancy compounds to 40–60% at the subscription level. Each funnel step — install → trial → paid → renewal — adds its own gap.
- Three structural causes drive the mismatch: self-attributing networks count their own conversions, attribution windows close before trials end, and billing events happen on servers RevenueCat sees but ad platforms do not.
- AI app ROAS is especially distorted. Trial-to-paid may look strong, but 30% faster churn means the revenue your ROAS calculation assumes will not materialize.
- Health & Fitness active renewal rate is 86.4% — highest among app categories (RevenueCat, State of Subscription Apps 2025). But without channel-level data, you cannot see which channels drive renewers vs churners.
- Connecting RevenueCat to ad channels requires an MMP with S2S billing integration — not more dashboard tabs.
A 10% Install Gap Becomes a 60% Revenue Gap
At the install level, the discrepancy between your ad platform and your actual data is often 10–15%. Meta reports 1,200 installs. Your MMP shows 1,020. Most teams accept this as normal — and at the install level, it is.

But subscriptions are not installs. Every step in the funnel — install → trial start → trial-to-paid → first renewal — introduces its own discrepancy layer:
- Install → Trial: Not every install starts a trial. The trial start rate differs by channel, but your ad platform does not report trial starts.
- Trial → Paid: Conversion happens after the attribution window closes. The ad platform counts it as its own conversion; the billing system does not.
- Paid → Renewal: Renewal happens server-side, weeks or months later. No ad platform tracks this.
A 10–15% discrepancy at the install level can reach 40–60% by the time you compare ad platform revenue claims to actual subscription revenue in RevenueCat. The numbers diverge more as the funnel deepens — not less.
Three Structural Reasons the Numbers Never Match
The mismatch between RevenueCat and your ad platform is not a tracking bug. It comes from three architectural layers that each produce their own version of "the truth."

- Self-attribution vs deduplication. Meta, Google, and TikTok are self-attributing networks — they report their own conversions, including view-through attribution, without cross-channel deduplication. Each SAN only sees its own slice of the funnel and claims credit accordingly. An MMP has visibility across all channels at once — it sees installs from Meta, Google, and TikTok in a single view and deduplicates. Both are technically correct within their own definitions. The numbers will never match because the definitions do not match.
- Attribution window vs trial period. A 7-day attribution window cannot capture a subscription conversion from a 14-day free trial. The ad platform counts the install as attributed, but the subscription — which happens on day 14 — falls outside the window. RevenueCat records the subscription. The ad platform already closed the book.
- Billing events live on different servers. Subscription state changes — Start Trial, Subscribe, Renew, Cancel — are processed by Apple App Store and Google Play billing servers. RevenueCat captures these via its SDK and server-side listeners. Ad platforms have no access to these billing servers. The result: RevenueCat knows who subscribed, the ad platform knows who clicked — but no system connects the two without an intermediary.
RevenueCat's own documentation acknowledges data discrepancies driven by IDFA availability, event delivery timing, and SDK configuration differences. These are not bugs to fix — they are structural realities to work around.
The AI App ROAS Illusion
For AI-powered subscription apps, the mismatch is even more deceptive.
Trial-to-paid conversion may look strong — the novelty of AI features drives initial signups. But the downstream metrics tell a different story:
- Revenue per payer is 41% higher than non-AI subscription apps — meaning higher price points and more price-sensitive users (RevenueCat, State of Subscription Apps 2025)
- Churn is 30% faster — users who subscribed out of curiosity leave sooner once the novelty fades (RevenueCat, State of Subscription Apps 2025)
- ROAS calculations break because the revenue your ad platform assumes will persist over 12 months decays significantly faster
The problem is not just that ROAS is wrong — it is that you cannot tell which channel brings "AI curiosity subscribers" who churn after month 2 versus subscribers who stay. Without channel-level renewal data connected to acquisition source, every channel looks equally productive at the trial-to-paid stage and equally invisible at the renewal stage.
What the Mismatch Actually Costs
When RevenueCat data and ad platform data live in separate systems, every budget decision is based on incomplete information.
- Budget misallocation. Three months of pushing $10,000/month toward a channel with inflated ROAS — while starving the channel that actually produces long-term subscribers — costs $30,000 in misdirected spend. The cost is not the spend itself. It is the subscribers you did not acquire from the better channel.
- Invisible renewal rates by channel. Health & Fitness apps have the highest active renewal rate among all app categories at 86.4%. But this is an aggregate number. Some channels may drive users who renew at 90%+. Others may drive users who churn after the first billing cycle. Without RevenueCat subscription data connected to acquisition channels, you cannot see this difference.
- Annual vs monthly mix. Knowing which channel drives annual subscribers — your highest-LTV users — versus monthly subscribers changes your payback calculation entirely. This data exists in RevenueCat. It is not connected to your ad channels.
How to Connect RevenueCat to Your Ad Channels
RevenueCat does not attribute subscriptions to ad channels — that is not what it is designed to do. An MMP does not process billing events — that is not what it is designed to do. The connection requires both systems to exchange data.
- S2S integration between RevenueCat and your MMP. RevenueCat sends subscription events to your MMP via a server-to-server connection. This ensures billing events are captured regardless of whether the user opens the app.
- Attribution window ≥ trial period. Your MMP's lookback window must span the full trial-to-paid conversion cycle. A 7-day trial needs at minimum a 7-day window. Longer trials or grace periods need longer windows.
- Channel-level subscription reporting. Once RevenueCat events flow into your MMP, you need reports that break down install → trial → paid → renewal by channel, campaign, and creative — not just installs by channel and subscribers in aggregate.
What to Look for in an MMP to Connect RevenueCat to Ad Channels
Both traditional MMPs and newer alternatives support RevenueCat integration. The question is whether the features you need are accessible without enterprise pricing. Confirm these capabilities:
- RevenueCat S2S integration included in base. Not gated behind a higher pricing tier. Subscription events should flow into attribution from day one.
- Subscription funnel by channel in base reports. Install → trial → paid breakdown by acquisition source — without requiring an advanced analytics add-on.
- Revenue attribution by channel. Subscription revenue mapped back to the ad campaign that drove the install, included in standard reporting.
- Predefined subscription events. Standard events that map directly to RevenueCat's event schema — Start Trial, Subscribe, Unsubscribe — without custom configuration.
- Subscription-focused setup guidance. Onboarding designed for subscription app workflows, not general-purpose mobile app setup.
- Usage-based pricing with no annual lock-in. Pay per install, scale down when needed, and start with a free tier that includes full feature access.
The Numbers Will Never Match — But They Can Connect
Meta will always report different numbers than RevenueCat. Google will always count conversions differently than your billing system. The goal is not to make the numbers match. It is to connect them so you can see what each channel actually produces in subscription revenue.
The structural gap — self-attribution, timing mismatches, billing silos — is not fixable inside RevenueCat or inside your ad platform. It requires an intermediary that receives data from both sides. The question is whether that intermediary requires an enterprise contract, or whether it is accessible from day one.

Ready to transform your mobile growth?
Learn how Airbridge helps leading brands measure and optimize every touchpoint.


