Ad revenue
Impression-level ad revenue from AdMob, AppLovin MAX, ironSource and others, stored as events and included in LTV / ROAS.
Updated 2026-09-02
SDK#
interstitial.paidEventHandler = { value in
WhichClick.logAdRevenue(network: "admob", adUnit: "ca-app-pub-1/2", format: "interstitial", placement: "level_end",
revenue: Double(truncating: value.value) / 1_000_000, currency: value.currencyCode, precision: "\(value.precision.rawValue)")
}MaxAdRevenueListener { ad -> WhichClick.logAdRevenue(network = ad.networkName, adUnit = ad.adUnitId, format = ad.format.label, revenue = ad.revenue, currency = "USD", precision = ad.revenuePrecision) }The SDK batches (5 s / 20 impressions) to POST /api/sdk/v1/ad-revenue. revenue is in currency units — divide AdMob micros by 1,000,000.
HTTP#
{ "device_id": "<sha256>", "install_id": "ins_01…", "events": [ { "network": "admob", "ad_unit": "ca-app-pub-1/2", "format": "interstitial", "placement": "level_end", "revenue": 0.0125, "currency": "USD", "precision": "ESTIMATED", "ts": "2026-09-02T09:30:00Z" } ] }Response {"accepted":1,"install_id":"ins_01…"}.
Reporting#
Ad revenue is stored as ad_revenue app events (value = revenue) and shown on the Ad revenue dashboard: ARPDAU, eCPM, revenue by network / format / placement, and per-campaign ROAS that includes ad revenue alongside purchases and subscriptions.