Processor features

Implement secure signals without GPT or IMA SDKs

This article describes how publishers can independently collect and include secure signal values in ad requests, particularly for CTV inventory where using Google Publisher Tag Library (GPT) or Interactive Media Ads (IMA) SDKs may not always be viable. This type of implementation is also known as SDKless or server-to-server.

On this page:

Google Ad Manager collects and takes responsibility for sending secure signals on bid requests when using GPT or the IMA SDK. However, for publishers that can’t or choose not to use one of the supported SDKs, secure signal values can be collected independently and included the ad requests. 

This particular use case and requirement is most common with CTV inventory, such as when using any server-to-server, or non-IMA SDK implementation.

When a publisher constructs their own ad request, they can still collect secure signals independently and include the signals on the ad requests.

Requirements

Publishers seeking to support secure signal integrations without an SDK can perform the following:

  1. The publisher constructs a json to represent all signal they would like to send in an ad request. While not required, publishers are encouraged to implement a caching mechanism to reduce the time it takes to send an ad request.
  2. The publisher converts the json to a websafe base64 encoded string.
  3. The publisher constructs the ad request to include the SSJ parameter with the encoded string as the value.
  4. Once the signals are communicated to the buyer, the buyer is responsible for destroying the information received.

Technical information

Example
JSON, including two signals, one provided by a third-party signal provider named SOURCE1, and a second signal which is a publisher custom secure signal named 123 after the publisher network code. DATA1 is obtained from a function supplied by the SOURCE1 signal provider, DATA2 is obtained from a function created by the publisher:
 
{
  "signals": [
    {
      "source": "SOURCE1",
      "data": "DATA1",
      "isPubCreated": false
    },
    {
      "source": "123",
      "data": "DATA2",
      "isPubCreated": true
    }  ]
}
Signal "source": "SOURCE1" is a third-party generated signal
  • source is the third-party IDP’s source_id (as shared by the provider during registration)
  • data is output of the signal provider’s library
  • isPubCreated is set to false 
 Signal "source": "123" is a publisher created Custom Secure signals
  • source is the publisher’s network code 
  • data is the publisher created signal a bidder should be able to decodeisPubCreated is set to true
 

After JSON.stringify()
[]"signals":"{"source":"SOURCE1","data":"DATA1","isPubCreated":false},{"source":"123","data":"DATA2","isPubCreated":true}]]

After Base64 encoding

eyJzaWduYWxzIjpbeyJzb3VyY2UiOiJTT1VSQ0UxIiwiZGF0YSI6IkRBVEExIiwiaXNQdWJDcmVhdGVkIjpmYWxzZX0seyJzb3VyY2UiOiIxMjMiLCJkYXRhIjoiREFUQTIiLCJpc1B1YkNyZWF0ZWQiOnRydWV9XX0=

After websafe encoding

eyJzaWduYWxzIjpbeyJzb3VyY2UiOiJTT1VSQ0UxIiwiZGF0YSI6IkRBVEExIiwiaXNQdWJDcmVhdGVkIjpmYWxzZX0seyJzb3VyY2UiOiIxMjMiLCJkYXRhIjoiREFUQTIiLCJpc1B1YkNyZWF0ZWQiOnRydWV9XX0%3D

Was this helpful?

How can we improve it?
Search
Clear search
Close search
Google apps
Main menu
9883009209418075935
true
Search Help Center
true
true
true
true
true
148
false
false