Impression Level Data

DT FairBid enables you to access detailed information for each impression through the impressions callback APIs. The information includes, for example, which demand source served the ad and its expected or exact revenue.

You can call two different APIs that refer to different stages in the impression's lifetime:

  • (OnShow): When the ad appears.
  • (OnAvailable): Before the ad appears, once a Fill becomes available.

The following table describes Impression Level Data attributes.

Property Name Description
advertiserDomain A unique identifier for a set of campaigns for the same advertiser.
campaignId A unique identifier that represents a Campaign.
countryCode Identifier of the country of the ad impression (in ISO country code).
creativeId A unique identifier that represents the creative in the bid response.
This  can be useful when a particular creative causes user experience issues.
currency Currency of the payout.
demandSource Identifies the demand source name of the buy-side/demand-side entity that purchased the impression:
  • When mediated networks win an impression, the mediated network's name appears.
  • When a DSP buying through the programmatic marketplace wins the impression, the DSP's name appears.
impressionDepth The number of impressions in the current session for the given Placement Type.
impressionId A unique identifier for a specific impression.
requestId Unique ID of the bid request.
jsonString A JSON representation of the data serialized to a String.
netPayout Net payout for an impression.
The value accuracy is returned in the priceAccuracy field. The value is provided in units returned in the currency field.
networkInstanceId The mediated ad network's original Placement/Zone/Location/Ad Unit ID that you created in their dashboard.
For ads shown by the DT Exchange, the networkInstanceId is the Placement ID you created in the DT Console.
placementType Defines the format and location of ads:
  • Banner: Rectangle ads appear either at the top or bottom of the screen. The user can view them but cannot dismiss them.
  • Rewarded: Full-screen ad format that shows a short video ad to the user. Upon completion of the video, the user will earn a reward.
  • Interstitial: Static or video full-screen ads. The user can view and then immediately dismiss them. This is a non-rewarded format for the user.
priceAccuracy Accuracy of the netPayout value:
  • Programmatic: netPayout is the exact and committed impression value available when programmatic buyers win impressions.
  • Predicted: DT's estimation of the impression value is based on historical data from non-programmatic mediated network's reporting APIs.
  • Undisclosed: The demand source does not agree to disclose the payout of every impression; in such cases, the netPayout is 0.
renderingSDK Name of the SDK in charge of rendering the ad.
renderingSDKVersion The version of the SDK rendering the ad.
When AdMob renders an impression, the renderingSDKVersion shows the Google Play Services version.
variantId A unique identifier that represents the variant delivered to the device.

Impression Data Upon Showing the Ad

All ad formats, Banners, Interstitials, and Rewarded, provide you access to the ImpressionData object through their callback APIs:

Android iOS Unity
Kotlin
Interstitial.setInterstitialListener(object : InterstitialListener {

    override fun onShow(placementId: String, impressionData: ImpressionData) {
        val netPayout = impressionData.netPayout
        val currency = impressionData.currency
        val priceAccuracy = impressionData.priceAccuracy
        val impressionDepth = impressionData.impressionDepth

        val message = "Placement $placementId has been shown with a " +
                      "net payout of $netPayout $currency " +
                      "with accuracy: $priceAccuracy " +
                      "and impression depth: $impressionDepth"

        Log.d(TAG, message)
    }
})

val placementId = "12345"

if (Interstitial.isAvailable(placementId)) {
    Interstitial.show(placementId, context)
}
Expected log output:
Placement 12345 has been shown with a 
net payout of 4.000000 USD 
with accuracy: PREDICTED and 
impression depth: 1
Java
Interstitial.setInterstitialListener(new InterstitialListener() {

    @Override
    public void onShow(@NonNull String placementId, @NonNull ImpressionData impressionData) {
        double netPayout = impressionData.getNetPayout();
        String currency = impressionData.getCurrency();
        ImpressionData.PriceAccuracy priceAccuracy = impressionData.getPriceAccuracy();
        int impressionDepth = impressionData.getImpressionDepth();

        String message = String.format("Placement %s has been shown with a net payout of %f %s " +
                                       "with accuracy: %s and impression depth: %d", 
                                       placementId, netPayout, currency, priceAccuracy, impressionDepth);

        Log.d(TAG, message);
    }
});

String placementId = "12345";

if (Interstitial.isAvailable(placementId)) {
    Interstitial.show(placementId, context);
}
Expected log output:
Placement 12345 has been shown with a 
net payout of 4.000000 USD 
with accuracy: PREDICTED and 
impression depth: 1

Impression Data Before Showing the Ad

You can also access the same information before showing the ad. This information will be available once you have a fill for that placement. If the placement for which you request the impression data does not have a fill, the API will return nil.

Important

Calling this API at different moments may result in different values for the impression depth field since impression depth is counted for the ad type, regardless of placement. For more information, see Impression Depth.

Banner

Android

Use this query in conjunction with loading a banner. For more information, see Loading a Banner.

Kotlin
val bannerView = BannerView(requireContext(), placementId)
val impressionData = bannerView.impressionData

Interstitial

Android iOS Unity
Kotlin
override fun onAvailable(placementId: String) {
    val impressionData = Interstitial.getImpressionData(placementId)
}
Java
@Override
public void onAvailable(String placementId) {
    ImpressionData impressionData = Interstitial.getImpressionData(placementId);
}

Rewarded

Android iOS Unity
Kotlin
override fun onAvailable(placementId: String) {
    val impressionData = Rewarded.getImpressionData(placementId)
}
Java
@Override
public void onAvailable(String placementId) {
    ImpressionData impressionData = Rewarded.getImpressionData(placementId);
}

Impression Depth

Impression depth represents the number of impressions in a given session per ad format. Impression depth is accessible directly from each ad format class, which you can find in the following example. Alternatively, it can be accessed through the ImpressionLevelData object, as described in Impression Data Upon Showing the Ad.

The impression depth for each ad format increases throughout the session as more ads are displayed. It is reset only when:

  • The session ends (the app is killed).
  • The SDK considers the session has timed out. 

Session Timeout

Session timeout or session background timeout represents the amount of time the user needs to spend with the app in the background before we consider them back to user engagement levels similar to a fresh new session. At this point, for all ad formats, the impression depth is reset to 0.

The Session timeout value is 30 minutes by default. 

Example

The example below illustrates how you can access the impressionDepth value for all ad formats.

Android iOS Unity
Kotlin
val impressionDepth = Interstitial.getImpressionDepth()
      
val impressionDepth = Banner.getImpressionDepth()
      
val impressionDepth = Rewarded.getImpressionDepth()
Java
int impressionDepth = Interstitial.getImpressionDepth();

int impressionDepth = Banner.getImpressionDepth();

int impressionDepth = Rewarded.getImpressionDepth();

Back to Top ⇧