15 min read

Source: Roblox Creator Hub · CC BY 4.0 · View source · Code samples: MIT Imported 2026-10-03. Formatting adapted for this site.

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:

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:

Implement rewarded video ads

Note

Rewards must be developer products. You can't reward users with Robux.

Note

Video ads shouldn't negatively impact the user's character during gameplay. To make sure their character isn't harmed, you can pause damage while an ad plays or only show ads in safe zones like the game lobby.

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. Enable rewarded video ads in Creator Hub.
  3. 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.
  4. 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.

Note

Earnings from rewarded video ads come from impressions. Your total earnings are calculated by multiplying EPM (earnings per 1000 impressions) by the total number of impressions.

Video ad setup

To set up a rewarded video ad inside your game:

  1. Go to Creations and select a game.
  2. Go to Monetization ⟩ Ads ⟩ Settings.
  3. Under Rewarded Video ⟩ Serving, 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 AdService:GetAdAvailabilityNowAsync() to check whether an ad is available before attempting to show it.

Note

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, only call it when the user opens the shop menu.

-- 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.

    Add a placementId to track individual video ad placements inside your game.
  4. Use the ProcessReceipt method to grant the user their reward if they have watched the entire video ad.
-- 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 Monetization ⟩ Ads ⟩ Placements.
  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.

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 Monetization ⟩ Ads ⟩ Settings.
  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 Monetization ⟩ Ads ⟩ Eligibility.
  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 Monetization ⟩ Ads ⟩ Analytics.
  3. 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:

  • **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 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:

  • 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 **Monetization** ⟩ **Ads** ⟩ **Eligiblity**. You'll receive a response within 24 hours.
  • Have an average of at least **2,000 unique visitors per month**.
  • Comply with the [Roblox terms of use](https://en.help.roblox.com/hc/en-us/articles/115004647846-Roblox-Terms-of-Use), [community standards](https://en.help.roblox.com/hc/en-us/articles/203313410-Roblox-Community-Standards), and [publisher integrity requirements](https://en.help.roblox.com/hc/en-us/articles/13722260778260-Advertising-Standards#publisher-integrity).
**Publishers** As 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](/docs/roblox-production-publishing-account-verification#verify-through-government-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.
**Rewards** The 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](#best-practices) for more guidance on choosing the right reward for your video ad.

Note

Resubmitting your Maturity and Compliance Questionnaire will temporarily remove your ads eligibility while the questionnaire is under review. To avoid repeated interruptions, only resubmit the questionnaire when you publish a game update that changes your previous responses.

Note

Any violation of the eligilibity requirements can result in account suspension, removal of content, revocation of ad payouts, or loss of eligibility to earn from ads.

Best practices

To get the most out of your rewarded video ad, make sure to:

For the best reward strategy, we recommend that your rewards: