Why Your RevenueCat Numbers Don't Match Your Ad Platform — And What It Costs You
2026
.
3
.
21
By
Team Airbridge
Trends & Insights
Why Your RevenueCat Numbers Don't Match Your Ad Platform — And What It Costs You
2026
.
3
.
21
By
Team Airbridge
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."
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. 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.
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. An MMP applies last-click deduplication across channels. 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
Churn is 30% faster — users who subscribed out of curiosity leave sooner once the novelty fades
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. 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.
How Core Plan Closes the RevenueCat–Ad Platform Gap
Core Plan includes native S2S integration with RevenueCat and Adapty in the base offering. Subscription events flow from RevenueCat into attribution — connecting the billing data RevenueCat collects to the acquisition data your ad channels report.
With this connection in place, the reports change. Funnel reports show install → trial → paid by Meta, Google, Apple Search Ads, and TikTok — so you can see which channel's installs actually convert, not just which channel has the lowest CPI. Revenue reports map subscription revenue back to the acquiring channel. The 86.4% renewal rate stops being an aggregate number and becomes a channel-level metric you can act on.
25 predefined subscription-optimized standard events — including Start Trial, Subscribe, and Unsubscribe — are already defined. The events RevenueCat sends map directly to Core Plan's standard event schema without custom configuration.
Core Plan vs Traditional MMP: Connecting RevenueCat to Ad Channels
Both traditional MMPs and Core Plan support RevenueCat integration. The difference is where billing integration and subscription reporting sit in the pricing structure.
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.
By clicking “Accept All Cookies”, you agree to the storing of cookies on your device to enhance site navigation, analyze site usage and assist in our marketing efforts.
By clicking “Accept All Cookies”, you agree to the storing of cookies on your device to enhance site navigation, analyze site usage and assist in our marketing efforts.