Improve ad campaigns with PPS
Stay organized with collections
Save and categorize content based on your preferences.
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 taxonomy
key, which accepts the following values that are mapped to
following IAB public specifications:
IAB_AUDIENCE_1_1
for Audience Taxonomy 1.1
IAB_CONTENT_2_2
for Content Taxonomy 2.2
The values
key 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
Signal |
"type" Value |
Possible "single_value" Values |
Possible "values" Values |
Audio Feed Type |
"audio_feed" |
"af_1" : Music
"af_2" : Broadcast
"af_3" : Podcast
|
n/a |
Content Rating |
"content_rating" |
"cr_1" : G
"cr_2" : PG
"cr_3" : T
"cr_4" : MA
|
n/a |
Content Delivery |
"delivery" |
n/a |
"cd_1" : Streaming
"cd_2" : Progressive
"cd_3" : Download
|
Production Quality |
"prodq" |
"pq_1" : Professionally Produced
"pq_2" : Prosumer
"pq_3" : User Generated (UGC)
|
n/a |
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"],
},
],
};
Follow these steps to send PPS with your
IMAAdsRequest
:
- 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.
let userSignals = """
{
"PublisherProvidedTaxonomySignals": [
{
"taxonomy": "IAB_AUDIENCE_1_1",
"values": [
"1",
"284"
]
}
],
}
"""
let base64Signals = Data(userSignals.utf8).base64EncodedString()
var encodedSignals = base64Signals.replacingOccurrences(of: "+", with: "%2B")
encodedSignals = encodedSignals.replacingOccurrences(of: "/", with: "%2F")
encodedSignals = encodedSignals.replacingOccurrences(of: "=", with: "%3D")
let finalAdTag = sampleAdTag + "&ppsj=" + encodedSignals
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-08-28 UTC.
[null,null,["Last updated 2025-08-28 UTC."],[[["\u003cp\u003ePublisher Provided Signals (PPS) let you share audience and contextual data with bidders to enhance programmatic ad revenue, using standardized taxonomies without exposing user identifiers.\u003c/p\u003e\n"],["\u003cp\u003ePPS leverages IAB taxonomies like Audience Taxonomy 1.1 and Content Taxonomy 2.2 to categorize user interests and content, as well as Google-defined structured signals for specific attributes.\u003c/p\u003e\n"],["\u003cp\u003eTo implement PPS, construct a JSON object containing taxonomy and structured signal data, Base64-encode it, and append it to your ad tag URL using the \u003ccode\u003e&ppsj=\u003c/code\u003e parameter.\u003c/p\u003e\n"],["\u003cp\u003ePPS works across all transaction types, allowing you to provide valuable insights to advertisers for improved targeting and monetization.\u003c/p\u003e\n"]]],[],null,["You can send audience and contextual data as\n[publisher provided signals](//support.google.com/admanager/answer/12451124)\n(PPS) in ad requests. With PPS, you can use your user data to improve\nprogrammatic monetization by communicating your audience characteristics to\nbidders in all\n[transaction types](//support.google.com/admanager/answer/2805834), using\nstandard taxonomies, without the need to share user identifiers. Your audience\ncharacteristics can include behavioral and interest-based data (\n[IAB Audience Taxonomy 1.1](//iabtechlab.com/standards/audience-taxonomy/)), and\ncontextual data (\n[IAB Content Taxonomy 2.2](https://iabtechlab.com/standards/content-taxonomy/)).\nYou can also send publisher provided structured signals, which are defined by\nGoogle, and allow for additional signals to be sent.\n\nConstruct the user signals JSON\n\nAt the top level, create a JSON object with a single key-value pair. The key\nshould be `PublisherProvidedTaxonomySignals`, and its value should be an array\nof objects. Each object in the array should have 2 key-value pairs:\n\n- The `taxonomy` key, which accepts the following values that are mapped to\n following IAB public specifications:\n\n - `IAB_AUDIENCE_1_1` for Audience Taxonomy 1.1\n - `IAB_CONTENT_2_2` for Content Taxonomy 2.2\n- The `values` key with a corresponding array of string taxonomy values.\n\nConstruct the structured signals array\n\nFor structured signals, add the `PublisherProvidedStructuredSignals` key with a\nvalue of an array of objects. Construct the object based on the following list\nof signal key-values: \n\nToggle view of structured signals table\n\n| Signal | \"type\" Value | Possible `\"single_value\"` Values | Possible `\"values\"` Values |\n|--------------------|--------------------|-------------------------------------------------------------------------------------------|--------------------------------------------------------------------|\n| Audio Feed Type | `\"audio_feed\"` | - `\"af_1\"`: Music - `\"af_2\"`: Broadcast - `\"af_3\"`: Podcast | n/a |\n| Content Rating | `\"content_rating\"` | - `\"cr_1\"`: G - `\"cr_2\"`: PG - `\"cr_3\"`: T - `\"cr_4\"`: MA | n/a |\n| Content Delivery | `\"delivery\"` | n/a | - `\"cd_1\"`: Streaming - `\"cd_2\"`: Progressive - `\"cd_3\"`: Download |\n| Production Quality | `\"prodq\"` | - `\"pq_1\"`: Professionally Produced - `\"pq_2\"`: Prosumer - `\"pq_3\"`: User Generated (UGC) | n/a |\n\nSee the following example that uses the `IAB_AUDIENCE_1_1` and `IAB_CONTENT_2_2`\nfor taxonomy signals and includes structured signals. \n\n const userSignals = {\n \"PublisherProvidedTaxonomySignals\": [{\n \"taxonomy\": \"IAB_AUDIENCE_1_1\",\n \"values\": [\"6\", \"284\"]\n // '6' = 'Demographic | Age Range | 30-34'\n // '284' = 'Interest | Business and Finance | Mergers and Acquisitions'\n },\n {\n \"taxonomy\": \"IAB_CONTENT_2_2\",\n \"values\": [\"49\", \"138\"]\n // '49' = 'Books and Literature | Poetry'\n // '138' = 'Education | College Education | College Planning'\n }],\n \"PublisherProvidedStructuredSignals\": [{\n \"type\": \"audio_feed\",\n \"single_value\": \"af_1\",\n },\n {\n \"type\": \"delivery\",\n \"values\": [\"cd_1\", \"cd_3\"],\n },\n ],\n };\n\nConfigure your ad request\n\nFollow these steps to send PPS with your\n[`IMAAdsRequest`](/interactive-media-ads/docs/sdks/ios/client-side/reference/Classes/IMAAdsRequest):\n\n- Create a JSON string with the user's interest, behavior, or contextual data.\n- Create a Base64-encoded ASCII string from the JSON string above.\n- Append the encoded string to your ad tag URL with the `&ppsj=` parameter.\n\n let userSignals = \"\"\"\n {\n \"PublisherProvidedTaxonomySignals\": [\n {\n \"taxonomy\": \"IAB_AUDIENCE_1_1\",\n \"values\": [\n \"1\",\n \"284\"\n ]\n }\n ],\n }\n \"\"\"\n let base64Signals = Data(userSignals.utf8).base64EncodedString()\n var encodedSignals = base64Signals.replacingOccurrences(of: \"+\", with: \"%2B\")\n encodedSignals = encodedSignals.replacingOccurrences(of: \"/\", with: \"%2F\")\n encodedSignals = encodedSignals.replacingOccurrences(of: \"=\", with: \"%3D\")\n\n\n let finalAdTag = sampleAdTag + \"&ppsj=\" + encodedSignals"]]