AI Search

Publisher-Passed Signals

This guide shows how to configure the InMobi SDK to pass custom signals for ad auction pricing or first-party data. Additionally, you can send custom user or request-level signals to the InMobi SDK with each ad request. This enhances ad relevance, leading to higher fills and eCPMs.

Integration

Prerequisites

Supported from InMobi SDK 10.7.8 onwards.

For Unity integration —whether directly integrated into Unity or through a mediation platform’s Unity integration, you need to download the Unity Plugin from Download SDK and add it to your project.

Follow the instructions below:

  1. Ensure InMobi SDK is initialized. Generally, InMobi SDK gets automatically initialized by the mediation SDK, so this step is optional.
  2. Create a dictionary with keys as strings and values as the datatypes. The exact key names and corresponding data types supported are mentioned in the List of Signals.
  3. Pass the values to the InMobi SDK by passing the dictionary with putPublisherSignals method. This method must be called afterthe  InMobi SDK is successfully initialized.
  4. Ensure that you call this function and update the values before every ad request.
  5. You can call getPublisherSignals method to check what signals are already set.
  6. You can call resetPublisherSignals method if you want to clear all the signal data for the user.

    Note

    Some signals, such as floor price, impression depth, user ctr, and so on, have different values for each format, while signals such as paying user and retention have the same value across formats. 

Sample Implementation

Android (Java)

// Ensure InMobi SDK is initialized

// Create a map with required values
Map<String, Object> publisherSignals = new HashMap<>();
publisherSignals.put("iap", true); // User has made IAP
publisherSignals.put("ua_type", "paid"); // User is acquired via paid medium
publisherSignals.put("iap_type", "minnow"); // User has made low purchases
publisherSignals.put("iaa_type", "whale"); // User has seen high number of ads
publisherSignals.put("s_dep_rew", 4); // User has seen 4 rewarded ads in current session
publisherSignals.put("i_dep_rew", 10); // User has seen 10 rewarded ads in lifetime
publisherSignals.put("ctr_rew", 9.25); // Historical CTR for user is 9.25%
publisherSignals.put("abp_5_rew", 0.01720); // Average winning bid price for last 5 rewarded auctions was $0.01720, eCPM is $17.2

 // Set the extras on InMobiSdk
InMobiSdk.PublisherSignals.INSTANCE.putPublisherSignals(publisherSignals);

Android (Kotlin)

// ensure InMobi SDK is initialised
// create map with required values
val publisherSignals = mapOf(
    "iap" to true, // User has made IAP
    "ua_type" to "paid", // User is acquired via paid medium
    "iap_type" to "minnow", //User has made low purchases
    "iaa_type" to "whale", //User has seen high number of ads
    "s_dep_rew" to 4, //User has seen 4 rewarded ads in current session
    "i_dep_rew" to 10, //User has seen 10 rewarded ads in lifetime
    "ctr_rew" to 9.25, //Historical CTR for user is 9.25%
    "abp_5_rew" to 0.01720 //average winning bid price for last 5 rewarded auctions was $0.01720, eCPM is $17.2
)
// Set the extras on InMobiSdk
InMobiSdk.PublisherSignals.putPublisherSignals(publisherSignals)

iOS(Swift)

// ensure InMobi SDK is initialised

// create map with required values
let publisherSignals: [String: Any] = [
    "iap": true, // User has made IAP
    "ua_type": "paid", // User is acquired via paid medium
    "iap_type": "minnow", // User has made low purchases
    "iaa_type": "whale", // User has seen high number of ads
    "s_dep_rew": 4, // User has seen 4 rewarded ads in current session
    "i_dep_rew": 10, // User has seen 10 rewarded ads in lifetime
    "ctr_rew": 9.25, // Historical CTR for user is 9.25%
    "abp_5_rew": 0.01720 // Average winning bid price for last 5 rewarded auctions was $0.01720, eCPM is $17.2
]

// Set the extras on InMobiSdk
IMSdk.putPublisherSignals(publisherSignals)

Unity

// create a dictionary with all required signals and corresponding values
Dictionary<string, object> publisherSignals = new Dictionary<string, object> { };

publisherSignals.Add("iap", "true"); // User has made IAP
publisherSignals.Add("ua_type", "paid"); // User is acquired via paid medium
publisherSignals.Add("iap_type", "minnow"); // User has made low purchases
publisherSignals.Add("iaa_type", "whale"); // User has seen high number of ads
publisherSignals.Add("s_dep_rew", 4); // User has seen 4 rewarded ads in current session
publisherSignals.Add("i_dep_rew", 10); // User has seen 10 rewarded ads in lifetime
publisherSignals.Add("ctr_rew", 9.25); // Historical CTR for user is 9.25%
publisherSignals.Add("abp_5_rew", 0.01720); // Average winning bid price for last 5 rewarded auctions was $0.01720, eCPM is $17.2

// example for passing signals in rewarded requests
InMobiplugin.putPublisherSignals(publisherSignals); 

Pass Bid Signals

Prerequisites

  • InMobi SDK 11.0.0 or above
  • AppLovin MAX integration

To help optimize monetization and enable more precise ad auction pricing, the InMobi SDK allows publishers to pass bid‑related signals with each ad request. These signals provide granular bid price information programmatically, which can improve yield.

Note: Currently, only AppLovin MAX supports bid signals.

How it works

You send bid‑specific signals using the putPublisherSignals method after SDK initialization. The typical keys and values for bid signals are:

Key Description Value
dir_r Bid price Revenue from the MaxAd object (as a double/float, not eCPM)
dir_nn Demand network name NetworkName from the MaxAd object (e.g., "AppLovin MAX", "InMobi")
dir_type Ad format Label of the ad format in uppercase (e.g., "INTER", "REWARDED")

Alternatively, you can pass the entire MaxAd object. The InMobi SDK will automatically extract supported bid signal values.

Implementation Methods

To go live with this implementation, passing the average clearing price is mandatory.
The SDK can automatically calculate this average once you provide the required inputs.

Android and iOS

You must call putPublisherSignals inside the onAdDisplayed callback, grouped by ad format.

You can implement this in any of the following ways:

  • Passing required values individually

This approach is for developers who prefer more granular control. You extract and pass individual values such as revenue, network name, and ad format explicitly.

Android (Java)

@Override
public void onAdDisplayed(MaxAd maxAd) {
    Map<String, Object> signals = new HashMap<>();
    signals.put("dir_r", maxAd.getRevenue());
    signals.put("dir_nn", maxAd.getNetworkName());
    signals.put("dir_type", maxAd.getFormat().getLabel());
    InMobiSdk.PublisherSignals.INSTANCE.putPublisherSignals(signals);
}

Android (Kotlin)

override fun onAdDisplayed(maxAd: MaxAd) {
    InMobiSdk.PublisherSignals.putPublisherSignals(
        mapOf(
            "dir_r" to maxAd.revenue,
            "dir_nn" to maxAd.networkName,
            "dir_type" to maxAd.format.label
        )
    )
}

iOS (Swift)

func onAdDisplayed(_ maxAd: MAAd) {
    let signals: [String: Any] = [
        "dir_r": maxAd.revenue,
        "dir_nn": maxAd.networkName,
        "dir_type": maxAd.format.label
    ]
    IMSdk.putPublisherSignals(signals)
}
  • Passing the maxAd object

In this approach, you pass the complete maxAd object directly to the SDK. The SDK will extract all required values internally, simplifying your integration.

Android (Java)

@Override
public void onAdDisplayed(MaxAd maxAd) {
    Map<String, Object> signals = new HashMap<>();
    signals.put("obj_max", maxAd);
    InMobiSdk.PublisherSignals.INSTANCE.putPublisherSignals(signals);
}

Android (Kotlin)

override fun onAdDisplayed(maxAd: MaxAd) {
    InMobiSdk.PublisherSignals.putPublisherSignals(
        mapOf("obj_max" to maxAd)
    )
}

iOS (Swift)

func onAdDisplayed(_ maxAd: MAAd) {
    let signals: [String: Any] = [
        "obj_max": maxAd
    ]
    IMSdk.putPublisherSignals(signals)
}

Unity

In Unity, you must extract individual properties from the ad event and add them to a dictionary before passing them to the SDK. Passing the complete ad info object is not supported in Unity.

private void OnAdDisplayed(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
    var signals = new Dictionary<string, object>();
    signals.Add("dir_r", adInfo.Revenue);
    signals.Add("dir_nn", adInfo.NetworkName);
    signals.Add("dir_type", adInfo.AdFormat.ToUpper());
    this.inmobiPlugin.PutPublisherSignals(signals);
}

List of signals

Use suffixes as ‘ban’, ‘int’, ‘rew’, ‘nat’ for banner, interstitial, rewarded and native ad placements respectively.

Signal Key(case-sensitive) Data Type Supported Allowed values
Impression depth

i_dep_(ad_type)

e.g. i_dep_ban, i_dep_int, i_dep_rew, etc.

integer Total number of ads user has seen in lifetime.
Paying user iap bool ‘true’ if user has done IAP, else ‘false’
The average clearing price for the last n auctions

abp_10_(ad_type)
abp_5_(ad_type)
abp_(ad_type)

e.g. abp_10_ban, abp_10_int, abp_10_rew, abp_rew, abp_5_ban, abp_5_int, abp_5_rew

double value in USD and the bid values(not cpm).
Acquisition source ua_type string ‘paid' → if user was acquired using paid advertising,
'organic’ → if user was acquired organically
Session depth

s_dep_(ad_type)

e.g. s_dep_ban, s_dep_int, etc

integer ‘10’, ‘15’, ‘20’, or any integer value based on number of ads the user has seen in the current session. 
User average click-through rate

ctr_(ad_type)

e.g. ctr_ban, ctr_int, etc.

double ‘0.5’, ‘5.5', '10’, or any double value between 0 to 100 based on the click-through rate for the user. 
Purchasing user cohort iap_type string Applicable only when iapis set to true and based on in-app purchase value.

'minnow'(&lt;$5), 'dolphin'(&gt;$5 & &lt;=$10), 'shark'(&gt;$10 & &lt;=$50), 'whale'(&gt;$50)

Ad user cohort iaa_type string

Based on the number of full-screen or rewarded ads seen by the user.

‘minnow'(&lt;5 ads), ‘dolphin'(&gt;5 & &lt;=10), ‘shark'(&gt;10 & &lt;=25), 'whale'(&gt;25)

Note

  • The supported data types is applicable only when passing signals using putPublisherSignals method. The setExtras method expects all values to be passed as string only.
  • The "average clearing price for the last 5 auctions" signal is mandatory and applies only to bidding (not waterfall).
  • We recommend enabling all relevant signals that align with your audience and app genres to maximize impact from Publisher-Passed Signals with InMobi.

Additional Signals

Signal Description Key(case-sensitive) Value Type

Content Title

Content title

c_title

string

Content Series

Content series

c_series

string

Content URL

URL of the content, for buy-side contextualization or review

c_url

string

Content Category

Comma-separated list of IAB content categories that describe the content.

c_cat

string

Content Category Taxonomy

The taxonomy in use. Refer to List: Category Taxonomies

c_cattax

integer, default 1

Content Context

Type of content (game, video, text, etc.). Refer to List: Content Contexts

c_context

String

Content Rating(QAG Media rating)

Media rating per IQG guidelines. Refer to List: Media Ratings

c_rating

integer

Content keywords

Comma-separated list of keywords about the content

c_keywords

String

Content Language

Content language using ISO-639-1-alpha-2.

c_lang

String

For more information, read our blog, Signal Your Way to Success, Part 1 and Part 2

Additional Demographic Signals 

If available, you can also signal users age and gender to InMobi SDK. These signals help in campaign targeting and generate better yield. Ensure InMobi SDK is initialized before calling the following functions.

Android (Java)

InMobiSdk.setGender(InMobiSdk.Gender.MALE); // or InMobiSdk.Gender.FEMALE 
InMobiSdk.setAge(age);
InMobiSdk.setAgeGroup(InMobiSdk.AgeGroup.BELOW_18);    // other enums: BETWEEN_18_AND_20, BETWEEN_21_AND_24, BETWEEN_25_AND_34    // BETWEEN_35_AND_5, ABOVE_55

Android (Kotlin)

InMobiSdk.setGender(InMobiSdk.Gender.MALE)  // or InMobiSdk.Gender.FEMALE 
InMobiSdk.setAge(age) 
InMobiSdk.setAgeGroup(InMobiSdk.AgeGroup.BELOW_18)

iOS(Swift)

IMSdk.setGender(.female)
IMSdk.setAge(28)
IMSdk.setAgeGroup(.between25And29)

On This Page

Last Updated on: 10 Feb, 2026