<br />

When an impression occurs, Google Mobile Ads Unity Plugin provides ad revenue data
associated with that impression. You can use the data to calculate a user's
lifetime value, or forward the data downstream to other relevant systems.

This guide is intended to help you implement the impression-level ad revenue
data capture in your Unity project.

## Prerequisites

- Make sure you have [turned on the impression-level ad revenue
  feature](https://support.google.com/admanager/answer/13404416) in the Ad Manager UI.
- Unity plugin 5.0.0 or higher.
- Complete [Get Started](https://developers.google.com/ad-manager/mobile-ads-sdk/unity/quick-start.md.txt). Your Unity app should already have Google Mobile Ads Unity Plugin imported.
- Before you can receive any impression-level ad revenue data, you need to
  implement at least one ad format:

  - [Banner](https://developers.google.com/ad-manager/mobile-ads-sdk/unity/banner.md.txt)
  - [Interstitial](https://developers.google.com/ad-manager/mobile-ads-sdk/unity/interstitial.md.txt)
  - [Rewarded](https://developers.google.com/ad-manager/mobile-ads-sdk/unity/rewarded.md.txt)
  - [Rewarded interstitial](https://developers.google.com/ad-manager/mobile-ads-sdk/unity/rewarded-interstitial.md.txt)
  - [Native](https://developers.google.com/ad-manager/mobile-ads-sdk/unity/native.md.txt)

## Implement a paid event handler

Each ad format has an `OnPaidEvent` event. During the lifecycle of an ad event,
Google Mobile Ads Unity Plugin monitors impression events and invokes the handler
with an earned value.

The code below demonstrates how to handle paid events for a rewarded ad:

```c#
RewardedAd rewardedAd;

private void RequestRewardedAd()
{
   rewardedAd = new RewardedAd("AD_UNIT_ID");
   
   rewardedAd.OnPaidEvent += this.HandleAdPaidEvent;
   
   AdRequest adRequest = new AdRequest();
   rewardedAd.LoadAd(adRequest);
}


public void HandleAdPaidEvent(object sender, AdValueEventArgs args)
{
    // TODO: Send the impression-level ad revenue information to your
    // preferred analytics server directly within this callback.

    AdValue adValue = args.AdValue;
    long valueMicros = adValue.Value;
    string currencyCode = adValue.CurrencyCode;
    PrecisionType precision = adValue.Precision;

    ResponseInfo responseInfo = rewardedAd.GetResponseInfo();
    string responseId = responseInfo.GetResponseId();

    AdapterResponseInfo loadedAdapterResponseInfo = responseInfo.GetLoadedAdapterResponseInfo();
    string adSourceId = loadedAdapterResponseInfo.AdSourceId;
    string adSourceInstanceId = loadedAdapterResponseInfo.AdSourceInstanceId;
    string adSourceInstanceName = loadedAdapterResponseInfo.AdSourceInstanceName;
    string adSourceName = loadedAdapterResponseInfo.AdSourceName;
    string adapterClassName = loadedAdapterResponseInfo.AdapterClassName;
    long latencyMillis = loadedAdapterResponseInfo.LatencyMillis;
    Dictionary&ltstring, string> credentials = loadedAdapterResponseInfo.AdUnitMapping;

    Dictionary&ltstring, string> extras = responseInfo.GetResponseExtras();
    string mediationGroupName = extras["mediation_group_name"];
    string mediationABTestName = extras["mediation_ab_test_name"];
    string mediationABTestVariant = extras["mediation_ab_test_variant"];
}
```

For more information on the winning ad source, see [retrieving Information
about the ad response](https://developers.google.com/ad-manager/mobile-ads-sdk/unity/response-info).

### Integrating with App Attribution Partners (AAP)

For complete details on forwarding ad revenue data to analytics platforms,
refer to the partner's guide:

| Partner SDK |
|---|
| [Adjust](https://dev.adjust.com/en/sdk/unity/integrations/admob) |
| [AppsFlyer](https://support.appsflyer.com/hc/en-us/articles/4416353506833) |
| [Singular](https://support.singular.net/hc/en-us/articles/360037635452-Unity-SDK-Integration-Guide#42_Adding_Ad_Revenue_Attribution_Support) |
| [Tenjin](https://docs.tenjin.com/en/send-events/unity.html#ilrd) |

### Implementation best practices

- Set the `OnPaidEvent` event immediately once you create or get access to the ad object, and definitely before showing the ad. This ensures that you don't miss any callbacks.
- Send the impression-level ad revenue information to your preferred analytics server immediately in your `OnPaidEvent` handler. This ensures that you don't accidentally drop any callbacks and avoids data discrepancies.

## AdValue

`AdValue` is a class that represents the monetary value earned for an ad,
including the value's currency code and its precision type encoded as below.

> [!IMPORTANT]
> **Key Point:** The value of `AdValue` is a micro value that represents each ad's worth. For example, a value of 5,000 indicates that this ad is estimated to be worth $0.005.

| `AdValue.PrecisionType` | Description |
|---|---|
| `Unknown` | An ad value that's unknown. This gets returned when LTV pingback is enabled but there isn't enough data available. |
| `Estimated` | An ad value estimated from aggregated data. |
| `PublisherProvided` | A publisher provided ad value, such as manual CPMs in a mediation group. |
| `Precise` | The precise value of this ad. |

In case of mediation, Ad Manager tries to provide an `ESTIMATED` value for ad
sources that have automatic data collection turned on. For more information, see
[Automatic data collection](https://support.google.com/admanager/answer/6240051). For
ad sources that don't have automatic data collection turned on, or in cases
where there aren't enough aggregated data to report a meaningful estimation, the
`PUBLISHER_PROVIDED` value is returned.

### Test impressions from Open Bidding

After an impression-level ad revenue event occurs for
an Open Bidding
ad source through a test request, you receive only the following
values:

- `Unknown`: indicates the precision type.

<!-- -->

- `0`: indicates the ad value.

Previously, you might have seen the precision type as a value other than `Unknown` and an ad value more than `0`.

For details on sending a test ad request, see
[Enable test devices](https://developers.google.com/ad-manager/mobile-ads-sdk/unity/test-ads.md.txt#enable-test-devices).