Adjust is a third-party tracking tool employing fingerprinting to identify installs per source, such as different creatives and targetings (e.g. countries and devices). Our app download tracking tool shows which marketing sources give advertisers their most valuable users.

This video is a quick introduction to the Adjust callback generation tool. For a more detailed explanation and to learn about all of your options, please read the guide.

Once you have tested your setup successfully, you can request to appear on our informative list of integrated partners. You can, however, use the callback API and run campaigns even if you are not yet on the list.

Note: The following page contains examples using a minimum-length tracker token. Always use the entire tracker token as displayed in your Adjust Campaign Wizard.

1Conversion tracking with Adjust

  1. The client will provide you with a tracker URL; this could be a click or impression tracker URL.
    Example click URL:
    Example impression URL:
    In these examples, abc123 is the tracker token for a specific source. It will be at least six lowercase alphanumeric characters.
  2. If you wish to receive conversion data, concatenate your tracking callbacks onto the Adjust tracker URL.
  3. Copy and paste the URL, then set it as the target of the creative being tracked.
  4. The URL will redirect the user to the app store or a targeted app.
  5. Callbacks are sent to you if you defined them in the tracker URL.

You can easily use our partners tool to generate your click URLs, including correct encoding.

2Receiving conversion data

Your primary tool for receiving conversion data is the callbacks that Adjust fires in real-time to any endpoint that you require. This guide describes how to set those callbacks up.

To receive callbacks, you need to have an adserver or a BI system capable of receiving and interpreting conversion data pings in real-time.

This is generally how ad networks interact with Adjust. In certain cases, it may be advantageous to use the Adjust dashboards directly. Clients are able to provide a limited-access user login to you, but at their discretion. You can read more about this here.

3Setting callbacks

We offer an API for you to set up callbacks via a URL if you want to receive conversion data for installs or in-app events.

Please note that our solution differs greatly from competitors. Adjust allows you to dynamically attach callback URLs to the tracker URL instead of hardcoding them into our server. As a result, you can easily change or update them as you wish, and you can prepare a new campaign in five minutes – without even involving your client.

To help you set up your URLs, we provide a tool for partners with which you can add your postback URLs and client tracker URLs and generate a correct click URL for your campaigns. You may also find our network integration brief useful.

You may set these manually with your creatives. In order to streamline the process, however, we strongly suggest that your systems auto-detect our tracker URLs and attach the required callback URLs by itself.

We also offer you the possibility to receive callbacks for any kind of event, ranging from click to installs to any in-app event triggered by your traffic.

If you want to receive revenue or partner parameters (available on session, install, reattribution, and event callbacks), you will need to ensure that your client(s) have enabled the Revenue Sharing and Parameter Forwarding toggles in their Dashboard under Partner Setup > External Data Forwarding.

3.1Types of callbacks

You can receive callbacks for any type of event that is tracked by the end client.

Event Description Parameter name
click Clicks on Adjust tracker URLs click_callback
impression Impressions on Adjust tracker URLs impression_callback
install User opens the app for the first time install_callback
reattribution User opens the app after a re-engagement reattribution_callback
conversion Reattribution or new install conversion_callback
session Any session in the app session_callback
in-app events Any in-app event as defined by the client event_callback_[token]
rejected install An install was identified as fraudulent and the attribution rejected rejected_install_callback
rejected reattribution A reattribution was identified as fraudulent and the source of attribution rejected rejected_reattribution_callback

See the following sections for details on how to fill these parameters. If your client is using Adjust’s Fraud Prevention Suite, you can find information on rejected install and reattribution callbacks in this section.


We can pass additional information in the form of GET parameters in your callback URL. To receive these, add placeholders into the callback that you concatenate, and we will fill them in when we send the request.

You can, of course, add several parameters in a row and receive several variables.

For example, to receive the country from which a click, install, reattributions (conversions from retargeting or re-engagement campaigns) or in-app event came, embed the {country} placeholder as a parameter to your tracking system. Include several parameters with an ampersand:{country}{country}&device_id={adid}{country}&device_id={adid}{country}&event_id={event}

This is what they look like, once you have encoded them according to 2.2:

Finally, append these as the appropriate callback in the tracker URL, making it look like:

The country placeholder will be parsed to the country code in question, and included as a parameter to your callback. Please note the table of placeholders and their availability for different callbacks. If a placeholder is not available, it will be replaced with an empty string (“”).

3.3In-app event callbacks

In addition to the installation callback, we provide you with the option to track any in- app event triggered by the user after installation.

Any callback attached to the event_callback parameter receives a request whenever an event is triggered, but you can further differentiate by using the {event} placeholder.

Attach the event callback according to this format:{event}

When an in-app event is triggered, Adjust will fill in the placeholder and send an event token to you.

You can also receive event postbacks for specific events by specifying a particular event token for a particular callback URL. This is particularly useful if you only want to track a single type of conversion, or if your ad server defines specific URLs for specific kinds of events (e.g. one URL for sales, another for registrations and so on). Your client provides you with the event tokens that Adjust generates.

For instance, if you are only interested in a ‘sale’ event - represented by the event token def456 - you can set your conversion URL as the event_callback_def456 parameter:

The encodedcallbackurl will only be called when the event def456 is triggered. You can of course also add several specified event callbacks:

Or if all your event callbacks are identical you can lump them together:

You can use our {event} placholder in your encoded callback url to get the Event Token back so that you are able differentiate the events on your side.

Specifying event callbacks allows most kinds of ad servers to integrate with Adjust. If you have any questions about your particular setup, please get in touch with

3.4Reattribution callbacks

You have an option to be notified when any user is succesfully reattributed through your advertising activities. Any callback attached to the reattribution_callback parameter receives a request whenever a user, who clicked on your placement containing an Adjust tracker, is reattributed. Example:

All future events triggered by the reattributed user will be attributed to the new tracker. Further, if set, appropriate event callbacks will be fired to you. While reattribution callbacks are an option for your reattribution campaigns, you cannot be notified about the users who were previously attributed to you, but have been reattributed to another network after being inactive.

For more information please refer to our guide on retargeting.


We provide you with a test interface so you are able to see if your callbacks work as expected. If you want to see how a triggered callback would look like just call

This should immediately trigger the callback without the need for a test install. You may use “callback”, “install_callback” or “event_callback” as parameters for testing. If you are having trouble with the test interface, please contact

Additionally, if you wish to run full end-to-end tests using a live tracker and a live app, you can request a tracker from your client and test a live URL. This will behave similarly to the cbtest utility. In doing so, keep in mind that Adjust will permanently attribute your device to your tracker when you install the app for the first time.

You need to either use a fresh device for each test, or clear our servers’ attribution of your device ahead of each test. To clear your device, please reach out to

If everything works, go ahead and request to appear on our integrated partners list.

4Fraud Callbacks

Clients can enable the Adjust Fraud Prevention Suite on a per-app basis within their dashboard; when enabled, attributions meeting certain criteria are rejected and attributed as organic.

A rejected_install_callback with the {rejection_reason} placeholder embedded, can be attached to a tracking URL like so:{rejection_reason}

Currently, Adjust populates the {rejection_reason} placeholder with the following values:

  • Anonymous traffic: This traffic was flagged by Adjust’s anonymous IP filtering feature for having a blacklisted IP belonging to a known data center, VPN, Tor exit node or other anonymizing service
  • Too many engagements: These are installs attributed to a click which, according to Adjust’s distribution modeling feature, were deemed fraudulent due to excessive engagements
  • Distribution outlier: These are installs that fell outside of Adjust’s threshold for click-to-install time, as calculated through our distribution modeling
  • Engagement injection: These are installs attributed to a click executed with fraudulent intent that came in between an app download and first session. This is part of our click injection filtering.
  • Invalid signature: These are installs that came through with an invalid SDK signature or no SDK signature at all.

It is possible that one attribution triggers both an accepted install callback AND a rejected install callback. If for example one install can be matched to two clicks, and one is deemed fraudulent a rejected install callback would be sent for the fraudulant click and a regular install callback would be sent for the accepted click.

To learn more about how the Fraud Prevention Suite works for clients and the specifications for rejected traffic, read our Fraud Prevention Suite docs.

5Campaign Wizard

The Adjust Campaign Wizard allows clients to produce and customize tracker URLs within the Adjust Dashboard. This includes linking trackers to networks, so Adjust can automatically apply your recommended campaign structure, macros, and mandatory parameters to the generated tracker URL.

Adjust can also automatically append postback URLs, if they have been provided to us. The benefit of this is that you no longer have to manually append your postback URLs to the tracker URLs your client shares with you.

If you are interested in becoming integrated into the Adjust Campaign Wizard, you can complete the Adjust Technology Partners registration form or reach out to our integrations team at

6Injecting publisher or creative IDs in client dashboards

You can send any arbitrary data for segmentation into your clients’ dashboard by using campaign structure parameters on the click URLs. These are often used to pass publisher IDs or similar in order to allow your clients to use this in their reporting. When you add a campaign structure parameter, Adjust will group incoming users under the labels that you provided. Usually, this will mean placing your publisher ID macro as one of the available campaign structure parameters.

The available campaign structure parameters are:

campaign 	one level underneath a top-level tracker
adgroup 	two levels underneath a top-level tracker
creative 	three levels underneath a top-level tracker

These should be used in descending orders of segmentation, i.e. campaign should be used for the largest segmentation (like countries, campaigns or regions), adgroup for a lower segmentation (like targeting), and creative for the lowest level (like creative or publisher IDs). Your client may already be using some of these levels - please confirm with your clients before entering.

When you provide campaign structure data, this will be used to generate a new tracker with a lower level. Each tracker may be at any one of these levels. You can enter data for lower levels of segmentation, but if these conflict with the pre-existing segmentation (for example by adding a campaign parameter to a second-level tracker ID), the data from the tracker ID will be prioritized. Please confirm with your client which levels are still available and how they would like you to structure the campaigns.

If your macro or placeholder for publisher IDs is, for example, {publisher_id}, you could add it as the lowest level of segmentation by adding it as the creative parameter:


Your server will replace the macro and send us the publisher ID data as the lowest level of segmentation. When you do, the publisher ID will be available in the clients’ reporting. If you have any questions, feel free to reach out at

7Sending device IDs to improve conversion tracking

Adjust generally uses digital fingerprinting to track conversions, which relies on temporary environment variables. This may underreport conversions as fingerprints expire.

For increased accuracy, please provide us with a unique device identifier, which we can refer to in the SDK. We currently support a number of different device identifiers in different formats, according to the table below:

Parameter Device ID Format
gps_adid Raw Google advertising ID With hyphens (“-“)
gps_adid_upper_md5 Hashed Google advertising ID MD5 of uppercased value with hyphens
gps_adid_upper_sha1 Hashed Google advertising ID SHA1 of uppercased value with hyphens
gps_adid_lower_sha1 Hashed Google advertising ID SHA1 of lowercased value with hyphens
android_id Raw Android ID  
android_id_lower_md5 Hashed Android ID MD5 of lowercased value
android_id_lower_sha1 Hashed Android ID SHA1 of lowercased value
android_id_upper_md5 Hashed Android ID MD5 of uppercased value
android_id_upper_sha1 Hashed Android ID SHA1 of uppercased value
idfa Raw IDFA Uppercase, with hyphens
idfa_lower_md5 Hashed IDFA MD5 hash of lowercased value with hyphens
idfa_lower_sha1 Hashed IDFA SHA1 hash of lowercased value with hyphens
idfa_upper_md5 Hashed IDFA MD5 hash of uppercased value with hyphens
idfa_upper_sha1 Hashed IDFA SHA1 hash of uppercased value with hyphens
idfa_short Raw IDFA Without hyphens (“-“)
idfv Raw IDFV Uppercase, with hyphens
mac_upper_short_md5 Hashed Wifi MAC MD5 of uppercased value without colons
mac_upper_sha1 Hashed Wifi MAC SHA1 of uppercased value with colons
fire_adid Raw Amazon Fire advertising ID Lowercase, with hyphens
win_adid Raw Windows advertising ID Without hyphens (“-“)
win_naid Raw Windows Phone device ID With hyphens (“-“)
win_hwid Raw Windows Phone device ID Without hyphens (“-“)


  • MAC is only supported for legacy reasons and only in hashed form. For example, to add the “short” IDFA (without hyphens) to your tracking, add your parameter as the DeviceID in a URL along this format:
  • The IDFV should be used when running cross-promotional campaigns (e.g., via email) targeting users with LAT enabled. The IDFV provides more accurate attribution than only relying on device fingerprinting.

Please note that device ID types must match the parameter name at all times or be blank. If you submit an ID of an incorrect format, we may have to discard conversions in order to reach a certain level of statistical accuracy. Our systems must presume that the IDs are correct and we have no way of checking that hashes are derived from the correct type of ID. If your device IDs are inconsistent or of the wrong type, then conversion numbers will be irreparably underreported.

7.1Using Google Play referrer tracking

Adjust automatically appends tracking data to the Google Play referrer when the user is redirected into the Store, using the Google Play referrer to match click to installs. This is done automatically, in the background.

8Server-to-server clicks

Adjust works better when the user is made fully visible via a redirect. In some cases, however, we can support a server-to-server click. Please contact for go-ahead on any campaigns with server-to-server clicks.

In order to correctly analyze server-to-server clicks, you need to notify Adjust that the click is being reported from a server, not the end user. Additionally, server-to-server clicks cannot benefit from fingerprinting logic and so you must make available device IDs for tracking, as in the section above, or pass a referrer.

8.1S2S clicks via device IDs

For the device IDs, you need to provide a placeholder that your adservers will replace with a correct ID. This is not the Adjust placeholder; instead, it is specific to your servers. Assuming the placeholder for e.g. IDFA is [idfa], a correct server-to-server click call might look like:[idfa]&s2s=1

This should include any of the device IDs in the parameters specified above as well as the s2s parameter set to 1. If you do not add these parameters, the clicks will be ignored (in order to prevent bot fraud) and no attributions will be reported.

8.2S2S clicks via referrer

If you do not have access to device IDs on click, it is also possible to send s2s clicks with a referrer instead. For that, you would need to send to Adjust:[clickid]&s2s=1

And send to the store:[clickid]%26.....

Note that external_click_id and adjust_external_click_id are mandatory Adjust parameters.

8.3Sending distribution data with S2S clicks

To provide clients with multiplatform app data for clicks and impressions, it is necessary to append the os_name parameter in order to allow the filtering of clicks and impressions within the dashboard. You can additionally provide your client with device type and IP address information using the device_type and ip_address parameters, respectively.[idfa]&s2s=1&device_type=[device_type]&os_name=[os_name]&ip_address=[ip_address]

Similarly, these placeholders should be determined and replaced by your adserver.

Note that we support and interpret a range of device type names, but they should confirm to a generalize format where device_type is set to for example iphone, tablet or mobile without version numbers. os_name should be set to the OS name in lowercase e.g. ios, android, windows or similar.

9Tracking iOS 10+ devices with Limit Ad Tracking enabled

Any users on devices running iOS 10 or later that have Limit Ad Tracking enabled will be untrackable via IDFA. When building a user database, or sending events/clicks via s2s, it is strongly advised that you use the ADID {adid} as your main identifier.

The are several ways to retrieve the ADID:

10Impression tracking

Adjust fully supports impression tracking. Impressions must be reported to a separate endpoint, and will be attributed via a different attribution model. For instructions on how to set up impression-tracking URLs, please check out the impression tracking guide.

You must use impression tracking URLs when reporting impressions. Impressions that are reported to other endpoints may be discarded.

Example impression tracker URL:

You can append callback parameters to impression tracker URLs in the same way as you would a click tracker URL.

Please contact for more information.

11Hiding your callback structure

If your callbacks’ integrity should rely on being secret we’ll provide you with a placeholder for the static part of your URL. Just contact to specify how your callback looks like, and what are the static parts. After we setup a placeholder for you, you’ll be able to call the placeholder like any normal callback URL.

For example, if your callback URL looks like:

where only the click ID is dynamic, we can create a placeholder (mynetwork) to correspond to your base URL, making your visible install postback:


as your callback URL. The full call would thus look like:

This needs to be set up by our team in the backend, so please contact


If there is a scenario where someone would be interested in falsifying the triggering of your callbacks, then you should protect your HTTP handler by only allowing Adjust’s servers to make those calls. The callbacks are all coming from two subnets:

This is subnet notation; you can find the full list of Adjust server IPs here.

Depending on the structure of your callback interface you could either block fraudulent calls on application level or using a proxy. An example using nginx would look like:

	location /callback {
             	// add this condition to only check callbacks having an "adjust" parameter
             	// set to 1 for the origin - if this location only processes Adjust calls,
             	// remove the condition
	if ($arg_adjust = 1) {
	allow; allow; deny all;
	} }

Using this config you can simply add an “&adjust=1” to your callbacks and they will be checked for the correct origin IP, making fraudulent calls impossible. If you need assistance setting up your proxy or application please contact

13Integrating SKStoreProductView

If you want to take advantage of the Apple iOS SKStoreProductView, which opens the App Store application within the application to dramatically increase your ad conversions, then a callback providing click functionality needs to be included in your SDK.

To help you with the process, we provide this wrapper. It will provide the required callback.