How to Connect RevenueCat to Instally for Revenue Tracking
Step-by-step guide to connecting RevenueCat to Instally. See revenue per link, per campaign, per creator — not just install counts.
Why connect RevenueCat to Instally?
Instally tracks which links drive installs. RevenueCat tracks which users pay. Connecting them gives you revenue per link.
Without the integration, you know "Creator A drove 500 installs" but not whether those installs converted to paid users. With it, you know "Creator A drove 500 installs and $2,100 in revenue." That's the difference between counting downloads and measuring business impact.
Once connected, your Instally dashboard shows revenue alongside clicks and installs for every link:
| Source | Clicks | Installs | Revenue | Rev/Install |
|---|---|---|---|---|
| Creator A (YouTube) | 4,200 | 840 | $2,100 | $2.50 |
| Creator B (Instagram) | 6,100 | 915 | $457 | $0.50 |
| Blog: Getting started | 1,800 | 450 | $1,350 | $3.00 |
| Email: Welcome series | 2,400 | 600 | $2,160 | $3.60 |
What you'll need
| Requirement | Details |
|---|---|
| Instally account | Free tier works for testing. Revenue tracking requires Growth ($40/mo) or Scale ($79/mo) |
| RevenueCat account | Any plan |
| Instally SDK integrated | The SDK must be in your app so installs can be matched to clicks. See our iOS or Android guide |
| 10 minutes | That's all this takes |
How it works
The integration uses RevenueCat's webhook system. When a purchase event occurs (initial subscription, renewal, cancellation, etc.), RevenueCat sends a webhook to Instally's API. Instally matches the event to the user's install record and credits the revenue to the link that brought them in.
The flow looks like this:
- User clicks a tracking link → Instally records the click
- User installs the app → Instally SDK matches the install to the click
- User subscribes via your paywall → RevenueCat processes the purchase
- RevenueCat sends a webhook to Instally → Instally matches the purchase to the install (and therefore the link)
- Revenue appears on the link in your dashboard
setUserId. When RevenueCat sends a webhook, Instally can connect the purchase back to the install and the link that drove it.
Step 1: Set up the Instally SDK
If you've already integrated the Instally SDK, skip to Step 2. If not, here's the minimum setup.
Swift example:
import Instally
import RevenueCat
@main
struct YourApp: App {
init() {
Instally.configure(appId: "YOUR_APP_ID", apiKey: "YOUR_API_KEY")
Purchases.configure(withAPIKey: "appl_your_rc_key")
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
Kotlin example:
import io.instally.sdk.Instally
import com.revenuecat.purchases.Purchases
import com.revenuecat.purchases.PurchasesConfiguration
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
Instally.configure(this, appId = "YOUR_APP_ID", apiKey = "YOUR_API_KEY")
Purchases.configure(
PurchasesConfiguration.Builder(this, "goog_your_rc_key").build()
)
}
}
Step 2: Link the RevenueCat user ID to Instally
This is the most important step. After calling trackInstall, pass RevenueCat's current app user ID to Instally. This ensures that when RevenueCat reports a purchase, Instally can match it to the correct install and link.
Swift example:
struct ContentView: View {
var body: some View {
Text("Hello")
.task {
do {
Instally.trackInstall()
Instally.setUserId(Purchases.shared.appUserID)
}
}
}
}
Kotlin example:
lifecycleScope.launch {
Instally.trackInstall(this@MainActivity) { result ->
Log.d("Instally", "matched=${result.matched}, method=${result.method}")
}
Instally.setUserId(this@MainActivity, Purchases.sharedInstance.appUserID)
}
Flutter example:
await Instally.trackInstall();
await Instally.setUserId(await Purchases.appUserID);
React Native example:
const result = await instally.trackInstall();
await instally.setUserId(await Purchases.getAppUserID());
The user ID link needs to happen once, on the first app launch after install. Calling it after trackInstall() is safe; native SDKs queue the user ID while the install check is still running.
Step 3: Add the Instally webhook in RevenueCat
Now configure RevenueCat to send purchase events to Instally.
- Log in to the RevenueCat dashboard
- Navigate to your project
- Go to Integrations in the left sidebar
- Click Webhooks
- Click Add New
- Set the webhook URL to:
https://api.instally.io/webhooks/revenuecat
- Add an authorization header:
X-Instally-Api-Key
- Header value: Your Instally API key (found in the Instally dashboard under Settings > API Keys)
- Under Events, select the following:
| Event | What it tracks |
|---|---|
INITIAL_PURCHASE | First subscription or one-time purchase |
RENEWAL | Subscription renewal |
PRODUCT_CHANGE | Upgrade or downgrade |
CANCELLATION | User cancelled (still active until period end) |
EXPIRATION | Subscription expired |
BILLING_ISSUE | Payment failed |
UNCANCELLATION | User re-enabled auto-renew |
INITIAL_PURCHASE, RENEWAL, and PRODUCT_CHANGE. These are the events that represent actual revenue. The others are useful for churn analysis but don't directly affect revenue numbers.
- Click Save
Step 4: Test the integration
Test end-to-end before relying on the data:
- Create a test tracking link in Instally
- Click the link once on a physical test device
- Install the app from the store, TestFlight, internal testing, or a development build
- Open the app — the SDK should call
trackInstalland sync the user ID with RevenueCat - Make a sandbox purchase through your paywall
- Check the Instally dashboard — you should see the revenue appear on the test link within a few seconds
#if DEBUG
Instally.resetForTesting()
#endif
if (BuildConfig.DEBUG) {
Instally.resetForTesting(context)
}
if (kDebugMode) {
await Instally.resetForTesting();
}
if (__DEV__) {
await instally.resetForTesting();
}
If the revenue doesn't appear:
- Verify the webhook is active in RevenueCat (check the webhook logs for delivery status)
- Confirm the
X-Instally-Api-Keyheader is correct - Make sure
trackInstallruns beforeInstally.setUserId - Confirm that the RevenueCat app user ID passed to
setUserIdmatches the user ID shown in RevenueCat's customer view - If you see
matched=false, confidence=0, method=no_match, create a fresh click and reset the app's cached install state before launching again
What events show up in Instally
Once the integration is live, Instally processes RevenueCat events and surfaces them in your dashboard:
| RevenueCat event | How Instally handles it |
|---|---|
INITIAL_PURCHASE | Adds the transaction amount to the link's revenue total |
RENEWAL | Adds the renewal amount to the link's revenue total |
PRODUCT_CHANGE | Adjusts revenue based on the new product price |
CANCELLATION | Marked in the user's event timeline (no revenue adjustment — user still has access until period end) |
EXPIRATION | Marked in the user's event timeline |
BILLING_ISSUE | Flagged for awareness (no revenue adjustment until resolved) |
Revenue metrics in the dashboard
With RevenueCat connected, each link in your dashboard gains revenue columns:
- Revenue: Total revenue generated by installs from this link
- Rev/Install: Average revenue per install for this link
- Paying users: Number of installs from this link that made at least one purchase
- Conversion to paid: Percentage of installs that became paying users
Common patterns
After running the integration for a few weeks, developers typically discover a few patterns:
High-install links don't always mean high-revenue links. A viral TikTok might drive thousands of installs, but if the audience is teenagers who don't pay for apps, the revenue per install will be low. A niche blog post might drive 50 installs, but if those users are professionals who immediately subscribe, the revenue per install is much higher. Welcome sequences and onboarding emails drive the highest revenue per install. Users who install from an email are already engaged. They're more likely to convert. See our email tracking guide for more on this. Renewal revenue compounds over time. A link might show $500 in revenue after the first month, but $1,500 after three months as those users renew. Check revenue at different time windows to get the full picture.Alternative: Client-side revenue reporting
If you don't want to use webhooks, or if you need to report revenue from a source that's not RevenueCat, you can report purchases directly from the SDK.
Swift example:
Instally.trackPurchase(
productId: "pro_monthly",
revenue: 9.99,
currency: "USD",
transactionId: transaction.id
)
Kotlin example:
Instally.trackPurchase(
context = context,
productId = "pro_monthly",
revenue = 9.99,
currency = "USD",
transactionId = purchase.orderId
)
This works with any payment provider. Call it after a successful purchase, and the revenue will be attributed to the link that drove the install. The webhook approach is recommended because it catches renewals and server-side events automatically, but client-side reporting works if webhooks aren't an option.
FAQ
Does this work with RevenueCat's free tier?
Yes. RevenueCat's free plan includes webhook support. You can set up the Instally integration without upgrading your RevenueCat plan.
What if the user doesn't install from a tracking link?
If the install is organic (not from an Instally tracking link), the revenue is still recorded but categorized as "organic" in your dashboard. You'll see total revenue and tracked revenue separately.
Can I use both the webhook and client-side revenue tracking?
We recommend picking one to avoid double-counting. The webhook approach is preferred because it captures renewals and server-side events without additional client code.
How quickly does revenue data appear?
Revenue appears within seconds of RevenueCat sending the webhook event. For sandbox purchases during testing, it should be near-instant. In production, RevenueCat typically sends webhooks within a few seconds of the App Store or Play Store confirming the transaction.
Does this work with RevenueCat Paywalls?
Yes. RevenueCat Paywalls is a UI layer on top of RevenueCat's purchase infrastructure. The webhook events are the same regardless of whether you use RevenueCat Paywalls or your own paywall UI.
I use Stripe, not RevenueCat. Can I still track revenue?
Absolutely. We also support Stripe webhooks. See our Stripe integration guide for the setup process.
---
Install counts tell you who's interested. Revenue tells you who's valuable. Connect RevenueCat to Instally and start seeing which links, campaigns, and creators actually drive paying users.
Stop guessing. Start shipping.
Track clicks, installs, and revenue from every link. Set up in five minutes.
Get started free