Feature

AdMob ad revenue tracking and server-verified rewarded ads for mobile apps

RevenueDot shows your app's ad revenue next to its subscription revenue, in US dollars, from the ad events the RevenueCat SDK already sends. It also verifies AdMob rewarded ads on the server. Google signs a callback, a reward rule grants in-app currency or a few days of access, and your app only asks whether the reward went through.

Free up to $10,000 a month in tracked revenue. Works with the RevenueCat SDK you already ship.

Ad revenue in dollars

Revenue, impressions, eCPM, clicks, CTR and ad share of revenue, with change from the previous period.

Breakdowns

By network, format, placement, ad unit and mediator, with AdMob ad unit names once connected.

Server-verified rewards

A modified app cannot grant itself a reward, because only a callback signed by Google does.

Reward rules

The first matching rule grants in-app currency or a promotional entitlement for minutes, hours or days.

How do you track ad revenue with the RevenueCat SDK?

Ad revenue reaches RevenueDot through the SDK's ad tracker, which posts ad events to POST /v1/events at your proxy URL. On iOS the stock SDK sends them to the proxy URL. The stock Android SDK sends ad events to RevenueCat's hosts even with a proxy URL, so use the RevenueDot Android fork.

Use RevenueCat's AdMob adapter to track loads, impressions, clicks and revenue for you, or call the tracker yourself from any network's or mediator's callbacks.

Report one impression's revenueSwift
// iOS 15+: report the revenue of one impression from the mediator's paid-event callback.
Purchases.shared.adTracker.trackAdRevenue(AdRevenue(
    networkName: "AdMob", mediatorName: .adMob, adFormat: .rewarded, placement: "level_end",
    adUnitId: "ca-app-pub-3940256099942544/5224354917", impressionId: impressionId,
    revenueMicros: 12_500, currency: "USD", precision: .exact
))

What does the Ads overview show?

  • Ad revenue, converted to US dollars at each event's day rate, and impressions, eCPM, clicks and CTR.
  • Ad share of revenue: ad revenue divided by ad revenue plus subscription revenue.
  • A daily chart of ad revenue, impressions or eCPM, or stacked with subscription revenue.
  • Tables by network, format, placement, ad unit and mediator, for 7, 28 or 90 days or 12 months, with a Sandbox data switch.
  • Seven ad charts: eCPM, impressions, fill rate, ad monetized customers, clicks, CTR and ARPDAU.

Steps

How to verify AdMob rewarded ads on your server

Only AdMob's callback is verified today. AppLovin MAX, ironSource and Unity Ads callbacks are not.

  1. 01

    Paste the callback URL into AdMob

    Open Ads, then Rewards, and copy the AdMob callback URL, https://api.revenuedot.app/v1/ads/admob/ssv on Cloud. In AdMob, turn on Server-side verification for each rewarded ad unit and paste it.

  2. 02

    Pass the token in your app

    When the ad loads, call generateRewardVerificationToken and pass the token's app user id and custom data to AdMob's server-side verification options.

  3. 03

    Add reward rules

    Choose what a verified reward grants: a fixed or network-sized amount of in-app currency, or an entitlement for a duration of up to 365 days. Narrow a rule by app, ad unit or reward item. The first rule that matches decides.

  4. 04

    Poll for the answer

    When the ad's reward callback fires, call pollRewardVerification. The answer is verified, with the reward, or failed with a reason.

  5. 05

    Send a test reward

    Send a test reward runs the same rules as a real AdMob callback for an app user id you enter, without an ad. The currency or access is granted for real.

How does the app ask for a reward?

A currency reward is written to the in-app currency ledger once per reward, so a callback Google sends twice never credits twice. A VIRTUAL_CURRENCY_TRANSACTION webhook goes out with source: ad_reward.

RewardedAd.swiftSwift
// After the rewarded ad loads
let token = Purchases.shared.generateRewardVerificationToken(impressionId: impressionId)
let options = ServerSideVerificationOptions()
options.userIdentifier = token.appUserID
options.customRewardString = token.customData
rewardedAd.serverSideVerificationOptions = options

// When the ad's reward callback fires
let result = await Purchases.shared.pollRewardVerification(clientTransactionID: token.clientTransactionID)
if let gems = result.verifiedReward?.virtualCurrency { showReward(gems.amount) }

How does RevenueDot check the AdMob callback, and what is not built?

  • AdMob signs the query string with ECDSA (P-256, SHA-256). RevenueDot checks it with Google's published verifier keys. A bad signature answers 403 and records nothing.
  • A callback is accepted only for your ad units, the ones connecting AdMob loads or the ones named on your reward rules.
  • Connecting AdMob with Google sign-in loads ad unit names once a day. It is optional.
  • AppLovin MAX, ironSource and Unity Ads reward callbacks are not verified yet.

FAQ

Ads: questions people ask

How do I track ad revenue next to subscription revenue?

Report ad impressions and revenue through the RevenueCat SDK's ad tracker, directly or with RevenueCat's AdMob adapter, and point the SDK at RevenueDot. The Ads overview shows ad revenue, impressions and eCPM in US dollars next to subscription revenue, and the charts add fill rate and ARPDAU.

How do I verify AdMob rewarded ads on my server?

Turn on server-side verification in AdMob and paste RevenueDot's callback URL. Your app passes a verification token to AdMob. When the customer watches the ad, AdMob calls RevenueDot with a signed request, RevenueDot checks Google's signature and a reward rule grants the reward.

What can a rewarded ad grant?

A reward rule grants in-app currency, as a fixed amount or AdMob's reward amount times a multiplier, or a promotional entitlement for up to 365 days. Rules are checked from the top, and the first match decides. A reward is recorded once per network transaction.

Does RevenueDot support AppLovin MAX or ironSource reward verification?

Not yet. You can track their ad revenue through the ad tracker, but only AdMob's signed callback is verified for rewards.

Do I have to connect my AdMob account?

No. Ad revenue works without it, and rewarded ads work when each reward rule names its ad unit. Connecting AdMob loads your ad unit names, so the overview shows names instead of ids, and tells reward verification which ad units are yours.

Get started

Run subscriptions without the revenue share.

Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue, or move an existing RevenueCat app with one line of code.

Already have an account? Sign in · Prefer your own servers? Self-host free