Integration · Ad monetization

Server-verified AdMob rewarded ads

RevenueDot verifies AdMob rewarded ads on its own server. AdMob calls RevenueDot's callback URL with a request signed by Google, a reward rule grants in-app currency or temporary access once, and your app polls for the result. A modified app cannot grant itself a reward. Connecting your AdMob account is optional and only loads ad unit names.

What teams do with it

  • Grant in-app currency, such as 10 gems, once per watched rewarded ad.
  • Grant an entitlement for a few minutes, hours or days (up to 365 days) after an ad.
  • Read eCPM, impressions and ad revenue next to subscription revenue in the Ads Overview.
  • Show ad unit names such as "Level end rewarded" instead of ca-app-pub-…/5224354917.

What RevenueDot sends

  • This is a connection: it sends no events. AdMob calls https://api.revenuedot.app/v1/ads/admob/ssv on RevenueDot Cloud, or <your server>/v1/ads/admob/ssv when self-hosted.
  • RevenueDot checks Google's ECDSA (P-256, SHA-256) signature with the keys at https://www.gstatic.com/admob/reward/verifier-keys.json and records each reward once.
  • The first matching reward rule grants In-app currency (a fixed amount, or AdMob's reward_amount times a multiplier) or Temporary access to an entitlement. A project can have up to 200 rules.
  • The SDK polls GET /v1/subscribers/{app_user_id}/ads/reward_verifications/{client_transaction_id} up to 10 times and gets pending, verified (with the reward) or failed.
  • A currency reward writes to the in-app currency ledger once, and a VIRTUAL_CURRENCY_TRANSACTION webhook goes out with source: "ad_reward". A callback for an ad unit that is not yours fails as unknown_ad_unit.

Setup

How to connect Google AdMob to RevenueDot

  1. 01

    Copy the callback URL

    In RevenueDot, open Ads > Rewards and copy the AdMob callback URL.

  2. 02

    Turn on server-side verification in AdMob

    In AdMob, open each rewarded ad unit, turn on Server-side verification and paste the URL. AdMob's Verify URL button calls it without parameters, and RevenueDot answers 200.

  3. 03

    Pass the token in your app

    After the ad loads, generate a reward verification token with the SDK and pass its appUserID and customData to AdMob's server-side verification options. When the reward callback fires, poll for the result.

  4. 04

    Add a reward rule

    Open Ads > Rewards > New rule. Choose In-app currency or Temporary access, and optionally limit it by app, ad unit or reward item.

  5. 05

    Send a test reward

    Click Send test reward for an app user ID. It runs the same rules and grants as a real callback, marked sandbox in the ledger.

  6. 06

    Connect AdMob for ad unit names (optional)

    Open Integrations > Google AdMob, select Connect with Google and allow read-only access. RevenueDot loads up to 5,000 ad units and refreshes them once a day.

The Google AdMob integration page in the RevenueDot dashboard, with its settings form
Captured from the RevenueDot dashboard with demo data.

Pass the reward verification token on iOS

The same two calls exist on Android. With RevenueCat's iOS AdMob adapter, ad.enableRewardVerification() does these steps for you.

Generate the token, then poll for the resultswift
// 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) }

Why a reward can fail

ReasonWhat happenedWhat to do
unknown_ad_unitThe callback's ad unit is not one of the project'sConnect AdMob, or name the ad unit on a reward rule
missing_userAdMob's callback had no user IDSet userIdentifier (iOS) or setUserId (Android) to the token's appUserID
user_mismatchThe poll came from a different customer than the reward's user IDGenerate the token after the customer logs in, and pass its appUserID
grant_failedThe matching rule names a currency or entitlement that no longer existsFix or delete the rule

Failure reasons in the rewards ledger.

Where the AdMob connection fits

  • Optional. Ad revenue works without it, and rewarded ads work when each reward rule names its ad unit.
  • Your Google OAuth client. RevenueDot Cloud has one. A self-hosted server uses REVENUEDOT_GOOGLE_OAUTH_CLIENT_ID and REVENUEDOT_GOOGLE_OAUTH_CLIENT_SECRET, or each project enters its own Google OAuth client ID and Google OAuth client secret on the AdMob page.
  • Read-only. The scope is https://www.googleapis.com/auth/admob.readonly, and the refresh token is stored encrypted. Disconnect deletes the tokens and the loaded ad units.
  • Only AdMob is verified today. AppLovin MAX, ironSource and Unity Ads callbacks are not.

FAQ

Google AdMob and RevenueDot

How do I verify AdMob rewarded ads on my server?

Copy the AdMob callback URL from Ads > Rewards in RevenueDot, turn on Server-side verification on each rewarded ad unit in AdMob and paste the URL. Pass the SDK's reward verification token to AdMob and poll for the result. RevenueDot checks Google's signature and applies your reward rule.

Can a modified app grant itself an AdMob reward?

No. Only a callback signed by Google can trigger a reward, and RevenueDot accepts callbacks only for your ad units. Each reward is recorded once, so a callback Google sends twice never credits twice.

Do I have to connect my AdMob account?

No. Connecting loads ad unit names and tells reward verification which ad units are yours. Without it, rewarded ads still work when each reward rule names its ad unit.

Is there a RevenueCat AdMob integration alternative?

RevenueDot answers the same SDK calls and reward poll as the RevenueCat SDKs. RevenueCat does not publish its callback URL or how it configures rewards, so the callback URL and reward rules are RevenueDot's own (checked October 2026). Google's own steps are in its server-side verification guide.

Sources: Google AdMob · Google: AdMob server-side verification · Google: AdMob API. Google AdMob is a trademark of its owner, used to describe compatibility. RevenueDot is not affiliated with or endorsed by it.

Get started

Send Google AdMob every subscription event.

Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue. Integrations are included on every plan.

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