← All DocsAd Personalization

Ad Personalization

Segment-aware ad frequency control. Show more ads to non-spenders, fewer to whales.

Overview

BaseplateAds uses player segments and Remote Config to intelligently control ad frequency. Non-spenders see more ads (they monetize via ads). Whales see fewer (they monetize via IAP — don't annoy them). All controlled from the dashboard.

Quick Start

local BaseplateAds = require(game.ServerStorage.Baseplate.BaseplateAds)

BaseplateAds:Init({
    baseplateConfig = BaseplateConfig,
    baseplatePlayer = BaseplatePlayer,
})

-- Before showing an ad, check if we should
if BaseplateAds:ShouldShowAd(player) then
    local reward = AdService:CreateAdRewardFromDevProductId(12345)
    AdService:ShowRewardedVideoAdAsync(player, reward)
    BaseplateAds:RecordAdShown(player)
end

Dashboard Config Keys

Control ad behavior from Remote Config — no code changes needed:

KeyDefaultDescription
ads_enabledtrueGlobal kill switch for all ads
ads_maxPerSession_nonSpender5Max ads per session for non-spenders
ads_maxPerSession_spender1Max ads per session for spenders
ads_cooldownSeconds180Minimum seconds between ads

API Reference

BaseplateAds:ShouldShowAd(player, adType?) → boolean

Checks: global toggle, cooldown, per-session limit (by segment), and Roblox ad availability.

BaseplateAds:RecordAdShown(player, adType?)

Call after successfully showing an ad to update counters.

BaseplateAds:GetAdStats(player) → { shown, maxAllowed, cooldownRemaining }

Get current ad state for a player (useful for UI, e.g. showing "Watch ad for reward" button only when available).