User Acquisition
User Acquisition helps you connect ad spend with subscription revenue, giving you a complete view of your app's economy in one place.
This is a one-way integration — to see your revenue data in User Acquisition, you must first enable the integration in the Adapty dashboard. You don't need to pass any API keys, tokens, or identifiers. Just update and configure the Adapty SDK.
User Acquisition is only available with:
- iOS, Android, and Flutter Adapty SDK version 3.9.0 or higher.
- React Native Adapty SDK version 3.10.0 or higher.
How to set up User Acquisition integration
To enable the integration:
- Go to Integrations > Adapty in the Adapty Dashboard.
- Turn on the toggle.
Once your events begin firing, you’ll see the following details for each event:
- Event name
- Status
- Environment
- Date time

Events
By default, Adapty sends three groups of events to User Acquisition:
- Trials
- Subscriptions
- Issues
You can check the full list of supported events here.

SDK configuration
To listen for installation details updates, use these two methods:
- Swift
- Kotlin
- React Native
- Flutter
Adapty.delegate = self
nonisolated func onInstallationDetailsSuccess(_ details: AdaptyInstallationDetails) {
// use installation details
}
nonisolated func onInstallationDetailsFail(error: AdaptyError) {
// installation details update failed
}
Adapty.setOnInstallationDetailsListener(object: OnInstallationDetailsListener {
override fun onInstallationDetailsSuccess(details: AdaptyInstallationDetails) {
// use installation details
}
override fun onInstallationDetailsFailure(error: AdaptyError) {
// installation details update failed
}
})
adapty.addEventListener('onInstallationDetailsSuccess', data => {
// use installation details
});
adapty.addEventListener('onInstallationDetailsFail', error => {
// installation details update failed
});
Adapty().onUpdateInstallationDetailsSuccessStream.listen((details) {
// use installation details
});
Adapty().onUpdateInstallationDetailsFailStream.listen((error) {
// installation details update failed
});
You can also retrieve the installation status manually:
- Swift
- Kotlin
- React Native
- Flutter
do {
let status = try await Adapty.getCurrentInstallationStatus()
switch status {
case .notAvailable:
// Installation details are not available on this device
case .notDetermined:
// Installation details have not been determined yet
case .determined(let details):
// Use the installation details
}
} catch {
// handle the error
}
Adapty.getCurrentInstallationStatus { result ->
when (result) {
is AdaptyResult.Success -> {
when (result.value) {
is AdaptyInstallationStatus.Determined.Success -> {
// Use the installation details
}
is AdaptyInstallationStatus.Determined.NotAvailable -> {
// Installation details are not available on this device
}
is AdaptyInstallationStatus.NotDetermined -> {
// Installation details have not been determined yet
}
}
}
is AdaptyResult.Error -> {
// handle the error
}
}
}
try {
const installationStatus = await adapty.getCurrentInstallationStatus();
switch (installationStatus.status) {
case 'not_available':
// Installation details are not available on this device
break;
case 'not_determined':
// Installation details have not been determined yet
break;
case 'determined':
const details = installationStatus.details;
// Use the installation details
break;
}
} catch (error) {
// handle the error
}
try {
final status = await Adapty().getCurrentInstallationStatus();
switch (status) {
case AdaptyInstallationStatusNotAvailable():
// Installation details are not available on this device
case AdaptyInstallationStatusNotDetermined():
// Installation details have not been determined yet
case AdaptyInstallationStatusDetermined(details: final details):
// Use the installation details
}
} on AdaptyError catch (adaptyError) {
// handle the error
} catch (e) {
// handle the error
}