With rewarded video ads, you can implement a reward mechanism inside your game to incentivize users to watch click-to-play video ads. A rewarded video is a full-screen ad that lasts anywhere from 6 to 30 seconds and that rewards the user with an item after they have finished watching it.
Rewarded video ads let you:
- Monetize a greater number of your users.
- Increase your ad revenue per user and bring in demand from hundreds of brands.
- Improve user playtime and deliver greater engagement from your game.
Before implementing rewarded video ads, consider where inside your game you want to place the ads, and which items you want to reward users with. Keep the following in mind:
- Take advantage of high-traffic areas: Your earnings from rewarded videos depend on the number of users in your game who engage with ads. Place rewarded videos in lobbies or menus as a way to drive high traffic, as these are areas where users are most likely to engage when starting their gameplay.
- Use natural gameplay breaks: To avoid gameplay disruption, implement rewarded videos at natural gameplay breaks, like when users completes a level, before they start a challenge, or when they run out of lives or resources.
- Boost discovery with prompts: To make sure that users can find the rewarded video ad in your game, use easy access reward prompts that are easily discoverable and that only require 1-2 clicks. Have a clear call-to-action (for example, "Watch this ad for 2x the coins!") to make the action obvious to users.
- Offer meaningful rewards: We recommend rewards that are equivalent to 3 to 10 Robux. Use items like boosters, in-game currency, extra lives, and temporary privileges.
- Ensure compliance: Clearly disclose to users that they are engaging with an ad, and explain what users have to do to receive the reward and what the reward is. Rewards for video ads cannot be randomized items.
Implement rewarded video ads
To implement rewarded video ads:
- Make sure you meet the eligibility requirements, including being 13+ years of age, having an ID-verified Roblox account, and have a public game with at least 2 thousand unique visitors per month.
- Choose the item you want to reward users with for watching the ad. You can select an existing developer product or create a brand new one.
- Create client-side and server-side scripts. The client-side script checks if a video ad is available to be played to the user, while the server-side script turns a developer product into a reward, shows the user the video ad, and grants the user their reward.
After implementation, you can use analytics to understand key metrics and optimize your rewarded video ad earnings.
Video ad setup
To set up a rewarded video ad inside your game:
- Go to Creations and select a game.
- Go to Monetization ⟩ Ads ⟩ Settings.
- Under Rewarded Video ⟩ Serving, turn on the Serving enabled toggle.

- Select the reward you want to grant the user. If the reward doesn't already exist, create a new developer product in the Creator Hub. This developer product must have been created for the specific universe the place is in.
- Insert a button that the user must press before the video ad starts playing.
Client-side implementation
To implement the rewarded video ad on the client-side:
- Add a new LocalScript to the button you just inserted into your game.
- Use the GetAdAvailabilityNowAsync method to make sure the button is only visible to the user if an ad is available.
Code example for rewarded video ad (Client)
-- Services
local AdService = game:GetService("AdService")
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- StarterGui ⟩ ScreenGui ⟩ ShopFrame ⟩ RewardedAdButton
local PlayerGui = Players.LocalPlayer:WaitForChild("PlayerGui")
local ScreenGui = PlayerGui:WaitForChild("ScreenGui")
local ShopFrame = ScreenGui:WaitForChild("ShopFrame")
local RewardedAdButton = ShopFrame:WaitForChild("RewardedAdButton")
-- StarterGui ⟩ ScreenGui ⟩ OpenShopButton
local OpenShopButton = ScreenGui:WaitForChild("OpenShopButton")
-- Event to communicate between clients & server
local RewardedAdEvent = ReplicatedStorage:WaitForChild("RewardedAdEvent")
local INELIGIBLE_RESULTS = {
Enum.AdAvailabilityResult.PlayerIneligible,
Enum.AdAvailabilityResult.DeviceIneligible,
Enum.AdAvailabilityResult.PublisherIneligible,
Enum.AdAvailabilityResult.ExperienceIneligible,
}
local function isIneligible(result: Enum.AdAvailabilityResult)
for _, inEligibleResult in ipairs(INELIGIBLE_RESULTS) do
if result == inEligibleResult then
return true
end
end
return false
end
function checkForAds()
local isSuccess, result = pcall(function()
return AdService:GetAdAvailabilityNowAsync(Enum.AdFormat.RewardedVideo)
end)
if isSuccess and result.AdAvailabilityResult == Enum.AdAvailabilityResult.IsAvailable then
RewardedAdButton.Visible = true
return
end
if isIneligible(result.AdAvailabilityResult) then
return
end
end
RewardedAdEvent.OnClientEvent:Connect(function(isSuccess : boolean, result : Enum.ShowAdResult)
if result == Enum.ShowAdResult.ShowCompleted then
checkForAds()
end
end)
OpenShopButton.MouseButton1Click:Connect(function()
if ShopFrame.Visible then
ShopFrame.Visible = false
return
end
ShopFrame.Visible = true
checkForAds()
end)
RewardedAdButton.MouseButton1Click:Connect(function()
RewardedAdButton.Visible = false
RewardedAdEvent:FireServer()
end)
Server-side implementation
To implement the rewarded video ad on the server-side:
- Create a new Script under ServerScriptService.
- Use the CreateAdRewardFromDevProductId method to pass the developer product ID of the reward and create an AdReward object.
- Use the ShowRewardedVideoAdAsync method to play the video ad to the user.
- (Optional) Add a placementId to track individual video ad placements inside your game.
- Use the ProcessReceipt method to grant the user their reward if they have watched the entire video ad.
Code example for rewarded video ad (Server)
-- Services
local AdService = game:GetService("AdService")
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RewardedAdEvent = ReplicatedStorage:WaitForChild("RewardedAdEvent")
-- Provide a developer product ID for the video ad reward
-- This developer product must be created for the specific universe that this place is in
local DEV_PRODUCT_ID = 1919753834
RewardedAdEvent.OnServerEvent:Connect(function(player)
local isSuccess, result = pcall(function()
local reward = AdService:CreateAdRewardFromDevProductId(DEV_PRODUCT_ID)
return AdService:ShowRewardedVideoAdAsync(player, reward)
end)
RewardedAdEvent:FireClient(player, isSuccess, result)
end)
MarketplaceService.ProcessReceipt = function(receiptInfo)
local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
if not player then
return Enum.ProductPurchaseDecision.NotProcessedYet
end
if receiptInfo.ProductId == DEV_PRODUCT_ID then
-- Include the logic for granting rewards here
return Enum.ProductPurchaseDecision.PurchaseGranted
end
return Enum.ProductPurchaseDecision.NotProcessedYet
end
Placements
Use placements to track the performance of individual rewarded video ads inside your game.
To create a rewarded video ad placement:
- In the Creator Dashboard, go to Creations and select a game.
- Go to Monetization ⟩ Ads ⟩ Placements.
- Click Create placement.
- Enter a name for the placement and click Create.
The new placement populates on the Placement table with a unique Placement ID. You can use this Placement ID in the ShowRewardedVideoAsync method to differentiate between and track metrics for the individual video ads inside your game.
Ad opportunities
Use RegisterAdOpportunityAsync to track how many times a user has the opportunity to watch a rewarded video ad, and the rate at which they actually watch the video ad.
You can provide a Placement ID as an optional parameter to track metrics for individual ad opportunities in your game.
Code example for tracking ad opportunities
local AdService = game:GetService("AdService")
local playerGui = game:GetService("Players").LocalPlayer:WaitForChild("PlayerGui")
-- Create the ScreenGui and the Button
local screenGui = Instance.new("ScreenGui", playerGui)
local adButton = Instance.new("TextButton", screenGui)
-- Register the button with AdService
local success, err = pcall(function()
-- The second parameter is an optional Placement ID (Number) parameter generated in the Creator Hub.
-- If you choose not to provide a Placement ID, the ad opportunity is tracked under the default placement.
AdService:RegisterAdOpportunityAsync(adButton, 1234567891234567)
end)
if not success then
warn("Failed to register ad opportunity:", err)
end
Exclude likely spenders
Based on past behavior and purchasing habits, certain users are more likely to make purchases in your game. To reduce your risk of losing revenue, you can exclude users who are likely to spend in your game from seeing rewarded video ads.
We recommend that you only enable this setting if you plan to let users choose between watching a video ad and purchasing the reward from that ad. If the reward you're offering through the video ad is unique and isn't available for purchase, we recommend that you do not enable this setting.
To prevent likely spenders from seeing rewarded video ads:
- In the Creator Dashboard, go to Creations and select a game.
- Go to Monetization ⟩ Ads ⟩ Settings.
- Turn on the Exclude your most likely purchasers from Rewarded Video Ads toggle.

Estimate potential earnings
Use the calculator to estimate your earnings before you implement rewarded videos ad in your game.
Potential earnings are calculated by multiplying the number of ads-eligible users who have visited your game in the last 7 days, the number of ads you might show per user, and your projected EPM (earnings per 1000 impressions).
Because the number of daily ad views per user is the main variable you can control when you implement rewarded video ads in your game, you should design a user experience that naturally encourages users to watch ads. For example, if you want most users to watch at least one ad a day, make your ad placements accessible and easy to find. You can also boost daily views by offering rewards that feel valuable and connect to your core gameplay loop, keeping users engaged and boosting your total ad impressions.
To use the calculator:
- In the Creator Dashboard, go to Creations and select a game.
- Go to Monetization ⟩ Ads ⟩ Eligibility.
- Under Ad format, select Rewarded video.
- Adjust the daily ad views per user slider. to update the Weekly potential rewarded video ads earning number and see potential earnings.

Analytics
Use analytics metrics to evaluate the effectiveness of your rewarded video ads, test different reward types to identify the ones that best resonate with your audience, and measure how often users watch entire video ads to claim rewards.
To access your rewarded video ad metrics:
- In the Creator Dashboard, go to Creations and select a game.
- Go to Monetization ⟩ Ads ⟩ Analytics.
- Filter by Rewarded Video to see all of the available metrics.
| Metric | Description |
|---|---|
| Earnings (Robux) | Total revenue amount in Robux earned from rewarded video ads in your game. Different lines show you this metric for different ad placements inside the game. |
| Monetization Funnel at Experience level | This metric shows you:
|
| Fill Rate | The percentage of requests that had an ad returned as a reponse. |
| EPM (Earnings per Mille) | Your effective Robux earnings per thousand impressions. Calculated by total earnings / the number of impressions (in thousands) in your game. Different lines show you this metric for different ad placements inside the game. |
| Ad Opportunities | The number of opportunities users had to watch a video ad. Use this metric to track how many times a user had the chance to watch a video ad and the rate at which they actually took that chance and watched the ad. Different lines show you this metric for different ad placements inside the game. |
| Impressions | The number of rewarded video ads shown in your game. Different lines show you this metric for different ad placements inside the game. |
| Rewarded | The number of rewards granted for video ad views in your game. Different lines show you this metric for different ad placements inside the game. |
| DUV (Daily Unique Viewers) | The number of unique users who have viewed one or more video ads in your game in a day. A view is defined by an impression. This data is updated with 1 day delay. |
| AEPDUV (Average Earning Per Daily Unique Viewer) | The earnings generated per daily unique viewer for rewarded video ads. This data is updated with 1 day delay. |
| Eligible Daily Active User | The number of unique daily users to your game who were eligible to view rewarded video ads. This data is updated with 1 day delay. |
| DUV/eDAU | The percentage of ads-eligible users who visited your game and viewed one or more video ads in a day. |
| Opt-In Rate | The percentage of ads-eligible users who are engaging with ads in your game. |
| Frequency | The number of ads a user is seeing per day in your game. |
De-risk your implementation with experiments
If you're unsure how your community will react to a new rewarded video ad placement, you can use experiments to roll the placement out to a percentage of your users first. This lets you measure real-time changes in engagement and retention before rolling the placement out to your entire audience.
Eligibility requirements
To prevent abuse of the rewarded ad system and to provide the best user experience possible, you must follow the eligibility requirements when you implement rewarded video ads.
| Games | Games must:
|
| Publishers | As a publisher, you must:
|
| Rewards | The reward for watching a video ad should:
|
Best practices
To get the most out of your rewarded video ad, make sure to:
- Call GetAdAvailabilityNowAsync as close as possible to the moment you plan to show the ad. For example, if you have a "Watch video ad to get a reward" button in a shop menu, you should only call GetAdAvailabilityNowAsync when the user opens the shop menu. This approach improves performance by preventing ads from unnecessarily being held in memory, and benefits CPM (cost-per-thousand impressions) and earnings by optimizing the ad fill rate.
- Call GetAdAvailabilityNowAsync when the user finishes watching the ad to determine if another ad is available for the user to watch.
- Use analytics to identify the best placement for video ads to encourage user engagement without disrupting gameplay.
- Use ad opportunities to track when you offer a user a chance to watch a video ad for a reward. Keep an eye on the ratio between filled requests, ad opportunities, and ad impressions to figure out if you should make your ads easier to find or if your rewards need to be more compelling.
For the best reward strategy, we recommend that your rewards:
- Have prominent reward prompts to ensure all eligible users engage with the video.
- Be relevant to the gameplay and align with core game mechanics. For example, extra lives in a battle game or new customization options in a roleplaying game.
- Be scaled so that they remain valuable to users as they advance through the game.
- Motivate the user by offering in-game progression, collection, customization, or competition.
- Be offered at strategic moments, like after the user loses a life or after they complete a difficult level.
- Be offered at appropriate intervals to avoid making the reward so powerful that it trivializes in-game progression.
- Be a limited-time or rare reward to increase engagement.