> ## Documentation Index
> Fetch the complete documentation index at: https://beta-guide.daro.so/llms.txt
> Use this file to discover all available pages before exploring further.

# Use ILRD

> Receive impression-level revenue data in DARO Unity SDK.

## Overview

Starting with DARO Unity SDK 0.3.0, DARO provides impression-level revenue data, or ILRD. When a paid impression occurs, revenue information is delivered through each ad instance's `OnAdRevenuePaid` event.

## Supported Formats

* `DaroInterstitialAd`
* `DaroRewardedAd`
* `DaroAppOpenAd`
* `DaroBannerAd`
* `DaroNativeAd`
* `DaroLightPopupAd`

## Register the Event

The event signature is the same for all formats.

```csharp theme={null}
public event Action<DaroAdInfo, DaroRevenueInfo> OnAdRevenuePaid;
```

Example:

```csharp theme={null}
using System.Globalization;
using Daro;
using UnityEngine;

var ad = new DaroInterstitialAd("YOUR_AD_UNIT_ID");

ad.OnAdRevenuePaid += (info, revenue) =>
{
    Debug.Log(
        $"ILRD: format={info.AdFormat}, " +
        $"adUnitId={info.AdUnitId}, " +
        $"value={revenue.Value.ToString(CultureInfo.InvariantCulture)}, " +
        $"currency={revenue.CurrencyCode}, " +
        $"precision={revenue.Precision}");

    // Send revenue.Value / revenue.CurrencyCode / revenue.Precision
    // to your analytics or LTV pipeline here.
};

ad.Load();
```

## `DaroRevenueInfo` Values

`DaroRevenueInfo` includes these values.

```csharp theme={null}
public sealed class DaroRevenueInfo
{
    public decimal Value { get; }
    public string CurrencyCode { get; }
    public DaroRevenuePrecision Precision { get; }
}
```

`Value` is the revenue value for the impression. The DARO native SDK passes net revenue after fees are deducted, and the Unity SDK does not adjust this value again. The unit is the actual currency unit defined by `CurrencyCode`. For example, `0.000012 USD` means `0.000012` dollars, not an eCPM value.

`CurrencyCode` is an ISO 4217 currency code. The MAX ad demand path usually returns `"USD"`.

`Precision` indicates the precision of the revenue value.

```csharp theme={null}
public enum DaroRevenuePrecision
{
    Unknown = 0,
    Estimated = 1,
    PublisherProvided = 2,
    Exact = 3,
}
```

## Notes

* `OnAdRevenuePaid` is a revenue measurement event, not an ad impression lifecycle event.
* Do not assume every impression always produces a revenue event.
* The order of `OnAdImpression` and `OnAdRevenuePaid` can vary slightly depending on platform or ad demand behavior.
* If amount accuracy matters, store values as `decimal` or as strings instead of `float`.
* Formats with auto-refresh, such as banner ads, can trigger `OnAdRevenuePaid` for each refresh impression.

## Use a Shared Handler

You can manage ILRD with a shared handler.

```csharp theme={null}
private void HandleAdRevenuePaid(DaroAdInfo info, DaroRevenueInfo revenue)
{
    var value = revenue.Value.ToString(CultureInfo.InvariantCulture);

    // Example payload:
    // ad_format: info.AdFormat
    // ad_unit_id: info.AdUnitId
    // revenue_value: value
    // currency: revenue.CurrencyCode
    // precision: revenue.Precision
}
```

Then attach it to each ad instance.

```csharp theme={null}
interstitial.OnAdRevenuePaid += HandleAdRevenuePaid;
rewarded.OnAdRevenuePaid += HandleAdRevenuePaid;
appOpen.OnAdRevenuePaid += HandleAdRevenuePaid;
banner.OnAdRevenuePaid += HandleAdRevenuePaid;
nativeAd.OnAdRevenuePaid += HandleAdRevenuePaid;
lightPopup.OnAdRevenuePaid += HandleAdRevenuePaid;
```
