Sources
In breakdowns, sales that are not linked to any install show on an empty source row (“Unattributed”). See Revenue.
Precedence
When more than one signal is present, the first match wins:- Apple Search Ads, when Apple confirms the install came from an ad.
- Google Play referrer: a smart link if the referrer names one, otherwise a Play referrer campaign if it has campaign parameters.
- The URL the app was first opened with: a smart link if it carries the link’s parameters, otherwise a campaign link if it has
aky_corutm_*parameters. - Organic.
utm_source=google-play&utm_medium=organic, or no campaign and no source) counts as organic, not as a Play referrer campaign.
Apple Search Ads
On iOS, the native module reads the AdServices attribution token on the first launch. No IDFA and no App Tracking Transparency prompt are involved.1
On the device
By default (
resolveAdServicesOnDevice: true) the SDK sends the token to Apple’s AdServices API itself and reads the campaign, ad group and keyword ids. Apple can take a few seconds to have the record ready, so the SDK tries up to three times, a few seconds apart.2
On the server
The SDK sends the token together with whatever Apple answered. If Apple had not answered yet, the server exchanges the token itself, right away and then on a schedule, for up to 24 hours after the install. Apple’s tokens expire after 24 hours; after that the install stays with the source it already has.
Campaign Links
Any link that opens your app can carry a campaign. On the first launch, the SDK reads the opening URL and keeps these parameters:
The campaign of the install is
aky_c, else utm_campaign, else utm_source.
A campaign link only counts when it opens the app on its first launch. A link that opens the app later does not change the install’s source.
Google Play Referrer
On Android, the native module reads the Play Install Referrer on the first launch. If the Play Store URL you shared had areferrer with utm_* parameters, the install gets source play_referrer with utm_campaign (or utm_source) as its campaign.
Without the Native Module
In Expo Go, or in a plain React Native app without Expo Modules, the SDK cannot read the AdServices token or the Play referrer. Campaign links still work. You can pass both values yourself:Limits
- Attribution is collected once, on the first launch of an install. It is not updated by later opens.
- Paid campaigns on other ad networks are not attributed per install. Their results arrive as aggregated SKAdNetwork postbacks.
- iOS has no deferred deep link from smart links. See Smart Links.

