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 revenue in your game 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.

You are required to set a base bid (CPI bid) that will be adjusted based on the individual user's expected retention in your game.

For example:

  • The average D7 retention for your target audience is 10% (this is automatically determined by Audience Pinpointer - your campaign can have a higher retention because of the optimization).
  • Potential User 1's predicted D7 Retention for your game is 20%, or twice the average.
    • The bid for Potential User 1 is base bid x2
  • Potential User 2's predicted D7 Retention for your game is 5%, or half the average.
    • The bid for Potential User 2 is base bid x0.5.

Optimizing for revenue

This campaign strategy targets users that are predicted to generate revenue through in-app purchases or watching ads, 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 that, during their first 7 days in the game, a user should spend 10% of the amount you bid to acquire them.
  • Your maximum 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, therefore the campaign bids at maximum bid instead of the calculated bid).

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.

Note: You can pass post-install events via an SDK for iOS.

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 (geographical area).

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 or below the base bid, it will generally never exceed the max bid. Max bid is the intended upper limit for what you wish to pay for users depending on their expected retention in your game. Your average effective cost per install (eCPI) could sometimes exceed this. It is a good practice to set the max bid at 2-3x base 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. For CPI-billed campaigns, you will only pay the CPI bid if an install happens. For CPM-billed campaigns, your average spend per install should be close to the average CPI bid. Nothing changes on the reporting side, as you will still see the average spend per install reported as CPI.

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 bids, so setting extremely high ROAS targets yields very low bids that are unlikely to win many impressions. Similarly, because Audience Pinpointer dynamically prices bids based on predicted value, setting low maximum bids can cause you to miss out on high-value users. Low bid 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 bid 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 unless you meet the following requirements. In addition, Unity will request permission to activate the Unity analytics optimization collection.

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 20th Sep 2021