Skip to main content

Adjust data integration solution

Last updated 10/05/2026

Last updated: 2023-03-24

1. Integration plan overview​

tip

Note that data generated by third-party data integration counts toward the cluster's data consumption

Summary​

This document describes how to send Adjust data back to Agentic Engine (hereinafter the AE system). This solution supports:

  • Sending back user-level raw data through the real-time callback feature, covering conversion, monetization, and other data
  • Sending back aggregated data through the Report Service API, covering impressions, clicks, costs, monetization, and other data
  • If you plan to report raw data with real-time callbacks, read the AE system user identification rules to learn how AE identifies a user through #distinct_id and #account_id.
  • If you plan to get aggregated results through Report Service, make sure you have read the AE system data rules and understand AE's data structure. We also recommend that you give the information needed to pull data to our customer success manager, using the format in the data integration configuration template.

Process​

  • If you use the real-time callback solution, follow this process to connect your data:
  1. Integrate the Adjust client SDK and the AE client SDK. Set the AE user identification ID in the Adjust SDK, and set the Adjust ID and the Android ID / IDFA / Web UUID in the AE SDK (we recommend reporting custom registration/character creation events in the Adjust SDK)
  2. In the Adjust dashboard, set up a global callback or single event callbacks
  3. ThinkingAI staff complete the data pull development, including retroactively linking user data
  4. Build dashboards and reports in the AE backend, and complete data validation
  • If you use Report Service to send back aggregated data, follow this process:
  1. In the Adjust dashboard, get the Adjust User Token (API Token) and the Adjust App Token, and provide them to ThinkingAI staff
  2. Determine the data dimensions, metric types, time range, and time granularity to pull
  3. ThinkingAI staff complete the data pull development
  4. Build dashboards and reports in the AE backend, and complete data validation

2. Real-time callback solution​

InterfaceAPI typeProductizedData granularityAttributionCostRevenueImpressionsClicksConversions
Real-time callbacksPushYesUser levelYesYesYes

Adjust provides real-time callbacks for a range of events. Select the data types to send back in the Adjust dashboard and set the AE system's callback link as the callback URL to receive detailed user-level data.

2.1 Configure the client SDK​

2.1.1 Set the user ID​

Option 1 (automatic association):

tip

If the AE SDK version you integrated is 2.8.0~2.8.1, you can use this option directly

If the AE SDK version you integrate is 2.8.2 or later, you also need to install the third-party data plugin

For details, see Android SDK third-party data and iOS SDK third-party data

// Initialize the AE SDK
ThinkingAnalyticsSDK instance = ThinkingAnalyticsSDK.sharedInstance(this, TA_APP_ID, TA_SERVER_URL);
// Enable Adjust ID association
instance.enableThirdPartySharing(TDThirdPartyShareType.TD_ADJUST);

// Initialize the Adjust SDK
// ...

// After registration or character creation, call login to set the account ID, then sync the data again (optional)
instance.login("account_id");
instance.enableThirdPartySharing(TDThirdPartyShareType.TD_ADJUST);

This option works by automatically calling the Adjust SDK's addSessionCallbackParameter() method internally to pass in the distinct ID and account ID of the AE project.

Option 2:

In this option, you manually call the Adjust SDK's addSessionCallbackParameter() method to set the distinct ID and account ID of the AE project.

// Get the AE distinct ID, which corresponds to #distinct_id in AE
String distinctId = ThinkingAnalyticsAPI.GetDistinctId();
// Your account ID (or character ID), which corresponds to #account_id in AE
String accountId = "{your_account_id}";

Adjust.addSessionCallbackParameter("ta_distinct_id", distinctId);
Adjust.addSessionCallbackParameter("ta_account_id", accountId);

// Initialize the Adjust SDK
// ...
tip

To make sure the AE user IDs can be obtained correctly, don't use addCallbackParameter in the Adjust SDK to report the AE account ID and distinct ID again

2.1.2 Set a registration or character creation event (optional)​

To make sure user binding works as expected, set a custom event based on the type of account ID you set in the AE SDK:

  • If the account ID is the user's account ID: report the event with the Adjust SDK when the user creates an account
  • If the account ID is a character ID (gaming industry): you can report the event with the Adjust SDK when the user creates a character

2.1.3 Web configuration​

Because the web differs greatly from mobile, you need to get web_uuid in the Adjust Web SDK with the following code, report it through the AE SDK, and set it as a user property:

const webUUID = Adjust.getWebUUID();

Then, when you configure the callback link later, use the {web_uuid} placeholder in the callback so that the data can be associated with the user data of the AE project.

2.2 Configure the callback link​

After you configure the client SDK, set up the real-time callback interface in the Adjust dashboard so that you can receive user-level detailed data from Adjust.

2.2.1 Choose a callback method​

Adjust supports configuring a global callback as well as single event callbacks. Because ad revenue events don't support the global callback, we recommend that you configure a separate callback for each event.

The following are the events that Adjust supports for callbacks, and the events we recommend connecting:

EventEvent nameRecommended
Impressionsimpressions
Clicksclicks
InstallinstallYes
Ad revenue (with Ad Revenue package)ad revenue (with Ad Revenue package)Yes
Ad spendad spend
Conversationssessions
App eventsapp eventsAs needed
Reattributionsreattributions
Uninstallsuninstalls
Reinstallsreinstalls
Reattribution reinstallsreattribution reinstalls
Updated attributionsupdated attributions
Erased users (GDPR)erased users (GDPR)
SAN clicksSAN clicks
SAN impressionsSAN impressions
SKAdNetwork installsSKAdNetwork installs
SKAdNetwork eventsSKAdNetwork events
Subscriptionssubscriptions
ATT status updates (iOS)ATT status updates (iOS)
Rejected installsrejected installs
Rejected reattributionsrejected reattributions

2.2.2 Configure callback links​

We recommend that you list all the events you need callbacks for in the data integration configuration template and send the template to ThinkingAI staff. ThinkingAI staff will send you the callback link for each event. Set each callback URL in the position marked by the red box in the image below.

2.2.3 Configure callback placeholders​

A callback placeholder is an expression in a callback link that specifies a callback parameter, usually enclosed in {}. For example, the {campaign_name} placeholder means that the callback data will carry the value of campaign_name. Different callback data supports different placeholders. You can visit the Adjust placeholder documentation for more information. If you need to add placeholders, find the properties to add in the document above and specify them in the data integration configuration template.

2.3 Data ingestion rules​

By default, we write the pulled data into the AE project as events, one event per callback record:

  • ta_distinct_id and ta_account_id in the data are used as the user identification IDs of the AE project
  • The created_at_milli field in the data is used as the event's #event_time. If created_at_milli does not exist, the value of created_at is used as #event_time
  • The event name is the Adjust event name with the prefix adjust_ (for example, the impression event is stored as adjust_impression)
  • All other fields configured in the callback link are stored

By default, if ta_distinct_id and ta_account_id can't be obtained from the data, the record is treated as invalid and discarded. If you want to keep this data, contact ThinkingAI staff to configure it. This data is then recorded in the event table with the fixed distinct ID "without_id", and no user properties are stored for it

The callback data for impression, click, and Ad spend doesn't contain the user identification ID of the AE project. If you want to connect this kind of data, the AE system automatically attaches it to a "virtual user".

Then, if these events contain fields that can identify users (such as adjust_id and Android ID/IDFA, or web_uuid), and the user properties also contain the corresponding fields, ThinkingAI staff can link these events to AE users on a schedule by backfilling the data

Data typeDescriptionEvent name in AEVirtual user of the event
impressionImpressionsadjust_impressionadjust_impression_vu
clickClicksadjust_clickadjust_click_vu
cost_updateCostadjust_cost_updateadjust_cost_update_vu

3. Report Service API​

Adjust's user-level data (the real-time callback interface) doesn't include cost data from self-attributing networks (Google, Facebook, etc.), so you can get aggregated cost data across all networks through Report Service.

For details, see: https://help.adjust.com/zh/article/reports-endpoint

Basic interface information

InterfaceAPI typeProductizedData granularityAttributionCostRevenueImpressionsClicksConversions
Report Service APIPullNoAggregated dataYesYesYesYesYes

3.1 Before you begin​

Get the following parameters and send them to ThinkingAI staff:

  • Adjust User Token (the user's API Token)
    • You can get your API Token in the Adjust dashboard. Click the menu in the upper left corner and select Account settings (admin users select My account, find User details on the Your data tab, and click the gear button at the bottom), then click API token to get your API Token
  • Adjust App Token
    • You can get the App Token of the app you want to connect in the Adjust dashboard

3.2 Data pull​

3.2.1 Analysis dimensions​

The following are the analysis dimensions that Report Service supports, including time granularity (select only one) and grouping dimensions (multiple selections allowed)

  • Time granularity
DimensionData typeDescriptionExampleDefault

hour

DateDate value in ISO format: YYYY-MM-DDTHH:MM:SS

2021-05-11T17:00:45

dayDateDate value format: YYYY-MM-DD2021-05-11Yes
  • Grouping dimensions
DimensionData typeDescriptionExampleDefault

os_name

String

Operating system

Values: android, Bada, blackberry, iOS, Linux, Mac OS, server, symbian, unknown, WebOS, Windows, windows-phoneYes

device_type

StringDevice TypeValues: bot, console, iPod, Mac, PC, phone, server, simulator, tablet, TV, unknownYes
appStringApp name-Yes
app_tokenStringApp ID in Adjust-Yes
store_idStringStore app IDcom.random.appYes
store_typeStringStore the app was installed fromgoogle_playYes

app_network

StringApp identifier

Format: <store_type>:<store_id>

Example: google_play:com.random.app

Yes
currencyStringCurrencyEuroYes
currency_codeString3-character ISO 4217 currency codeEURYes

network

StringName of the ad networkValues: Organic, AppLovin, Facebook Installs, Instagram Installs
campaignStringIncludes the campaign name and ID-Yes
campaign_networkStringCampaign name from the network-Yes
campaign_id_networkStringCampaign ID from the network-Yes
adgroupStringIncludes the ad group name and ID-Yes
adgroup_networkStringAd group name from the network-Yes
adgroup_id_networkStringAd group ID from the network-Yes
source_networkStringOptional value depending on the network, usually the same as adgroup_network-Yes
source_id_networkStringsource_app value-Yes
creativeStringIncludes the creative name and ID-Yes
creative_networkStringCreative name from the network-Yes
creative_id_networkStringCreative ID from the network-Yes
countryStringCountry/region nameUnited States of AmericaYes
country_codeString2-character ISO 3166 country/region code

US

Yes
regionStringBusiness regionAPACYes
partner_nameStringPartner name in the Adjust systemAppLovinYes
partner_idStringPartner ID in the Adjust system34Yes

3.2.2 Included metrics​

Report Service supports a wide range of metrics. This section shows only some commonly used ones. You can visit the Adjust documentation for the detailed metric list. If you need to customize the metrics to pull, note them in the data integration configuration template

  • Conversion metrics
FieldDefinitionFormulaField nameDefault
Average DAUsAverage daily active users in the selected period(D0 DAU + D1 DAU + DAY N DAU) / number of days in the selected perioddausYes
Average MAUsAverage MAU in the selected period(M0 MAU + M1 MAU + MONTH N MAU) / number of months in the selected periodmausYes
Average WAUsAverage WAU in the selected period(W0 WAU + W1 WAU + WEEK N WAU) / number of weeks in the selected periodwausYes

Base sessions

Number of user sessions, excluding installs and reattributions-base_sessionsYes
ClicksNumber of tracked clicks-clicksYes
Clicks (network)Number of clicks reported by the network API-network_clicksYes
Click conversion rate (CCR)Ratio of installs to clicksInstalls / clicksclick_conversion_rateYes
Click-through rate (CTR)Ratio of clicks to impressionsClicks / impressionsctrYes
DeattributionsNumber of deattributions-deattributionsYes
GDPR forgetsNumber of users who exercised the right to be forgotten under the EU GDPR. Adjust permanently deletes the personal data of these users-gdpr_forgetsYes
ImpressionsNumber of tracked ad impressions-impressionsYes
Impressions (network)Number of ad impressions reported by the network API-network_impressionsYes
Impression conversion rateRatio of installs to impressionsInstalls / impressionsimpression_conversion_rateYes
InstallsNumber of tracked users who installed your app-installsYes
Installs (network)Number of installs reported by the network API

-

network_installsYes
Install differenceDifference between installs and the installs reported by the network APIInstalls - installs (network)network_installs_diffYes
Installs per mille (IPM)Number of installs per 1,000 ad impressions1000 * impression conversion rateinstalls_per_mileYes
Limit ad tracking installsNumber of installs from devices with limit ad tracking (LAT) enabled-limit_ad_tracking_installsYes
Limit ad tracking install rateRatio of limit ad tracking installs to installsLimit ad tracking installs / installslimit_ad_tracking_install_rateYes
Limit ad tracking reattributionsNumber of reattributions from devices with limit ad tracking (LAT) enabled-limit_ad_tracking_reattributionsYes
Limit ad tracking reattribution rateRatio of limit ad tracking reattributions to reattributionsLimit ad tracking reattributions / reattributionslimit_ad_tracking_reattribution_rateYes
Non-organic installsNumber of installs from users not attributed as organic-non_organic_installsYes
Organic installsNumber of installs from users attributed as organic-organic_installsYes
ReattributionsNumber of reattributed users-reattributionsYes
Reattribution reinstallsNumber of reinstalls by reattributed users-reattribution_reinstalls
Reinstalls

Number of reinstalls

Requires the Uninstall and Reinstall Growth Solution

-

reinstalls

(otherwise the request returns an error)

Total sessionsTotal sessions include installs and reattributionsbase_sessions + installs + reattributionssessionsYes
  • Cost metrics
FieldDefinitionFormulaField nameDefault
Ad spendTotal ad spend (determined by the pull parameters)Click spend + impression spend + install spendcostYes
Ad spend (attribution)Ad spend tracked by AdjustClick spend + impression spend + install spendadjust_costYes

Ad spend (network)

Ad spend reported by the network APIClick spend + impression spend + install spendnetwork_costYes
Ad spend differenceDifference between ad spend (attribution) and ad spend (network)Ad spend (attribution) - ad spend (network)network_cost_diffYes
Click costCost spent on ad clicks-click_costYes
Paid clicksNumber of ad clicks with ad spend-paid_clicksYes
eCPI (all installs)Average effective spend across all installsAd spend / installsecpi_allYes
eCPI (network)Average effective spend per install reported by the network APIAd spend reported by the network API / installs reported by the network API

network_ecpi

Yes
eCPI (paid installs)

Average effective spend per paid install

Ad spend reported by the network API / paid installsecpiYes
eCPM (attribution)eCPM data reported from attribution data(Ad spend / paid impressions) * 1000ecpmYes
eCPM (network)eCPM data reported by the network API(Network spend / network paid impressions) * 1000network_ecpmYes
eCPCAverage effective spend per clickAd spend / paid clicksecpcYes
Impression costCost spent on impressions-impression_costYes
Paid impressionsNumber of paid impressions with ad spend-paid_impressionsYes
Install costCost spent on installs-install_costYes
Paid installsNumber of paid installs with ad spend-paid_installsYes
  • Revenue metrics
FieldDefinitionFormulaField nameDefault
Ad impressionsTotal number of ad impressions-ad_impressionsYes
Ad revenueTotal ad revenue-ad_revenueYes
Cohort ad revenue

Ad revenue to date from users who installed during the selected period

Example: if the selected period is 1/1 to 1/31 and today is 5/1, the ad revenue up to 5/1 from users who installed between 1/1 and 1/31 is calculated

-

cohort_ad_revenue

Yes
Ad RPMAverage revenue per 1,000 ad impressions(Ad revenue / ad impressions) * 1000ad_rpmYes
IAP revenueIAP revenue-revenueYes
Cohort IAP revenue

IAP revenue to date from users who installed during the selected period

Example: if the selected period is 1/1 to 1/31 and today is 5/1, the IAP revenue up to 5/1 from users who installed between 1/1 and 1/31 is calculated

-

cohort_revenue

Yes
Total revenueTotal revenue including ad revenue and IAP revenueAd revenue + IAP revenueall_revenueYes
Cohort total revenue

Total revenue to date from users who installed during the selected period

Example: if the selected period is 1/1 to 1/31 and today is 5/1, the total revenue up to 5/1 from users who installed between 1/1 and 1/31 is calculated

Cohort IAP revenue + cohort ad revenuecohort_all_revenueYes
ARPU (all)Average revenue per active user, including all revenueTotal revenue / total DAUarpdauYes
ARPU (ads only)Average revenue per active user, including ad revenue onlyAd revenue / total DAUarpdau_adYes
ARPU (IAP only)Average revenue per active user, including IAP revenue onlyIAP revenue / total DAUarpdau_iapYes
Gross profitTotal revenue minus total costTotal revenue - total costgross_profitYes
Cohort gross profitGross profit of users who installed during the selected periodCohort total revenue - costcohort_gross_profitYes
Cohort ROIGross profit of users who installed during the selected period divided by costCohort gross profit / costreturn_on_investmentYes
IAP eventsNumber of tracked in-app purchase events-revenue_eventsYes
Revenue to cost ratio (RCR)Ratio of revenue to cost for users who installed during the selected periodCohort total revenue / total costrevenue_to_costYes
ROAS (total revenue)ROAS calculated on total revenue(Ad revenue + IAP revenue) / costroasYes
ROAS (ad revenue)ROAS calculated on ad revenue onlyAd revenue / costroas_adYes
ROAS (IAP revenue)ROAS calculated on IAP revenue onlyIAP revenue / costroas_iapYes

3.2.3 API parameters​

  • Time:

    • Data can be pulled by day
    • The time zone can be customized

3.2.4 Ingestion rules​

  • Because Report Service returns aggregated data, we use a fixed value as the user identifier. You can think of all the data as attached to one virtual user
  • The day or hour field in the data, that is, the date of the data, is set as the #event_time of the aggregated data
  • The event name for Report Service data is adjust_report_service_ad_spend
  • All other metric and dimension fields are stored

3.3 Data integration configuration template​

After reading the documentation above, we recommend that you fill in the following template and send it to your customer success manager at ThinkingAI. We will pull the Adjust Report Service data based on this template:

Data interface: Adjust Report Service
---------
Company name: XXX
AE project environment: (SAAS/on-premises)
AE project name: XXX
AE project APP ID: XXX
Data receiving URL push_url: XXX
---------
Adjust User Token (API Token): XXX
Adjust App Token: XXX
---------
API configuration
Time range for historical data pull: yyyy/mm/dd - yyyy/mm/dd
Pull data for the last X days on a schedule (Adjust corrects data after the fact, so we recommend pulling the last few days of data on a schedule to make sure you get the corrected data)
Time granularity: (day/hour)
Grouping dimensions: xxx,xxx
Aggregated metrics: xxx,xxx

4. Integration testing and data usage after integration​

  1. Integration testing

You can view the related attribution data on the Management > User properties page:

Adjust callback fieldDescriptionUser property name in AEData type
network_nameChannel#adjust_network_nameText
campaign_nameCampaign#adjust_campaign_nameText
adgroup_nameAd group#adjust_adgroup_nameText
creative_nameAd creative#adjust_creative_nameText

If you have enabled event table ingestion, view the related event data on the Management > Events page. The event names are the same as those defined in Adjust. The event mapping for impression, click, cost_update, and ad_revenue is as follows:

Value of activity_kindDescriptionEvent name in AE
impressionImpressionsadjust_impression
clickClicksadjust_click
cost_updateCostadjust_cost_update
ad_revenueRevenueadjust_ad_revenue

5. FAQ​

See the Adjust FAQ section

6. Empty channel name for Facebook (Meta)​

See the article Adjust attribution channel name shows Unattributed

Was this page helpful?