# Adjust

> Send Adjust installs, sessions, and in-app events into Ours Privacy with Adjust server callbacks, joined to each person's web and app activity.

Source: https://docs.oursprivacy.com/docs/adjust

Send Adjust installs, sessions, and in-app events into Ours Privacy. Each event arrives with its network, campaign, ad group, creative, and revenue, on the same profile as the person's website and app activity.

***

## Pass the visitor ID to Adjust

**From your website.** Add the visitor ID to your Adjust links as `adj_label`. Adjust returns it on the install and later events from that link. Add it as `ours_visitor_id` too, for people who already have the app.

```js
const link = new URL('https://app.adjust.com/abc123');
link.searchParams.set('adj_label', ours.getVisitorId());
link.searchParams.set('ours_visitor_id', ours.getVisitorId());
```

**From your app.** Add a global callback parameter named `ours_visitor_id` to the Adjust SDK, set to `getVisitorId()` from the Ours Privacy [iOS](https://docs.oursprivacy.com/docs/ios-sdk), [Android](https://docs.oursprivacy.com/docs/android-sdk), or [React Native](https://docs.oursprivacy.com/docs/react-native-sdk) SDK. Set it before Adjust starts so the install carries it, and again whenever the visitor ID changes. To join events to your own user ID, add it after login as `user_id`.

***

## Connect Adjust

1. In Ours Privacy, click **Add source**, choose **Webhooks**, name it `Adjust`, and copy its **Webhook URL**.

2. In Adjust, open your app's **Server callbacks** and add a global callback: the webhook URL followed by this query string. Add any other Adjust placeholders you want as event properties.

   ```text
   ?activity_kind={activity_kind}&event_name={event_name}&adid={adid}&label={label}&created_at={created_at_milli}&network_name={network_name}&campaign_name={campaign_name}&revenue={revenue_float}&currency={currency}
   ```

3. Trigger an install or event from a test device so Ours Privacy learns the payload shape.

4. In the source's **Mappings** tab, set:

   | Mapping field    | Value                                                                                  |
   | ---------------- | -------------------------------------------------------------------------------------- |
   | Event Name       | `{% if event_name != blank %}{{ event_name }}{% else %}{{ activity_kind }}{% endif %}` |
   | Ours Visitor ID  | `{% if label != blank %}{{ label }}{% else %}{{ ours_visitor_id }}{% endif %}`         |
   | External ID      | `{{ user_id }}`                                                                        |
   | Event ID         | `{{ adid }}-{{ activity_kind }}-{{ created_at }}`                                      |
   | Event Properties | the network, campaign, and revenue fields from step 2                                  |

5. Confirm events in the [Recent Events Dashboard](https://docs.oursprivacy.com/docs/tracking-and-debugging-events).

***

## Good to know

* **The link wins.** When an event carries both a label and your app's visitor ID, installs from your website join the visitor who clicked.
* **Installs and sessions have no event name.** They arrive named by their activity kind, such as `install` and `session`.
* **One callback per activity.** A global callback plus an event callback for the same activity sends it twice. The Event ID keeps a repeated callback from counting twice.

***

## Next Steps

* **[Mobile Measurement Partners](https://docs.oursprivacy.com/docs/mmp)**: how partner events join web and app activity.
* **[Mapping Templates](https://docs.oursprivacy.com/docs/mapping-templates)**: rename events or set fallbacks in your mappings.
* **[Recent Events Dashboard](https://docs.oursprivacy.com/docs/tracking-and-debugging-events)**: verify incoming events.

If you have questions about connecting Adjust, reach out to [support@oursprivacy.com](mailto:support@oursprivacy.com).
