AI-generated Key Takeaways
-
Publisher Provided Signals (PPS) allow sending audience and contextual data in ad requests to improve programmatic monetization without sharing user identifiers.
-
PPS can include behavioral, interest-based (IAB Audience Taxonomy 1.1), and contextual data (IAB Content Taxonomy 2.2), as well as Google-defined structured signals.
-
User signals should be constructed as a JSON object with
PublisherProvidedTaxonomySignalsand optionallyPublisherProvidedStructuredSignals. -
Structured signals have defined keys like
audio_feed,content_rating,delivery, andprodqwith specific possible values. -
To configure an ad request with PPS, create a JSON string of user signals, Base64-encode it, and append it to your ad tag URL with the
&ppsj=parameter.
You can send audience and contextual data as publisher provided signals (PPS) in ad requests. With PPS, you can use your user data to improve programmatic monetization by communicating your audience characteristics to bidders in all transaction types , using standard taxonomies, without the need to share user identifiers. Your audience characteristics can include behavioral and interest-based data ( IAB Audience Taxonomy 1.1 ), and contextual data ( IAB Content Taxonomy 2.2 ). You can also send publisher provided structured signals, which are defined by Google, and allow for additional signals to be sent.
Construct the user signals JSON
At the top level, create a JSON object with a single key-value pair. The key
should be PublisherProvidedTaxonomySignals
, and its value should be an array
of objects. Each object in the array should have 2 key-value pairs:
-
The
taxonomykey, which accepts the following values that are mapped to following IAB public specifications:-
IAB_AUDIENCE_1_1for Audience Taxonomy 1.1 -
IAB_CONTENT_2_2for Content Taxonomy 2.2
-
-
The
valueskey with a corresponding array of string taxonomy values.
Construct the structured signals array
For structured signals, add the PublisherProvidedStructuredSignals
key with a
value of an array of objects. Construct the object based on the following list
of signal key-values:
Toggle view of structured signals table
"type"
Value"single_value"
Values"values"
Values"audio_feed"
-
"af_1": Music -
"af_2": Broadcast -
"af_3": Podcast
"content_rating"
-
"cr_1": G -
"cr_2": PG -
"cr_3": T -
"cr_4": MA
"delivery"
-
"cd_1": Streaming -
"cd_2": Progressive -
"cd_3": Download
"prodq"
-
"pq_1": Professionally Produced -
"pq_2": Prosumer -
"pq_3": User Generated (UGC)
See the following example that uses the IAB_AUDIENCE_1_1
and IAB_CONTENT_2_2
for taxonomy signals and includes structured signals.
const
userSignals
=
{
"PublisherProvidedTaxonomySignals"
:
[{
"taxonomy"
:
"IAB_AUDIENCE_1_1"
,
"values"
:
[
"6"
,
"284"
]
// '6' = 'Demographic | Age Range | 30-34'
// '284' = 'Interest | Business and Finance | Mergers and Acquisitions'
},
{
"taxonomy"
:
"IAB_CONTENT_2_2"
,
"values"
:
[
"49"
,
"138"
]
// '49' = 'Books and Literature | Poetry'
// '138' = 'Education | College Education | College Planning'
}],
"PublisherProvidedStructuredSignals"
:
[{
"type"
:
"audio_feed"
,
"single_value"
:
"af_1"
,
},
{
"type"
:
"delivery"
,
"values"
:
[
"cd_1"
,
"cd_3"
],
},
],
};
Configure your ad request
Follow these steps to send PPS with your AdsRequest
:
- Create a JSON string with the user's interest, behavior, or contextual data.
- Create a Base64-encoded ASCII string from the JSON string above.
- Append the encoded string to your ad tag URL with the
&ppsj=parameter.
JSONObject
userSignalsObject
=
new
JSONObject
();
JSONArray
userSignalsArray
=
new
JSONArray
();
JSONObject
audienceTaxonomyObject
=
new
JSONObject
();
JSONArray
valuesArray
=
new
JSONArray
();
valuesArray
.
put
(
"1"
);
valuesArray
.
put
(
"284"
);
try
{
audienceTaxonomyObject
.
put
(
"taxonomy"
,
"IAB_AUDIENCE_1_1"
);
audienceTaxonomyObject
.
put
(
"values"
,
valuesArray
);
}
catch
(
JSONException
e
)
{
e
.
printStackTrace
();
}
userSignalsArray
.
put
(
audienceTaxonomyObject
);
try
{
userSignalsObject
.
put
(
"PublisherProvidedTaxonomySignals"
,
userSignalsArray
);
}
catch
(
JSONException
e
)
{
e
.
printStackTrace
();
}
String
userSignals
=
userSignalsObject
.
toString
();
byte
[]
userSignalsByte
=
new
byte
[
0
]
;
try
{
userSignalsByte
=
userSignals
.
getBytes
(
StandardCharsets
.
UTF_8
);
String
encodedBas64Signals
=
android
.
util
.
Base64
.
encodeToString
(
userSignalsByte
,
android
.
util
.
Base64
.
URL_SAFE
);
encodedSignals
=
URLEncoder
.
encode
(
encodedBas64Signals
,
"UTF-8"
);
}
catch
(
java
.
io
.
UnsupportedEncodingException
error
)
{
Log
.
w
(
"Sample app"
,
error
);
}
String
finalAdTag
=
sampleAdTag
+
"&ppsj="
+
encodedSignals
;

