Affiliate Tracking for Subscription Apps — How to Attribute Recurring Revenue to Creators
How to track which creators drive subscribers to your app and attribute recurring revenue, renewals, and cancellations back to the right source.

Many affiliate tracking platforms were designed for non-subscription apps. Someone clicks a link, purchases a game, and that’s it. One transaction, one attribution, and you’re done. But subscription apps don’t work that way. The value of a referred user isn’t what they spend at the moment of download. It’s the six, twelve, or twenty-four months of spending that follow.
If you’re a subscription app today and you’re measuring affiliate performance based on installs alone, you’re only getting a portion of the picture. You can see which creators are driving downloads. You can’t see which creators are driving subscribers who actually stick around. (For more on this problem, see our guide on influencer attribution for mobile apps.) And that difference is critical when you’re deciding who to pay, how much to pay them, and where to invest your next marketing dollar.
To do affiliate tracking for subscription apps, you need a way to tie your subscription platform to your install data so that every renewal, cancellation, and trial conversion is tied back to the creator who drove the original install.
Why install tracking isn’t enough for subscription apps
Here’s why stopping at installs doesn’t work. Creator A delivers you 200 installs. Creator B delivers you 80. If you’re paying per install, creator A is your clear winner. But what if 40 of creator B’s installs converted to paid subscriptions with a 6-month average retention, while only 15 of creator A’s installs actually converted to paid subscriptions and most churned after 60 days?
Creator B generated dramatically more revenue, and you have no idea if all you’re tracking is the install.
Subscription apps have a unique attribution problem. The events you care about don’t happen at the moment of download. They happen over time:
- Trial starts, did the user begin a free trial?
- Trial conversions, did the trial convert to a paid subscription?
- Renewals, is the user still paying after month 2, month 6, month 12?
- Cancellations, when did the user cancel, and what was their total LTV?
- Plan upgrades, did the user upgrade from a monthly plan to an annual plan?
The webhook approach: connecting attribution to subscription data
The simplest way to solve this problem is with webhooks. Your subscription platform already knows about every purchase, renewal, and cancellation. You just need a way to tie those events back to the creator who drove the original install.
Implementation is simple. The Appfiliate SDK attributes an install to a creator’s unique referral link. Then your app passes your subscription platform’s user ID to the SDK, so we can tie the attributed install to a unique user. Then every time money changes hands in your subscription platform, you fire a webhook event to Appfiliate so we can attribute the action to the right affiliate. Every renewal. Every cancellation. Every trial conversion.
This works with all the major subscription platforms:
- RevenueCat — the most common setup we see. RevenueCat fires webhooks for new purchases, renewals, cancellations, and billing issues.
- Stripe — for apps that handle payments directly through Stripe. Webhook events for
invoice.paidandcustomer.subscription.deletedcover the core tracking. - Adapty — similar webhook model to RevenueCat, covering all subscription lifecycle events.
- Superwall — tracks paywall conversions and subscription events via webhooks.
- Qonversion — another subscription platform with full webhook support.
How the code works
The SDK integration is three lines. Here's the iOS example with RevenueCat:
import Appfiliate
Appfiliate.configure(appId: "APP_ID", apiKey: "API_KEY")
Appfiliate.trackInstall()
Appfiliate.setUserId(Purchases.shared.appUserID)
The first two lines handle install attribution. The third line is the critical piece for subscription tracking — it connects the attributed install to the RevenueCat subscriber ID. Once that link exists, every webhook event from RevenueCat for that subscriber gets attributed to the creator who drove the install.
For Stripe, the pattern is identical. You just pass the Stripe customer ID instead:
Appfiliate.setUserId(stripeCustomerId)
Then you paste the webhook URL into your subscription platform's dashboard. That's it. No server-side code, no manual event tracking, no trackPurchase() calls scattered throughout your codebase. The SDK works across iOS, Android, Flutter, and React Native. The webhook integration is platform-agnostic since it runs between your subscription platform and Appfiliate's servers.
What gets tracked automatically
Once the webhook integration is live, Appfiliate records every subscription event and attributes it to the original creator. In your dashboard, you'll see per-creator breakdowns of:
Initial purchases. Which creators are driving trial starts and first purchases? This is the top-of-funnel metric that tells you who's generating demand. Trial-to-paid conversions. This is where the real signal lives. A creator who drives 80 trial starts with a 65% conversion rate is far more valuable than one who drives 120 trials with a 25% conversion rate. The second creator looks better on installs. The first creator is generating more revenue. Renewals. How many of each creator's referred subscribers are still paying after month 3? Month 6? Month 12? This is the metric that separates creators who drive curiosity from creators who drive genuine product-market fit. Cancellations and churn. When a subscriber churns, you see which creator referred them and how long they stayed. Over time, you build a churn profile per creator. Some creators drive users who stay for 8+ months. Others drive users who cancel after the first renewal. Both look identical at install time. Revenue attribution. Total revenue generated per creator, over time, accounting for all renewals and plan changes. This is the number you actually pay commissions on.ROI calculation: why this changes everything
The standard affiliate tracking ROI calculation is simple. Creator drove X installs, you paid Y per install, done. But for subscription apps, the ROI calculation has a time dimension. Take an example where an influencer sends 50 new users to your app that costs $9.99/month. You’re giving them a 20% revenue share:
- Month 1: 50 users * $9.99 = $499.50 revenue. $99.90 commission paid to the creator
- Month 3: 38 of those users are still subscribed. 38 users * $9.99 = $379.62 revenue. $75.92 commission paid to the creator
- Month 6: 25 of those users are still subscribed. 25 users * $9.99 = $249.75 revenue. $49.95 commission paid to the creator
- Month 12: 15 of those users are still subscribed. 15 users * $9.99 = $149.85 revenue. $29.97 commission paid to the creator
You can only calculate this if you have an attribution system that ties into your subscription platform. Otherwise you can’t differentiate between the creator whose users average 8 months of retention time and the creator whose users average 1 month of retention time. You’re overpaying one of them or underpaying the other. Probably both.
This is why you need affiliate attribution for subscription-based apps. Not just tracking who drove an install, but tracking who drove the revenue. Our pricing page explains how Appfiliate handles calculating commissions for recurring-revenue business models.
Frequently asked questions
Does the SDK require IDFA or an ATT prompt?No. Appfiliate uses device fingerprinting along with the platform’s standard install referrer API. No IDFA, no ATT prompt, no special permission required.
What happens if a user changes their subscription platform user ID?The attribution will remain tied to the original user ID passed to setUserId. If the user ID changes (for example, from a RevenueCat restore or when you create a new Stripe customer), you can call setUserId again with the new user ID.
What if some purchases are through my subscription platform and some are manual purchases?You can use both. If some purchases happen through your subscription platform (and are tracked via webhooks) and some are one-time purchases that you handle directly in the app, you can use trackPurchase for the one-time purchases and the webhooks for the subscription events.
How long does it take for webhooks to show up in the dashboard?Webhooks are processed in real time. So when RevenueCat or Stripe sends a webhook, you will see that attribution event in your Appfiliate dashboard within seconds.
What if I change subscription platforms later?The original install is tracked independently of the subscription platform. So if you decide to migrate from RevenueCat to Adapty at some point, you would simply update the setUserId call to use the new platform’s user ID and then configure the new webhook. All historical attribution data remains intact.
Does this work if I have a free trial period?Yes. We track trial starts, trial conversions, and trial cancellations as distinct events. So you can see which creators are driving lots of users who convert from a free trial to a paid subscription and which creators are driving lots of users who cancel at the end of the free trial.
---
Apps with a subscription pricing model have an inherent benefit when working with creators. Each new user a creator drives has the potential to deliver months (or years) of revenue to your app. But only if your attribution system can actually see past the initial purchase. Tying your subscription platform to your attribution system is how you can go from “I think this creator is working well” to “I know this creator is worth X dollars.” If you want to learn more about tracking installs from social platforms, check out our guide on tracking app installs from YouTube, TikTok, and Instagram.