Knowledge base

How do you use documentation throughout your workflow? Share your experience with us by taking this survey.

Audience Pinpointer

Overview

Audience Pinpointer is a powerful user acquisition service that uses machine learning to help you find the players most likely to have value beyond the app install. Using dynamic pricing, Audience Pinpointer allows you to bid more for predicted high-value users and less for easy to find users.

Target high-value users with Audience Pinpointer.

How it works

Unity’s machine-learning model utilizes real-time valuation of the user at the point of an ad request. The algorithm decides on a bid for each user based on individual valuation. The system updates constantly based on actual user behavior and the preferences of millions of users across Unity’s platform.

Audience Pinpointer's machine learning model.

Audience Pinpointer offers two models to choose from:

  • Retention: Optimize for retention to acquire users who are more likely to play your game for 7 or more days.
  • ROAS: Optimize for revenue to acquire users based on their predicted spend and maximize return on ad spend (ROAS) during their first 7 days in your game.

Optimizing for retention

This campaign strategy targets users that are likely to remain in your game 7 days after install. Audience Pinpointer uses dynamic pricing so you can pay the right price across the entire user base. This approach has proven to be most successful for games that mainly monetize from ads.

For example:

  • Your game’s median D7 Retention is 10%.
  • Potential User 1's predicted D7 Retention for your game is 20%, or twice the median.
    • The bid for Potential User 1 is base CPI x2
  • Potential User 2's predicted D7 Retention for your game is 5%, or half the median.
    • The bid for Potential User 2 is base CPI x0.5.

Optimizing for revenue

This campaign strategy targets users that are predicted to spend, and uses dynamic bids to acquire them at the right price. Revenue optimization campaigns help you achieve your return on ad spend (ROAS) goals, which is expressed as the revenue a player generates in their first 7 days playing your game, divided by your cost to acquire them.

For maximum impact, Unity recommends running revenue-optimized campaigns alongside retention-optimized campaigns and standard CPI campaigns that optimize towards the best install conversion rates.

For example:

  • Your target 7-day ROAS is 10%, meaning a user should spend 10% of the amount you bid to acquire them during their first 7 days in the game.
  • Your maximum CPI bid is $20.
  • Audience Pinpointer predicts Potential User 1 will generate $1 of revenue during their first 7 days in the game.
    • The CPI bid for Potential User 1 is $10 ($1 / 0.1 = $10, which is within your maximum bid range).
  • Audience Pinpointer predicts Potential User 2 will generate $5 of revenue during their first 7 days in the game.
    • The CPI bid for Potential User 2 is $20 ($5 / 0.1 = $50, which exceeds the $20 maximum bid cap).

Getting started

Dynamic Audience Pinpointer campaigns work very well alongside standard ones, because they each look at different levels of data to optimize. Implement Audience Pinpointer campaigns in three basic steps:

  1. Enable the passing of post-install session and purchase events and add user-level ad revenue to Unity.
  2. Unity confirms ingestion and validation of events.
  3. Configure a retention or ROAS campaign in the Acquire dashboard.

Note: You must meet minimum levels in order to be eligible.

Passing post-install events

Audience Pinpointer requires you to pass post-install session events (indicating retention) and in-app purchase events, which allows Unity to dynamically find the right users. Most attribution partners support forwarding these events. For instructions to attribution partners about how to do this, see documentation on passing post-install events to Unity.

After Unity validates your post-install events, you will be able to create Audience Pinpointer campaigns in the dashboard.

Creating Audience Pinpointer campaigns

To create a new Audience Pinpointer campaign:

  1. From the Acquire dashboard, navigate to the game you want to advertise and click Create campaign.
  2. In the campaign creation dialogue, give the campaign a name, then select Retention or ROAS.

Note: If Unity has not validated post-install event data for your game, these options will be unavailable.

CreateCampaign

Configuring campaign parameters

Scroll to the Countries and Bids section of the campaign configuration menu to view eligible countries to target for retention. Click Adjust to edit the parameters of each geo.

Adjust

Retention campaigns

Specify Base and Max bids for each geo you want to target. The base bid is the CPI you are willing to pay for the average user eligible for this campaign, and the max bid is the highest CPI you are willing to pay for a user who is likely to stay in your game. The bidding algorithm uses this information to dynamically set your bid for each user based on their predicted retention. While the bid may fluctuate slightly above our below the base bid, it will never exceed the max bid.

Configuring a retention campaign.

You can edit these values individually, or check multiple geos to execute bulk changes (increase or decrease by value, increase or decrease by percent, or set to a value).

Countries

For more information, see section on optimizing for retention.

Revenue campaigns

For Android ROAS campaigns you are able to choose whether you are optimizing for IAP revenue ROAS, ad revenue ROAS, or both. Your campaign target and maximum bid should reflect the optimization type you have chosen.

Detailst

Specify the D7 ROAS goal and your Max bid for each geo you want to target. The D7 ROAS goal is a realistic return on ad spend (%) you’d like to see for a new user after 7 days in your game, while the Max bid is the absolute most you are willing to spend to acquire a high-quality user. You can edit these values individually, or check multiple geos to execute bulk changes (increase or decrease by value, increase or decrease by percent, or set to a value).

ChangeValue

Tip: Base your D7 ROAS goal on a gross revenue figure to achieve realistic ROAS performance with Audience Pinpointer.

Audience Pinpointer calculates bids based on estimated user value and your day-7 ROAS goal. Nothing changes on the reporting side, as you still get the CPI value per user for each install. You will not pay for the install until it takes place.

Setting ROAS targets and max CPI

Look at the 7-day ROAS you’ve historically achieved with similar static CPI campaigns. The ROAS target should be similar to what you’ve observed so far. If you set the target too high, unrealistic user criteria may limit scale and lead to reduced traffic. In general, the higher your ROAS target, the lower your CPI bids, so setting extremely high ROAS targets yields very low CPI bids that are unlikely to win many impressions. Similarly, because Audience Pinpointer dynamically prices bids based on predicted value, setting low maximum CPI bids can cause you to miss out on high-value users. Low CPI caps typically yield less installs and lower value installs.

Audience Pinpointer predicts 7-day retention and ROAS, so allow at least a full week or two using the provided guidelines to let the data mature before adjusting the target up or down based on campaign performance.

Adjust your ROAS target according to which revenue you are optimizing for (IAP, ad revenue, or both).

Adjust

Note: Unity has lowered the data requirements threshold to create an Audience Pinpointer campaign. While lowering these data limits enables you to start and expand these campaigns faster, new campaigns and new geos still require time to mature and collect more data to improve their prediction accuracy. For new campaigns or eligible geos, Unity recommends starting with a lower max CPI and observing performance before increasing it.

You will also be able to view suggested D7 ROAS goals based on the last 30 days from all campaigns of this storeId. Lastly, you will be able to view the D7 ROAS Last 30 Days which is the GEO-specific D7 ROAS of the past 30 days for that campaign under the campaign-view.

Eligibility for ROAS and Retention

You will not be able to select ROAS or RETENTION without the following eligibility.

Retention requirements

Base (minimum):

  • At least 100 installs within 7 days per country
  • At least 1% retention rate per country

Optimal:

  • At least 200 installs within 7 days per country
  • At least 1% retention rate per country

ROAS requirements

Note: Depositors must come from Unity-attributed installs.

IAP ROAS:

Base (minimum):

  • At least 10 depositors in the past 30 days cohorted per country

Optimal:

  • At least 50 depositors in the past 30 days cohorted per country

Ad revenue ROAS:

Base (minimum):

  • At least 200 installs and generated non-zero D7 ad revenue for the last 30 days

Optimal:

  • At least 400 installs and generated non-zero D7 ad revenue for the last 30 days

UA SDK Audience Pinpointer Integration Guide

Why should I install the UA SDK?

The consumer privacy changes released in iOS 14 will make it more complex to scale User Acquisition (UA) campaigns moving forward.

Unity’s UA SDK, built on top of the deltaDNA SDK, helps you to continue to optimize your User Acquisition campaigns for Apple's ATT privacy framework and SKAD integration.

This guide assumes that you have already installed and set up the deltaDNA SDK for either Unity or iOS. For details on how to set up the deltaDNA SDK, see this documentation for reference:

Note: the Pinpointer methods, designed for iOS 14, will only send events in iOS 12+. If used on another iOS version (or on another platform in the case of the Unity SDK) they will do nothing.

Setting up the UA SDK

Once you have set up and configured the deltaDNA SDK following the above documentation, register the Apple Store ID and Apple Developer ID for your game in the UA SDK.

The best place to do this is just after you start the deltaDNA SDK. The code snippets below show the properties you need to set.

Unity SDK

DDNA.Instance.AppleDeveloperID = "yourappleId@example.com";
DDNA.Instance.AppStoreID = "1234567890";

iOS SDK (Objective-C)

[DDNASDK sharedInstance].appStoreId = @"1234567890";
[DDNASDK sharedInstance].appleDeveloperId = @"test@example.com";

iOS SDK (Swift)

DDNASDK.sharedInstance()?.appStoreId = @"1234567890"
DDNASDK.sharedInstance()?.appleDeveloperId = @"test@example.com"

You will also need to import the required events into your deltaDNA project on the web portal. To do this:

  • Navigate to the Setup > Manage Events screen
    deltaDNA Manage Events screen

  • Click Create Event
    deltaDNA Create Event

  • Choose the unitySignalInstall event from the template event dropdown menu

  • Click Import
    deltaDNA Import

  • Scroll down and click Save
    deltaDNA Import

  • Repeat for the unitySignalPurchase and unitySignalSession events

Using the UA SDK

There are 3 helper methods provided by the SDK to send the pinpointer events required: unitySignallInstall, unitySignalSession, and unitySignalPurchase.

unitySignalInstall

This event should only be sent on the first startup of the game. To send the unitySignalInstall event, add the following code snippets to the startup code of the game.

Unity SDK

DeltaDNA.AudiencePinpointer.RecordInstallEvent();

iOS SDK (Objective-C)

[[DDNASDK sharedInstance] recordSignalTrackingInstallEvent];

iOS SDK (Swift)

DDNASDK.sharedInstance()?.recordSignalTrackingInstallEvent()

Data Included

The unitySignalInstall event contains the following data:

  • deviceModel: The device model as reported by iOS
  • connectionType: Whether the device is connected to WiFi, cellular, or otherwise
  • sdkVersion: The version of the UA SDK that sent the event
  • appStoreId: The iTunes Connect ID for the game
  • appBundleId: The bundle ID for the application
  • appDeveloperId: The Apple developer ID for the game developer
  • idfv: The IDFV for the user’s device
  • idfa: The IDFA for the user, if the user has granted permission to use it

unitySignalSession

This event should be sent every time the user starts a new game session. The following code samples show how to use this event.

Unity SDK

DeltaDNA.AudiencePinpointer.RecordSessionEvent();

iOS SDK (Objective-C)

[[DDNASDK sharedInstance] recordSignalTrackingSessionEvent];

iOS SDK (Swift)

DDNASDK.sharedInstance()?.recordSignalTrackingSessionEvent()

Data Included

The unitySignalSession event contains the following data:

  • deviceModel: The device model as reported by iOS
  • connectionType: Whether the device is connected to WiFi, cellular, or otherwise
  • sdkVersion: The version of the UA SDK that sent the event
  • appStoreId: The iTunes Connect ID for the game
  • appBundleId: The bundle ID for the application
  • appDeveloperId: The Apple developer ID for the game developer
  • idfv: The IDFV for the user’s device
  • idfa: The IDFA for the user, if the user has granted permission to use it

unitySignalPurchase

This event should be sent every time the user makes a transaction or purchase within the application. It requires a currency amount (as an integer), a currency type (as a string, for example, GBP for British pounds, or USD for US dollars), as well as the developer ID and store ID required for the other two events.

Unity SDK

DeltaDNA.AudiencePinpointer.RecordPurchaseEvent(1000, “USD”);

iOS SDK (Objective-C)

[[DDNASDK sharedInstance] 
recordSignalTrackingPurchaseEventWithRealCurrencyAmount :@100 
realCurrencyType:@"GBP"];

iOS SDK (Swift)

DDNASDK.sharedInstance()?.recordSignalTrackingPurchaseEvent(realCurrencyAmount: 1000, realCurrencyType: “USD”)

Data Included

The unitySignalPurchase event contains the following data:

  • deviceModel: The device model as reported by iOS
  • connectionType: Whether the device is connected to WiFi, cellular, or otherwise
  • sdkVersion: The version of the UA SDK that sent the event
  • appStoreId: The iTunes Connect ID for the game
  • appBundleId: The bundle ID for the application
  • appDeveloperId: The Apple developer ID for the game developer
  • idfv: The IDFV for the user’s device
  • idfa: The IDFA for the user, if the user has granted permission to use it
  • realCurrencyAmount: The amount the user spent in the purchase
  • realCurrencyType: The currency code which the user spent in the purchase (for example, GBP for British Pounds)

Unity analytics optimization

To allow Unity to collect session data that enhances the Audience Pinpointer, enable the Unity Analytics Optimization project setting from the Monetize dashboard.

GPA

This setting allows Unity to better define the value of new users in your game, as well as similar users in other games in network. To learn how to enable this setting, see this page.

Allowlists and Blocklists

Note that Unity recommends that you clear any allowlisted or blocklisted games for dynamic campaigns, as they are purely optimized towards users. This is considered a best practice, but you may speak to your Unity representative if you wish to retain these lists for your dynamic campaign(s). For more information, see App Targeting.

AllowList

Still need help? Get in touch!
Last updated on 13th Jun 2021