Skip to main content
Every install gets exactly one source. The SDK collects what it needs once, on the first launch, and the server turns it into a source. Revenue from that install is then credited to that source, its campaign and, for Apple Search Ads, its keyword.

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:
  1. Apple Search Ads, when Apple confirms the install came from an ad.
  2. Google Play referrer: a smart link if the referrer names one, otherwise a Play referrer campaign if it has campaign parameters.
  3. 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_c or utm_* parameters.
  4. Organic.
A Play referrer for a normal store install (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.
When the server resolves the token later, Apple Search Ads replaces any other source the install had. Apple Search Ads installs carry the campaign id, ad group id and keyword id. Only these installs have a value for the keyword dimension. The campaign of an Apple Search Ads install is its Apple campaign id, which is what ROAS joins on.
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 a referrer with utm_* parameters, the install gets source play_referrer with utm_campaign (or utm_source) as its campaign.
Smart links build this referrer for you.

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:
Each callback has 3 seconds to answer.

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.