Automatic engagement-based payouts let you earn Robux based on the share of time that Premium members engage in an experience, regardless of the experience's size. These payouts are in addition to earnings from other monetization methods such as Passes.
To encourage Premium subscriber growth and increase your potential to earn engagement-based payouts, you can add the Premium Purchase Modal directly into an experience.
Payout data can provide vital feedback to help you understand what factors drive Premium subscribers to your experiences.
Navigate to the Creator Dashboard.
Hover over the desired experience, click the ⋯ icon, and select Developer Stats.
In the top navigation, click the ENGAGEMENT-BASED PAYOUTS tab.
The Engagement-Based Payouts chart tracks payout data based on the following metrics:
Premium Playtime Score is the amount of time Premium subscribers engage with the experience per day. This metric can provide immediate feedback on the impact of new features you release.
Premium Playtime Robux Earned is the amount you can expect to earn for Premium subscriber engagement. This is not based on the daily time Premium subscribers spend engaging with the experience; instead, this metric aggregates each user's behavior over the past 28 days. As such, even though they have similar trends, this metric has no direct mathematical relationship with the Premium Playtime Score.
The Premium Visits chart tracks how many visits are from Premium members. Using the dropdown menu, choose Premium Visit Percentage, Premium Visits, or Total Visits.
One strategy to increase engagement-based payouts is to encourage Premium upgrade through the purchase modal. Players can complete the purchase entirely within the experience and immediately receive both Premium status and their initial stipend of Robux.
Remember that Premium membership should not be a "requirement" to enjoy an experience. When implementing incentives for Premium members, it's highly recommended that you follow these best practices:
- Honestly and accurately describe the benefits of upgrading within the experience's description.
- Do not promise Robux or other out-of-experience rewards that you don't control.
- Do not show the modal as a "paywall" when non-Premium members enter the experience.
- Consider offering exclusive merch to Premium members, but do not give them a tactical gameplay advantage over others, such as an array of ultra-powerful weapons that non-Premium members can't compete against.
local Players = game:GetService("Players")local player = Players.LocalPlayerif player.MembershipType == Enum.MembershipType.Premium then-- Take some action specifically for Premium membersend
You can trigger the purchase modal with the PromptPremiumPurchase() method. For example, the following code prompts users to purchase Premium when their character touches the part that its containing Script is attached to, such as a teleporter that allows access to an exclusive area.
local MarketplaceService = game:GetService("MarketplaceService")local Players = game:GetService("Players")local teleporter = script.Parentlocal showModal = truelocal TELEPORT_POSITION = Vector3.new(1200, 200, 60)-- Teleport character to exclusive arealocal function teleportPlayer(player)-- Request streaming around target locationplayer:RequestStreamAroundAsync(TELEPORT_POSITION)-- Teleport characterlocal character = player.Characterif character and character.Parent thenlocal currentPivot = character:GetPivot()character:PivotTo(currentPivot * CFrame.new(TELEPORT_POSITION))endend-- Detect character parts touching teleporterteleporter.Touched:Connect(function(otherPart)local player = Players:GetPlayerFromCharacter(otherPart.Parent)if not player then return endif not player:GetAttribute("CharacterPartsTouching") thenplayer:SetAttribute("CharacterPartsTouching", 0)endplayer:SetAttribute("CharacterPartsTouching", player:GetAttribute("CharacterPartsTouching") + 1)if player.MembershipType == Enum.MembershipType.Premium then-- User has Premium; teleport character to exclusive area within experienceteleportPlayer(player)else-- Show purchase modal, using debounce to show once every few seconds at mostif not showModal then return endshowModal = falsetask.delay(5, function()showModal = trueend)MarketplaceService:PromptPremiumPurchase(player)endend)-- Detect character parts exiting teleporterteleporter.TouchEnded:Connect(function(otherPart)local player = Players:GetPlayerFromCharacter(otherPart.Parent)if player and player:GetAttribute("CharacterPartsTouching") thenplayer:SetAttribute("CharacterPartsTouching", player:GetAttribute("CharacterPartsTouching") - 1)endend)-- Handle membership changed eventPlayers.PlayerMembershipChanged:Connect(function(player)warn("User membership changed; new membership is " .. tostring(player.MembershipType))-- Teleport character if membership type is Premium and character is on teleporterif player.MembershipType == Enum.MembershipType.Premium and player:GetAttribute("CharacterPartsTouching") > 0 thenteleportPlayer(player)endend)