Link Search Menu Expand Document


iOS14 and SKAdNetwork Support

Demand Partners

Last updated on September 1, 2020

OpenX is dedicated in providing solutions that help both publishers and buyers adjust to new market changes. This is no exception with Apple’s recent announcement of iOS14, which will be released in mid-September 2020 and will change how ad tech companies can target iOS users.

In short term, OpenX is adding support for Apple’s SKAdNetwork version 2.0 to help advertisers attribute conversions for app installation campaigns on iOS14+. OpenX is going to comply with a IAB Tech Lab solution supporting extensions for SKAdNetwork in bid response and bid requests. In addition, OpenX is committed to support advertisers in keeping the control over frequency capping and fraud detection. This will help publishers to enrich their requests and provide more valuable traffic to the buyers.

As a long term solution, OpenX is looking for integrating identity solutions like OpenAudience, LiveRamp, and other identity providers to enable email/hashed email targeting for in-app traffic.


Please note that new objects in bid requests and bid responses are a work in progress.

Bid Request Information


If a DSP has at least one SKAdNetworkItem in the publisher app’s Info.plist sent in bid request, OpenX will include a new object in the bid request BidRequest.imp.ext.skadn that includes signals necessary for creating a signature. If there are no SKADNetworkItems in ad requests sent to OpenX, the object is not attached to the bid request.

versionstringVersion of skadnetwork supported. Always “2.0” or higher. Dependent on both the OS version and the SDK version.

For example: "version":"2.0"
sourceappstringID of publisher app in Apple’s App Store. Should match

For example: "sourceapp":"850519046"
skadnetidsarrayA subset of SKAdNetworkIdentifier entries in the publisher app’s info.plist that are relevant to the DSP. The list is filtered per DSP (DSP receives only IDs relevant to it).

For example: "skadnetids": ["XCLNXRM7PM.skadnetwork"]["dsp1.skadnetwork"]
extobjectPlaceholder for exchange-specific extensions to OpenRTB.

For example: "ext": {}

Bid Response Information

If a bid request contained SKAdNetworkItem than DSP is required to provide the following information in the bid response:

versionstringVersion of SKAdNetwork desired. Must be 2.0 or above.

For example: "version":"2.0"
networkstringAd network identifier used in signature. Should match one of the items in the skadnetids array in the request.

For example: "network": “XCLNXRM7PM.skadnetwork"
campaignstringCampaign ID compatible with Apple’s spec. As of 2.0, should be an integer between 1 and 100, expressed as a string.

For example: "campaign":"11"
itunesitemstringID of advertiser’s app in Apple’s app store. Should match

For example: "itunesitem":"850519046"
noncestringAn id unique to each ad response (GUID/UUID).

For example: "nonce": "cefed72f-a2re-01224544"
sourceappstringID of publisher’s app in Apple’s app store. Should match BidRequest.imp.ext.skad.sourceapp.

For example: "sourceapp":"987654321"
timestampstringUnix time in millis string used at the time of signature.

For example: "timestamp": "987654321"
signaturestringSKAdNetwork signature as specified by Apple.

For example: "signature": "LOWQAKZJKEaNuWPl=="
extobjectPlaceholder for exchange-specific extensions to OpenRTB.

For example: "ext": {}

Additional Fields to Bid Requests

If there is no IDFA in the AdRequest publisher/bidout partner may choose to send the following information to OpenX in order to help demand partners make informed decisions and keep control of frequency capping and fraud detection.

ext.idfvobject: Device, stringA persistent unique identifier for each app on a device that identifies the device to the app’s vendor. The value of this property is the same for apps that come from the same vendor running on the same device. A different value is returned for apps on the same device that come from different vendors, and for apps on different devices regardless of vendor.
ext.devuseridobject: App, stringA developer’s own persistent unique user identifier.
ext.impdepthobject: User, integerThe count of impressions for a specific placement type in a given app session. The impression depth is reset once the session ends.
ext.sessiondurationobject: User, integerThe total duration of time a user has spent so far in a specific app session expressed in seconds.

For example, a user has been playing Word Game for 45 seconds.