Skip to content
Godot · Rewarded ads

Rewarded ads for Godot games

Godot rewarded ads players choose to watch: AdMob on phones with server-side verification, H5 Games Ads on the web, paced and gated by age.

Updated

Rewarded ads are the one ad format the player asks for: they choose to watch, and they get something for it. Done badly, they turn into a chore, a cheat target or a privacy problem. This page covers what fair Godot rewarded ads look like, why the reward should be confirmed on a server instead of trusted from the game, and how PowerUp handles the rules around them while your game shows the ad with the ad plugin you already use.

What a fair rewarded ad looks like

These hold whatever tools you use:

  • The player chooses. A rewarded ad starts from a button the player taps, never on its own. AdMob's rewarded ads policy (as of October 2026) asks for a clear opt-in and says skipping an ad must not get in the way of normal play.
  • The reward is named first. "Watch an ad: +20 coins" beats "Watch an ad?". The same AdMob policy asks for a clear disclosure of the reward before each rewarded ad.
  • It's paced. A cooldown and a daily cap keep ads a bonus rather than a job, and stop a bored player from farming your economy.
  • The reward is confirmed on a server, once. A modified build can claim "the ad finished" a thousand times. The reward should land only when something you trust confirms it, and only once per ad.
  • Younger players get different ads, or none. Kids shouldn't see personalized ads, and the stores have extra rules for games aimed at them.

How it works with PowerUp

PowerUp doesn't show ads. Your game does that with an ad plugin. For AdMob on Android and iOS, Poing Studios' plugin and godot-sdk-integrations/godot-admob are both open source under the MIT license and maintained (as of October 2026). PowerUp decides whether an ad may be offered, and hands out the reward.

A rewarded ad is a short session:

  1. Ask. create_ad_session() runs every check the reward will need (the player's age, the cooldown, the daily cap, the match it belongs to) before the ad plays, so nobody watches an ad for nothing.
  2. Show. Your ad plugin plays the ad. With AdMob, you pass the session along so Google's signed callback can name it.
  3. Confirm. complete_ad_session() reports what happened. With AdMob's server-side verification, the reward lands when Google's signed callback reaches PowerUp. Retries are safe: a session pays out once.
func _on_watch_for_coins() -> void:
    var ad: Dictionary = await PowerUp.create_ad_session("free_coins")
    if not ad.ok:
        return   # cooldown, daily cap or age gate; ad.code says which
    # Your own function: shows the ad with your plugin, passing ad.session.ssv to AdMob,
    # and returns whether the player watched to the end.
    var earned: bool = await _show_rewarded_ad(ad.session)
    var done: Dictionary = await PowerUp.complete_ad_session(ad.session.sessionId, "admob", earned)
    # done.session.status is "granted", or "pending" until Google's callback arrives

The Godot rewarded ads guide has the full GDScript, including the wait for the verified callback and H5 Games Ads in a web export.

What an ad can pay

A rewarded placement pays one thing, and the SDK names it on the Watch button before the ad:

  • Coins, straight into the player's coin wallet.
  • Double a match's coins, once per online match, within 30 minutes of its report.
  • A boost, such as a revive in the current match, or a head start that the next match spends within the hour. Boosts stay out of ranked matches by default.

Limits you set

Each placement has a cooldown, and can have a daily cap (reset at midnight in your game's time zone), a cap per match, a set of platforms, and a start and end. They're config, so you change them in the console and publish, with no new build (remote config covers how that works). Once published, switching a placement off also stops rewards for sessions already open.

PowerUp Console · sandbox
The PowerUp console's Ads page: five live placements, test providers on all four platforms, the age gate on and No Ads on sale, then rewarded placements for a revive and Start Big
The Ads page on buggs.io's seeded demo, in the sandbox with test ads.

AdMob and H5 Games Ads

PowerUp works with one ad network per platform:

PlatformNetworkHow a reward is confirmed
Android, iOSAdMobGoogle's signed server-side callback, required for rewards in production
WebH5 Games AdsThe game's report, inside a minimum watch time and a daily cap
DesktopNoneNo ads

AdMob's server-side verification has Google call a server with a signed message when a player earns a reward. PowerUp receives it, checks Google's signature, the transaction id, the session, the player and the ad unit, and only then grants. Publishing a production game fails while an AdMob rewarded placement could pay without it.

H5 Games Ads is Google's ad product for web games, and as of October 2026 you apply for it. It has no server-side callback, so PowerUp grants on the game's report but keeps the limits on its side: one open session per player, no reward sooner than a minimum time after the session opened (5 seconds by default), and a daily cap per player across every placement (20 by default). On a production game the publish checks flag this as a warning, so it's a choice you make knowingly.

There's no mediation: PowerUp doesn't spread requests across several networks to raise fill. If fill matters more to you than having the rules in one place, a mediation platform is built for that: AppLovin MAX, for one, publishes its own Godot plugin for Android and iOS (as of October 2026). PowerUp doesn't connect to a mediation platform today.

A fair No Ads

No Ads is a popular purchase, and an easy one to get wrong. In PowerUp:

  • No Ads turns off interstitials and banners. It never turns off rewarded ads: those are the player's choice, and taking them away would take rewards from the people who paid you.
  • No Ads is only sold on a platform where there's an interstitial or banner for it to remove, in a format your build actually shows. Publishing fails if it would remove nothing.
  • It can be an item of its own or a perk of a subscription, sold like any other in-app purchase.

If you run interstitials, the publish checks hold them to a floor: at least one match before the first, at least 60 seconds apart, and no more than 10 a session. PowerUpDisclosure.interstitial_due() checks your numbers in the game before you show one, and says no while No Ads is active or the player's age is unknown.

Ads by age, by default

Ads wait for a neutral age question, and publishing fails while a placement is live with the age gate off. Until a player answers, they see no ads at all, rewarded ones included. After that, PowerUp tells your ad plugin what each player may see:

Age bandWhat PowerUp sends
AdultPersonalized ads allowed, up to the content rating you set
TeenNot personalized, under the age of consent, rated T at most
ChildChild-directed, not personalized, rated G

Teens and kids can't watch ads for boosts unless you allow it. For games that include children, Google Play's Families policies require ads shown to them to come only from Families self-certified ads SDKs, and ask mixed-audience apps for a neutral age screen. Guideline 1.3 of Apple's App Store Review Guidelines says Kids Category apps shouldn't include third-party advertising, with narrow room for contextual ads from providers that review creatives by hand (both as of October 2026). The page on app store age rules goes further.

PowerUp checks your setup against the rules built into it. That isn't legal advice, and your game's compliance is still up to you.

Checked before you publish

Besides the checks above, publishing confirms that test ads stay in the sandbox, that each platform's network is one your build shows, and that every live placement has its ad ids, with none of Google's test ids in production. The store rules section covers the rest of the checks, and pricing has the plans.

Questions

Does PowerUp show the ads itself?

No. Your game shows the ad with an ad plugin, such as an AdMob plugin for Godot on Android and iOS, or H5 Games Ads in a web export. PowerUp decides whether a rewarded ad may be offered right now and hands out the reward. On phones that's once AdMob's signed callback confirms it, and on the web once the game reports it, inside a minimum watch time and a daily cap.

Which ad networks does PowerUp work with?

AdMob on Android and iOS, and H5 Games Ads on the web. It's one network per platform. PowerUp doesn't mediate between networks, and desktop builds have no ad network.

If a player buys No Ads, can they still watch rewarded ads?

Yes. No Ads turns off interstitials and banners, never rewarded ads, because those are something the player chooses to watch. PowerUp only sells No Ads on a platform where there's an ad for it to remove.

Does buggs.io run rewarded ads?

Not yet. buggs.io is our own game, and rewarded ads are built into its client but not switched on in its live setup. The console capture on this page comes from its seeded demo, which runs test ads in a sandbox.

See it running on a real game.

We’ll walk you through the console with buggs.io’s setup.