How do I attribute growth across multiple apps?
Last updated: July 24, 2026
From the SoleOS answers series — written about our own product space; grounded in published definitions and documented behavior, never invented numbers.
You attribute growth across multiple apps by refusing to trust the combined number: break MRR and signups down per product first, then per acquisition channel within each product, so you can see which app actually moved and why. The hard part isn't the math — it's noticing when one app's growth is really another app's cross-promotion showing up in the wrong place. A basic spreadsheet with a row per app, updated weekly, gets you most of the way there.
Why the portfolio total alone misleads
A single combined MRR line is the easiest thing to look at and the easiest thing to misread. If you run three apps and the total is flat, that could mean nothing is happening — or it could mean one app is quietly bleeding churn while another is adding roughly the same amount from a feature launch. The total cancels those two stories out and shows you a flat line that describes neither app.
The same trap works in the other direction. A portfolio total that's up this month feels like good news, but if that entire gain came from one app and the other two are flat or declining, you'd make a bad call by assuming "growth" is broad-based and safe to coast on. You'd miss the app that needs attention right now, because the good news up top is drowning it out.
The fix isn't complicated: look at each product's revenue and user trend on its own line before you ever look at the sum. The portfolio total is a useful headline for a monthly gut-check, not a diagnostic tool. Diagnosis happens one product at a time.
Attribute to the right product — and the right channel
Once you're looking per product, the next question is why that product moved. A jump in signups for one app could come from an App Store feature, a Product Hunt post, a Reddit thread, an ad you're running, or organic search finally kicking in for content you published months ago. Each of those has a completely different implication for what you should do next — an App Store feature is temporary and worth riding while it lasts; organic search growth is compounding and worth investing in further; a paid ad spike tells you nothing about product quality, only about spend.
Getting this right means tagging acquisition channel at signup, not reconstructing it later from memory. If your signup flow, landing pages, or app store connect metadata can carry a source parameter (UTM tags for web, referrer info for app installs, a simple "how did you hear about us" field if nothing else is available), capture it at the moment of signup. Reconstructing channel after the fact is unreliable — you'll misattribute half of it and won't know which half.
The two axes — which product, which channel — are what let you say something specific like "App B's signups this week are mostly organic search, App C's are mostly a paid campaign" instead of a vague "things are up." Only the specific version tells you what to do next.
The shared-audience problem: when your own apps cross-promote
Running several products under one identity creates an attribution problem unique to portfolios: your apps can drive traffic to each other. A launch, a newsletter mention, or an in-app cross-promotion banner in App A can send a burst of signups to App B — and if you're not tracking that as its own channel, those signups get misattributed to whatever channel happened to be active that week, usually "organic," which quietly overstates App B's organic pull.
This matters because it can lead you to double-invest in the wrong place. If App B's "organic" growth is really App A's audience being recycled, and you conclude App B has strong standalone organic traction and pour more time into its SEO or content, you may be optimizing a channel that barely exists independent of App A. Conversely, if App A's cross-promotion is the thing actually driving App B's growth, that's worth knowing too — it means your real lever for App B isn't in App B at all, it's in App A's audience and how you point it.
The practical move is to treat cross-promotion as its own explicit channel, tagged distinctly from paid, organic, or referral, whenever a signup's source can be traced to one of your other products (a link from App A's site, an in-app banner, a shared email list). If you can't trace it precisely, a rough heuristic works too: note the dates you ran a cross-promotion push, and look for signup bumps in the other app around those same dates before crediting them to anything else. For more on managing the operational side of running several apps at once, see how to manage multiple side projects.
Simple attribution for a solo founder
You don't need a data warehouse for this. A spreadsheet with one row per app and columns for month, MRR, new signups, churned users, and acquisition channel breakdown covers the core of it. The discipline that makes it work is updating it on a fixed schedule — weekly or monthly — rather than only when something looks off, because trends are only visible in a series, not a single snapshot.
The minimum useful version:
- One row per product per period (weekly or monthly, pick one and stay consistent).
- MRR and net new users for that product in that period, not cumulative totals.
- A rough channel split for new signups — even three buckets (organic, paid, cross-promotion/referral) beats none.
- A short note on anything unusual that period (a launch, a price change, a feature release, a cross-promo push) so a spike or dip has context six months later.
From there, comparing per-product trends side by side — rather than staring at one product's line in isolation — is what surfaces the real signal: which app is accelerating, which is flat, and which is declining while the total quietly hides it. This is also the point where it's worth revisiting which side project to focus on with your next block of time.
If you'd rather not maintain the spreadsheet by hand, tools built for exactly this — including SoleOS's own per-product dashboards and channel tagging — exist to pull the numbers automatically instead of you copying them over each week; you can see how that looks in the demo or check the connectors for the data sources it can pull from directly.
Using attribution to decide where your time goes
Attribution only matters if it changes what you do next. Once you can see, per product, which channel is producing signups and which is producing revenue, the allocation question gets much more concrete: keep investing in whichever product's organic or content channel is compounding, treat cross-promotion wins as a signal to invest more in the app doing the promoting rather than the one receiving the traffic, and be honest about a product whose only growth this quarter came from a one-time spike that won't repeat.
The output of this exercise isn't a report — it's a decision about where the next week of work goes. If two apps look flat and one is clearly compounding on an owned channel, that's your answer. If the flat ones only look flat because a cross-promo boost from another app expired, that's a different answer: the underlying app might be healthier than the recent numbers suggest, and the real problem is that you haven't replaced the channel that used to feed it.
Frequently asked questions
How often should I check per-product attribution?
Monthly is enough for most solo founders; weekly is worth it only while you're actively running a launch or campaign and want to catch a channel shift early. What matters more than frequency is consistency — checking on a fixed schedule so you can compare periods, rather than only checking when the total looks off.
What if I can't tag acquisition channel for app installs?
Store-level attribution is limited on iOS in particular, so treat what you can capture (referral links, promo codes, UTM-tagged landing pages, a lightweight in-app survey) as directional rather than exact. Even a rough three-bucket split — organic, paid, cross-promotion — beats no channel data at all, because it still lets you compare trend direction across products.
How do I know if a signup is really cross-promotion and not organic?
If you can't trace it directly through a link or code, the reliable proxy is timing: check whether the signup bump in one app lines up with a launch, email, or in-app banner push in another app around the same dates. A correlation that keeps repeating across multiple cross-promo pushes is a strong signal, even without a perfect trace.
Does a spreadsheet really work, or do I need dedicated software?
A spreadsheet with a row per app, updated on a fixed schedule, does the core of what's described here, and for one or two apps that's often enough. It gets harder to keep current once you're tracking several apps across multiple channels by hand every week — that's the point where dedicated portfolio tracking starts saving more time than it costs, though a spreadsheet on a good habit will outperform any tool used sporadically.
This guide was published by SoleOS, portfolio intelligence software for solo founders running multiple apps.