
How to see which acquisition channel drives subscription revenue
From UTM and campaign tags through trial and paid conversion: a practical guide to channel-level subscription revenue without optimizing CPI alone.
Media buyers optimize toward installs because installs are fast to measure. CFOs care about subscription revenue and payback. If your growth review cannot rank channels by trial starts, paid conversion, or revenue per install, you are flying blind on budget allocation.
This post walks through the full chain: UTM and campaign parameters → first open → trial → paid, MMP versus first-party pitfalls, a Rheo Analytics walkthrough, and how to turn readouts into Convert experiments and Engage campaigns.
Define the outcome before the channel
Channels are labels. Outcomes are money. Agree on primary metrics first:
| Stage | Example metric | Notes |
|---|---|---|
| Top | Install or first open | MMP default |
| Mid | Paywall reach or activation | Product quality signal |
| Monetization | Trial start | Top of subscription funnel |
| Revenue | First paid period, 30-day revenue | Finance alignment |
| Retention | Month-2 renewal rate | Channel LTV |
Subscription revenue by channel usually means:
Sum(revenue from users in cohort C where first_touch.media_source = X)
────────────────────────────────────────────────────────────────────
Count(installs or first opens in cohort C for channel X)
Pick one cohort window (weekly install cohorts are common) and stick to it for a quarter before renaming campaigns.
Capture parameters at the edge
Paid social and display
Use consistent naming in ad platforms:
campaign= stable slug (US_iOS_fitness_q4), not ad hoc copyadset/adgroup= audience or placement bucketcreative= asset id
Pass through to the MMP or deep link so the SDK receives structured fields, not a concatenated string nobody parses later.
Apple Search Ads
Keyword and campaign ids should map to profile fields (keyword, campaign). ASA often produces high-intent users with smaller volume: exactly the segment you do not want lost in a rollup called apple.
Organic and owned
Organic is not "no attribution." Use:
- Custom product page links with
utm_source=instagram_bio - Influencer codes as
campaignvalues - Email and push deep links with consistent UTMs
Otherwise organic becomes a black hole that hides your best channels.
Trial and paid: where reporting breaks
| Pitfall | What goes wrong | Fix |
|---|---|---|
| MMP-only ROAS | Revenue postbacks delayed or sampled | Reconcile with billing source of truth |
| Last-click obsession | In-app re-open attributes to wrong source | Document first-touch policy |
| SKAN / ATT gaps | Campaign granularity collapses | Model probabilistic + funnel readouts |
| Trial without billing link | Trials in product, revenue in RC only | Join on stable user id |
| Web + app | Stripe web purchase, app install from different ad | Identity graph or separate funnels |
RevenueCat (or Stripe for web) remains billing truth. AppsFlyer or Adjust remains install truth. Your analytics layer must persist first-touch on the profile when the user later starts a trial without opening an ad again.
See How to use RevenueCat and AppsFlyer to track subscription revenue by campaign for integration architecture.
MMP dashboards vs first-party analytics
MMPs answer: "Did this install come from campaign X?" and, with S2S configured, "Did we observe a purchase event for optimization?"
They are weaker at:
- Step-level onboarding drop-off by campaign
- Holding experiment variants alongside channel labels
- Segments that combine behavior + billing + messaging state
First-party analytics (including Rheo Analytics) answers: "Of users from campaign X, what percent reached the paywall, started trial, and paid: and where did they drop off in the journey?"
| Need | MMP | First-party |
|---|---|---|
| CPI and install volume | Primary | Secondary |
| SKAN / network reporting | Primary | N/A |
| Onboarding funnel by campaign | Limited | Primary |
| Step experiments + channel breakdown | No | Primary |
| Finance-grade MRR | Via postbacks | Join to RC/Stripe |
Use both. Do not fund channels on CPI when first-party data shows zero paywall reach for that creative.
Rheo walkthrough: channel to revenue in one place
Step 1: Connect attribution
Enable your MMP integration in Rheo app settings. Confirm test installs populate fields like acquisition.media_source and acquisition.campaign on the customer profile.
Step 2: Map the subscription funnel
In Analytics, define steps aligned with your Convert onboarding channel:
- First open / flow started
- Critical onboarding steps (use flow step ids)
- Paywall presented
- Trial started or purchase completed (from RC/Stripe-connected events)
Break down the funnel by campaign or media_source.
Step 3: Add revenue columns
Attach revenue metrics to the same breakdown:
- Trial starts per install
- Paid conversion within 30 days
- Revenue per install (directional; use finance exports for audits)
Step 4: Save segments
Example segments:
campaign = Meta_broad AND paywall_reached = falsemedia_source = ASA AND trial_started = true AND paid_30d = false
Use segments as targeting inputs for Convert experiments (show a shorter path for one campaign) or Engage (nudge trial users from a high-intent keyword).
Step 5: Close the loop
When Analytics shows Influencer_may with high paid % but low volume, marketing scales spend. When Meta_broad has high installs and low paywall reach, product ships a campaign-specific onboarding variant in Convert without waiting on App Store review.
Example decision table
After two weeks of data:
| Channel | Installs | Trial % | Paid 30d % | Action |
|---|---|---|---|---|
| ASA | 3.1k | 19% | 11% | Scale keywords; test paywall copy in Convert |
| Meta prospecting | 22k | 7% | 2% | Cut 30% spend; fix onboarding step 3 drop-off |
| TikTok test | 800 | 24% | 13% | Small budget hold; monitor creative fatigue |
| Organic | 6k | 16% | 12% | Invest in ASO; organic is efficient |
Without trial and paid columns, Meta prospecting still looks attractive on install volume alone.
Governance habits
| Habit | Why |
|---|---|
| Weekly channel + funnel review | Same slide structure every week |
| No campaign renames without alias map | Preserves cohort history |
| QA installs from test campaigns | Prevents polluted segments |
| Align with finance on revenue definition | Gross vs net, refunds, trials |
Reporting cadence that sticks
Ad-hoc channel analysis decays when media buyers rotate creatives daily. A lightweight rhythm keeps subscription revenue visible:
- Daily: MMP spend and install pacing (operational).
- Weekly: Rheo funnel breakdown by top five campaigns; one action item for product or UA.
- Monthly: Cohort paid conversion and directional LTV by channel; finance reconciliation against RevenueCat or Stripe exports.
When a channel moves budget, note the date on the experiment doc so Convert variants and Engage enrollments can be interpreted against spend shifts: not in isolation.
Related reading
- Product analytics with revenue attribution for subscription apps
- Rheo + AppsFlyer funnel attribution
- Rheo is a growth platform
Channels drive installs. Only a full funnel tied to billing tells you which channels drive subscription revenue.