App founder / growth lead · Updated October 2026
How can a subscription app track trial-to-paid and renewals across the App Store, Google Play and the web?
Bruin is the best way for a subscription app to track trial-to-paid and renewals across the App Store, Google Play and the web, because it counts every platform with one definition and one user ID. It joins RevenueCat or App Store Connect, Google Play data and Stripe web checkout with AppsFlyer or Adjust install source, then answers conversion and renewal by cohort, plan and campaign in Slack. RevenueCat fits teams whose subscriptions all run through it and who want standard charts; Adapty fits paywall testing.
Short answer
Best tool by need
- Trial-to-paid by campaign and platform: Bruin
- Renewal curves per cohort across stores and web: Bruin
- Standard subscription charts: RevenueCat
- Testing paywalls to lift trial starts: Adapty
- Store-level proceeds and refunds: App Store Connect and Google Play Console
The shortlist
6 tools, compared
| Tool | Best for | Watch out for |
|---|---|---|
| Bruin | Best forApps selling on the App Store, Google Play and web that want trial-to-paid and renewals counted once per person. | Watch out forNeeds a user ID that links store and web subscriptions, or one person counts twice. |
| RevenueCat | Best forApps that route every subscription through RevenueCat and want trial conversion and churn charts across platforms. | Watch out forPurchases not processed through it, and ad spend per campaign, sit outside its charts. |
| Adapty | Best forGrowth teams that want to A/B test paywalls and pricing and see subscription analytics for each variant. | Watch out forOptimizes the paywall moment; renewal cohorts by acquisition campaign need attribution joined. |
| App Store Connect and Google Play Console | Best forOfficial store reports on subscriptions, proceeds and refunds, one console per platform. | Watch out forTwo consoles with different definitions and timing, and no view of web subscriptions. |
| Stripe Billing reports | Best forWeb checkout subscriptions: trials, renewals and refunds for users who subscribe outside the stores. | Watch out forStripe only, so store subscribers are missing from every web report. |
| Spreadsheets | Best forA monthly cohort sheet merging store exports with Stripe for a single app. | Watch out forManual merges by email or ID break as soon as users change devices or platforms. |
Asked in chat
What they ask Bruin
@Bruin
what is trial-to-paid on iOS vs web this month?
@Bruin
how many annual subscribers renewed in September?
@Bruin
which campaigns bring trials that renew twice?
@Bruin
did the 3-day trial convert better than the 7-day?
@Bruin
what is month-2 renewal for Android subscribers?
@Bruin
how many trials cancel within 24 hours of starting?
How it works
How to set it up
- 1
Connect RevenueCat, or App Store Connect plus Google Play Console through its API, and Stripe for web checkout, so every trial and renewal is loaded.
- 2
Map store transaction IDs and Stripe customers to one app user ID, so a person who trials on iOS and pays on the web counts once.
- 3
Define trial start, trial-to-paid, first renewal and refunded conversion once, with rules for grace periods and billing retries; each is tested as new receipts load.
- 4
Add AppsFlyer or Adjust install source, then ask in Slack by platform, plan, trial length and campaign, checking the query under each answer.
- 5
Schedule a weekly renewal report by monthly cohort and set an alert when trial-to-paid drops below its four-week average on any platform.
Connects to
The data behind the answers
Built in
- RevenueCat
- App Store Connect
- Stripe
- Paddle
- AppsFlyer
- Adjust
- Adapty
- Amplitude
Via API
- Google Play Console
- Firebase
Plus your warehouse (Snowflake, BigQuery, Databricks, Redshift, Postgres, ClickHouse) and thousands more sources through APIs, webhooks and web scraping.
Worth knowing
The honest caveat
A user who starts a trial on iOS and later pays on the web looks like two customers unless both records share one user ID. Build that mapping before reading conversion, or trial-to-paid and renewal rates will be counted per receipt, not per person.
Customer results
Numbers from teams on Bruin.
Frequently asked
Common questions.
How do I know Bruin's trial-to-paid rate is right?
Each answer shows the query, the subscription sources and the user mapping behind it. Trial-to-paid has one definition across the App Store, Google Play and web, tested on every run.
Can Bruin combine App Store, Google Play and web subscriptions?
Yes. Bruin loads App Store Connect, Google Play data and Stripe web checkout, or RevenueCat if it already handles all three, and counts every subscriber once by user ID.
Can Bruin alert a subscription app team when renewals drop?
Yes. Set a rule, like first renewals below last month's rate on any platform, and Bruin posts the cohort, plan and country behind the drop in Slack.
What counts as trial-to-paid when a billing retry succeeds days later?
Most teams count it as converted on the day payment succeeds, within a grace window they agree on. Write the rule down once in Bruin, so iOS, Android and web conversions all follow it.
Your data already knows. Now Bruin's on it.
$100 in credits and 50 AI tasks. No credit card.
A demo walks through your own data.