Rewarded video ads



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:

  1. 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.
  2. 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.
  3. 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:

  1. Go to Creations and select a game.
  2. Go to MonetizationAdsSettings.
  3. Under Rewarded VideoServing, turn on the Serving enabled toggle.
  4. 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.
  5. 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:

  1. Add a new LocalScript to the button you just inserted into your game.
  2. 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:

  1. Create a new Script under ServerScriptService.
  2. Use the CreateAdRewardFromDevProductId method to pass the developer product ID of the reward and create an AdReward object.
  3. Use the ShowRewardedVideoAdAsync method to play the video ad to the user.
  4. 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:

  1. In the Creator Dashboard, go to Creations and select a game.
  2. Go to MonetizationAdsPlacements.
  3. Click Create placement.
  4. 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:

  1. In the Creator Dashboard, go to Creations and select a game.
  2. Go to MonetizationAdsSettings.
  3. 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:

  1. In the Creator Dashboard, go to Creations and select a game.
  2. Go to MonetizationAdsEligibility.
  3. Under Ad format, select Rewarded video.
  4. 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:

  1. In the Creator Dashboard, go to Creations and select a game.
  2. Go to MonetizationAdsAnalytics.
  3. Filter by Rewarded Video to see all of the available metrics.
MetricDescription
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 levelThis metric shows you:

  • Requested: The number of ads requested by ads-eligible users in your game.
  • Filled: The number of ads received by ads-eligible users in your game.
  • Ad Opportunities: The number of opportunities users had to watch a video ad.
  • Impressions: The number of impressions from the video ads in your game. The first frame of a video ad shown to a user counts as an impression.
  • Rewarded: The number of video ad rewards granted to users.
Fill RateThe 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 OpportunitiesThe 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.
ImpressionsThe number of rewarded video ads shown in your game.

Different lines show you this metric for different ad placements inside the game.
RewardedThe 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 UserThe 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/eDAUThe percentage of ads-eligible users who visited your game and viewed one or more video ads in a day.
Opt-In RateThe percentage of ads-eligible users who are engaging with ads in your game.
FrequencyThe 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.

GamesGames must:

  • Be public and unrestricted.
  • Offer no free-form user creation.
  • Have a complete Maturity and Compliance Questionnaire that has been reviewed and approved by Roblox. If the review status is Pending, you can request a re-review from the game's advertising eligibility page under MonetizationAdsEligiblity. You'll receive a response within 24 hours.
  • Have an average of at least 2,000 unique visitors per month.
PublishersAs a publisher, you must:

  • Be 13+ years of age.
  • Have an account that is in good standing with Roblox.
  • Have enabled two-step verification (2FA) and verified your ID on your account.
  • Implement a clear action that the user has to take before the video ad is played for them. For example, a button that the user has to click.
  • Provide clear and accurate disclosures prior to each trigger of the video, including what the reward is and what the user is required to do to earn it. These disclosures must be unambiguous to the user. For example, you can add text that says “Watch the ad to earn 10 diamonds!” to the video ad play button.
  • Issue the reward to the user immediately after the rewarded video ad has finished playing.
  • Not force the user to initiate the video ad as a progress gate in the game.
  • Not take over the user's screen visibility or obscure their avatar motion.
  • Not promote or implement fraudulent rewards, including free Robux or money, to deceptively incentivize the user to watch the video ad to completion. This also includes using inaccurate reward descriptions or implementing mechanisms that don't fulfill the reward promised to the user.
RewardsThe reward for watching a video ad should:

  • Be granted upon completion of a video ad view.
  • Be a developer product which would normally be available to purchase with Robux inside an in-game shop.
  • Not inflate currency or unbalance the game's economy.
The right reward strategy is critical. See Best practices for more guidance on choosing the right reward for your video ad.

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.
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.