> For the complete documentation index, see [llms.txt](https://docs.growsurf.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.growsurf.com/integrations/adjust.md).

# Adjust

## How It Works

If you use Adjust, we recommend using an Adjust link as your GrowSurf campaign Share URL.

This is the URL that referred friends land on when they open up a referral link. Depending on the device they open the link on (web, iOS, or Android), they will either land on a webpage or your App Store / Google Play listing on mobile.

When a participant shares their referral link, the GrowSurf referral code must stay attached to the Adjust link. Your app then passes the Adjust deferred deep link URL into the GrowSurf mobile SDK before calling `addReferredParticipant()`.

***

## How to Set Up

**Step 1:** In GrowSurf, open *Campaign Editor > 5. Installation* and set your Share URL to the Adjust link that routes users to your app.

<figure><img src="/files/76iLLxsusTpH1PsOJvml" alt=""><figcaption></figcaption></figure>

**Step 2:** Staying within the same GrowSurf screen as the prior step, you need to append a `deep_link` query parameter to the Share URL. Depending on your Adjust link type, choose an option below.

{% tabs %}
{% tab title="Adjust Universal Link (branded domain)" %}
If your Adjust link uses a branded Universal Link domain (e.g., `acecraft.go.link`, `zuscoffee.go.link`, `villamarket.go.link`):

{% hint style="info" %}

## Get your app's deep link URL encoded

1. Get your app's deep link URL. For example, it looks something like `myapp://open`.
2. Use a [tool like this](https://meyerweb.com/eric/tools/dencoder/) to URL-encode it. Using the same example above, you should have something that looks like `myapp%3A%2F%2Fopen` .
3. Replace `myapp%3A%2F%2Fopen` in the examples below with your value from the previous step (leave `{{referralCode}}` as literal text — GrowSurf substitutes it for each participant's referral code at share time).
   {% endhint %}

**If your Adjust link has no query parameters yet, prefix with `?`:**

* Before: `https://zuscoffee.go.link/C0PHh`
* After: `https://zuscoffee.go.link/C0PHh?deep_link=myapp%3A%2F%2Fopen%3Fgrsf%3D{{referralCode}}`

**If your Adjust link already has query parameters (e.g., an `adj_t` token), prefix with `&`:**

* Before: `https://villamarket.go.link/?adj_t=kzdgn86`
* After: `https://villamarket.go.link/?adj_t=kzdgn86&deep_link=myapp%3A%2F%2Fopen%3Fgrsf%3D{{referralCode}}`
  {% endtab %}

{% tab title="Adjust standard tracker URL" %}
If your Adjust link uses the standard tracker URL format (e.g., `app.adjust.com`):

{% hint style="info" %}

## Get your app's deep link URL encoded

1. Get your app's deep link URL. For example, it looks something like `myapp://open`.
2. Use a [tool like this](https://meyerweb.com/eric/tools/dencoder/) to URL-encode it. Using the same example above, you should have something that looks like `myapp%3A%2F%2Fopen` .
3. Replace `myapp%3A%2F%2Fopen` in the examples below with your value from the previous step (leave `{{referralCode}}` as literal text — GrowSurf substitutes it for each participant's referral code at share time).
   {% endhint %}

**If your tracker URL has no query parameters yet, prefix with `?`:**

* Before: `https://app.adjust.com/abc123`
* After: `https://app.adjust.com/abc123?deep_link=myapp%3A%2F%2Fopen%3Fgrsf%3D{{referralCode}}`

**If your tracker URL already has query parameters (e.g., a campaign tag), prefix with `&`:**

* Before: `https://app.adjust.com/abc123?campaign=summer`
* After: `https://app.adjust.com/abc123?campaign=summer&deep_link=myapp%3A%2F%2Fopen%3Fgrsf%3D{{referralCode}}`
  {% endtab %}
  {% endtabs %}

{% hint style="info" %}
There's no configuration necessary in Adjust. GrowSurf substitutes `{{referralCode}}` with each participant's referral code at share time (e.g., `abc123`).
{% endhint %}

**Step 3:** Pass the Adjust deferred deep link URL into the GrowSurf attribution adapter before calling `addReferredParticipant()`.

{% tabs %}
{% tab title="iOS" %}

```swift
import GrowSurfAdjustAttribution

try await GrowSurfAdjustAttribution.handle(adjustDeferredDeepLinkURL, sdk: growsurf)
```

{% endtab %}

{% tab title="Android" %}

```kotlin
import com.growsurf.sdk.attribution.adjust.GrowSurfAdjustAttribution

GrowSurfAdjustAttribution.handle(adjustDeferredDeepLinkUri, growsurf)
```

{% endtab %}
{% endtabs %}

**Step 4:** Call `addReferredParticipant()` after the GrowSurf SDK has handled attribution. This method will validate pending attribution and creates a new referred participant record only when there is a valid referrer.

***

## iOS Deferred Deep Linking (New Installs)

This is the primary path for an app referral program — a referral targets people who don't have your app yet, so most referred installs are cold installs. On iOS it's best-effort even when configured (see the troubleshooting tips below), so pair it with a fallback such as manual referral-code entry.

For users who tap an Adjust link (and don't have your iOS app installed), the referral code only survives the install if Adjust **LinkMe** is enabled. iOS 14+ removed the IDFA/device matching (App Tracking Transparency), and iOS 15 Private Relay masks the click IP, which broke the probabilistic matching Adjust otherwise uses for cold-install deferred deep links. **LinkMe** is optional and off by default. Without it, an iOS user who installs from a referral link may open the app with no referral data, and `addReferredParticipant()` finds no referrer.

To enable it:

* **On your Adjust link:** add a LinkMe tag so the token is written at click time — `adj_linkme=1` for Universal/branded (`.go.link`) links, or `linkme=1` for standard tracker URLs.
* **In your app:** enable LinkMe on the Adjust config **before** starting the Adjust SDK. The exact call depends on your Adjust SDK major version — `ADJConfig.enableLinkMe()` in Adjust iOS SDK v5, or `setLinkMeEnabled(true)` in v4 (confirm against [Adjust's current LinkMe docs](https://help.adjust.com/en/article/linkme) for your version).

On iOS 16+, the user sees a one-time "Pasted from …" prompt on first launch when the SDK reads the LinkMe clipboard token. Without LinkMe, Adjust falls back to server-side, probabilistic matching, which is unreliable on modern iOS. The installed-app flow (an Adjust link that opens an app the user already has) does not need LinkMe.

As with every provider, GrowSurf reads `grsf` out of whatever deep link Adjust delivers — so a deferred referral survives only when LinkMe is enabled and the delivered `deep_link` still carries `grsf`.

***

## Additional Tips

* Test both flows before launching:
  * **Installed app flow:** Users who already have your app installed
  * **New install flow:** Users who don't have your app installed
* If the referral code is missing after app install, confirm that the deep link URL passed to `GrowSurfAdjustAttribution.handle` contains `grsf`, `ref`, or `referredBy`. The most common cause is that the `deep_link` parameter in your Adjust Share URL was not URL-encoded correctly, or `{{referralCode}}` was accidentally URL-encoded to `%7B%7BreferralCode%7D%7D` and was not substituted by GrowSurf.
* The `deep_link` value should URL-encode the `://`, `?`, and `=` characters of your app's deep link scheme, but `{{referralCode}}` itself must remain as literal text (not URL-encoded). For example, `myapp%3A%2F%2Fopen%3Fgrsf%3D{{referralCode}}` is correct; `myapp%3A%2F%2Fopen%3Fgrsf%3D%7B%7BreferralCode%7D%7D` is not.
* **iOS deferred (cold install) is best-effort.** Even when LinkMe is enabled, a referral can be missing after a *new* iOS install if the user declined the iOS "Paste from …" prompt on first launch, copied something else before opening the app (overwriting the clipboard token), or tapped the link from an in-app / non-Safari browser. Provide a fallback such as manual referral-code entry, and don't assume the user always lands on a specific screen. (Android's Play Install Referrer is deterministic and isn't affected by these.)
* See [iOS SDK Attribution Providers](/developer-tools/ios-sdk/attribution-providers.md), [Android SDK Attribution Providers](/developer-tools/android-sdk/attribution-providers.md), and [Getting Started for Native Mobile](/getting-started-for-native-mobile.md) for more details.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.growsurf.com/integrations/adjust.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
