How to track your revenue across Stripe, RevenueCat and more
Last updated: July 23, 2026
From the SoleOS answers series — written about our own product space; grounded in published definitions and documented behavior, never invented numbers.
Your revenue lives wherever the payment is taken — Stripe for a web SaaS, RevenueCat in front of the App Store and Play for a mobile app, a merchant of record like Paddle or Polar when you want tax handled, and the stores themselves for one-off app purchases. The job of "revenue tracking" is not to install more tools; it's to get one honest MRR and one honest gross number across whatever you already use. This guide walks each source — what it's for, how to read it, and why the totals never quite match.
Disclosure: SoleOS, which publishes this guide, is a dashboard that unifies exactly these sources — so we're biased. We've written it to be useful even if you never connect it.
Where your revenue actually lives
Before picking a tool, map your revenue by how the money arrives:
- Recurring web subscriptions → Stripe (or a merchant of record).
- Mobile app subscriptions / in-app purchases → the App Store and Google Play, best read through RevenueCat.
- Global sales where you don't want to handle tax → a merchant of record (Paddle, Polar, Dodo, Gumroad).
- One-off digital products → Gumroad or your MoR of choice.
Most multi-product founders end up with two or three of these at once. That's normal — and it's the entire reason revenue feels scattered.
Web SaaS: Stripe
For recurring web revenue, Stripe is the default. Two numbers matter and they are different:
- MRR — the monthly-normalized value of your active subscriptions. You compute it by summing each active subscription's amount, normalized to a month (a $120/yr plan is $10/mo of MRR). It's forward-looking: what you'll bill next month if nothing changes.
- Gross — the actual money that moved: succeeded charges minus refunds, over a period. It includes one-off payments that never show up in MRR.
How to read it well: watch MRR for the health of the subscription base and gross for cash reality. Connect via OAuth (Stripe Connect) rather than pasting secret keys, and only ever grant read access — nothing here needs write. If you sell internationally, remember Stripe reports in the charge currency, so a multi-currency business needs everything normalized to one currency before the numbers mean anything.
Mobile apps: RevenueCat in front of the stores
You can read Apple and Google's raw reports, but for subscription revenue it's painful: proceeds are net of the store's cut, reports lag, and the two stores format everything differently. RevenueCat sits in front of both and gives you clean MRR, active subscriptions, trials, and new customers across iOS and Android in one place.
How to use it: treat RevenueCat as the source of truth for subscription revenue and active subs on mobile, and use App Store Connect / Play Console for downloads and installs (a different metric — acquisition, not revenue). Don't double-count: if RevenueCat already reports the subscription, the store's revenue line is the same money seen from a different angle.
Global, tax-handled: a merchant of record
If you sell worldwide and don't want to register for sales tax and VAT in dozens of jurisdictions, a merchant of record (Paddle, Polar, Dodo, Gumroad) becomes the seller and handles all of it for a higher fee. The key reporting difference: a MoR reports revenue net of tax, because the tax was never yours — so its "revenue" number is legitimately lower than a raw Stripe gross for the same sale. That's not an error; it's the two tools measuring different things.
The reconciliation trap
Here is why your dashboards never agree, and why that's usually fine once you know the cause:
| Cause | Effect |
|---|---|
| Store fees | App Store/Play proceeds are ~15–30% below the sticker price; Stripe gross is before its ~3% |
| Tax | A MoR reports net of tax; raw Stripe gross includes what you'll owe |
| Currency | Multi-currency charges must be converted to one currency at a consistent rate |
| Timezone | "Today" differs by provider; a charge can land on different days in two tools |
| Refunds | Gross should be net of refunds; some views show pre-refund totals |
The fix is not to make them match to the penny — they can't. It's to pick one definition and apply it everywhere: choose MRR or gross, convert to one currency, decide net-or-gross-of-tax, and compare like with like.
MRR vs gross: decide before you compare
The most common self-inflicted confusion is mixing MRR and gross. MRR is recurring and forward-looking; gross is all money moved, backward-looking. A month with a big one-time sale has high gross and unchanged MRR — both are true. Pick the one that answers your question (MRR for subscription health, gross for cash) and don't average them together.
Seeing it as one number
Once you're past a single product on a single processor, the honest total requires pulling Stripe, RevenueCat, and maybe a MoR into the same definition — which is exactly what SoleOS does: it reads MRR and gross across your revenue sources, normalizes currency, and shows the portfolio number next to the traffic that drives it. See what it connects to and reads, or the metrics dictionary for each formula. And to be honest: if you run one product on Stripe alone, Stripe's own dashboard is all you need — the value here starts when the sources multiply and stop agreeing.
Frequently asked questions
What's the difference between MRR and gross revenue?
MRR is the monthly-normalized value of your active recurring subscriptions — forward-looking. Gross is the actual money that moved in a period (charges minus refunds), including one-off sales — backward-looking. They answer different questions and shouldn't be averaged together.
Should I read App Store revenue from Apple or from RevenueCat?
RevenueCat, for subscription revenue and active subscriptions — it's cleaner and unified across iOS and Android. Use App Store Connect and Play Console for downloads and installs, which are an acquisition metric, not revenue. Just don't count the same subscription twice.
Why is my merchant-of-record revenue lower than my Stripe number?
Because a merchant of record reports net of sales tax and VAT (the tax was collected on your behalf and remitted, so it was never your revenue), and its fees are higher. For the same sale, a MoR's revenue line is legitimately lower than a raw Stripe gross — different definitions, not an error.
How do I combine revenue from Stripe, RevenueCat, and a merchant of record?
Normalize first: pick MRR or gross, convert every currency to one, and settle net-or-gross-of-tax — then sum. Doing it by hand is fine for two sources; a portfolio dashboard is worth it once you're juggling three or more.
Do refunds reduce MRR?
Refunds reduce gross directly. They affect MRR only if they accompany a cancellation — a refunded-but-still-active subscription still counts toward MRR, while a churned one does not. This is another reason to be clear about which metric you're reading.