Impression Level Data


Starting from FairBid 2.3.0 you can access detailed information for each impression. The information includes, for example, which demand source served the ad, the expected or exact revenue associated with it. In addition, it contains granular details to allow you to analyse and, ultimately, optimize both your ad monetization and user acquisition strategies. 

Glossary Table

Property Name Type Description Examples
advertiserDomain String (nullable) Advertiser’s domain when available. Used as an identifier for a set of campaigns for the same advertiser
campaignId String (nullable) Campaign ID when available used as an identifier for a specific campaign of a certain advertiser 1860_79463ca93f1dbc4446a5a8db8520f32
creativeId String (nullable) Creative ID when available. Used as an identifier for a specific creative of a certain campaign. This is particularly useful information when a certain creative is found to cause user experience issues 169493819
countryCode String (nullable) Country location of the ad impression(in ISO country code) US
currency String Currency of the payout. USD
impressionDepth Integer The amount of impressions in current session for the given Placement Type 1
demandSource String (nullable) Demand Source name is the name of the buy-side / demand-side entity that purchased the impression. When mediated networks win an impression, you’ll see the mediated network’s name. When a DSP buying through the programmatic marketplace wins the impression, you’ll see the DSP’s name. Examples:
Liftoff RTB
Facebook bidder
* Vungle
impressionId String (nullable) A unique identifier for a specific impression 5699232551401720289
networkInstanceId String (nullable) The mediated ad network’s original Placement/Zone/Location/Ad Unit ID that you created in their dashboard. For ads shown by the Fyber Marketplace the networkInstanceId is the Placement ID you created in Fyber's console. c38b236a7b613dc2
priceAccuracy enum Accuracy of the netPayout value. May return one of the following:
PROGRAMMATIC - When netPayout is the exact and committed value of the impression, available when impressions are won by programmatic buyers.
PREDICTED - When Fyber’s estimation of the impression value is based on historical data from non-programmatic mediated network’s reporting APIs
* UNDISCLOSED - When the demand source does not agree to disclose the payout of every impression - in such cases the netPayout is ‘0’
placementType enum The Placement Type for the impression, corresponds to your choice in Fyber's Console. Types available:
renderingSDK String (nullable) Name of the SDK in charge of rendering the ad Fyber
renderingSDKVersion String (nullable) Version of the SDK rendering the ad.
(NOTE: When AdMob renders an impression, the renderingSDKVersion shows the Google Play Services version)
netPayout double 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. .0155

Examples and Snippets

All ad formats (Interstitial, Rewarded and Banner) provide you access to the ImpressionData object through their callback APIs.

Log Messages

Printing the passed data in a log message appears similar to the message below:

Log Message Example

15:01:42.229 - impressionData:
 advertiserDomain: sampleads.COM
 campaignId: 48061
 countryCode: US
 creativeId: 05d8051670fa220
 currency: USD
 demandSource: demandvideo_RTB
 impressionDepth: 1
 impressionId: 6973961861505488569
 netPayout: 8.388900000000001e-05
 networkInstanceId: null
 placementType: 1
 priceAccuracy: 2
 renderingSDK: Fyber
 renderingSDKVersion: 2.4.0


public void onShow(@NonNull String placementId, @NonNull ImpressionData impressionData)

public void onShowFailure(@NonNull String placementId,  @NonNull ImpressionData impressionData)


The example below showcases how you can access these data on an Interstitial integration:

Interstitial.setInterstitialListener(new InterstitialListener() {
    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: %s", placementId, netPayout, currency, priceAccuracy, impressionDepth);
                Log.d(TAG, message);

String placementId = "12345";
if (Interstitial.isAvailable(placementId)) {, context);

In this example, you can expect the log to appear as:


Placement 12345 has been shown with a net payout of 4.000000 USD with accuracy: PREDICTED and impression depth: 1

Impression Depth

Impression depth represents the amount of impressions in a given session per ad format (Rewarded, Interstitial and Banner).

Impression depth can be directly accessed from each ad format class, refer to the snippets section below for each platform related code snippet.

Alternatively, it can be accessed through the ImpressionLevelData object as shown in the snippets above.

The impression depth for each ad format will keep increasing throughout the session as more ads get displayed.

It is reset only when:

  • The session ends (app is killed)
  • 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 to be 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.


The example below illustrates how you can access the impressionDepth value for all ad formats (Rewarded, Interstitial and Banner),

int impressionDepth = Interstitial.getImpressionDepth();

int impressionDepth = Banner.getImpressionDepth();

int impressionDepth = Rewarded.getImpressionDepth();