Get started with Adapty 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 the Adapty SDK version 3.9.1 or higher.
Enable the 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.

Listen for installation details updates
You need to install and activate the Adapty SDK first.
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
}