Game passes and developer products are the main ways to make money from your Roblox game. Game passes are permanent one-time purchases that usually give permanent perks (like a VIP role or exclusive cosmetic). Developer products are consumable items that players can buy multiple times, like a damage boost or extra currency.
You'll set these up in the Creator Dashboard, then script them to trigger rewards when players buy them. Let's build both.
Create a Game Pass
Game passes are permanent purchases tied to a specific game. Head to the Creator Dashboard and open your game.
- Click Monetization in the left sidebar.
- Select Game Passes.
- Click Create a Game Pass.
- Upload an icon (at least 512×512 pixels — make it eye-catching).
- Give it a name and description. Be clear: "VIP Access" is better than "Cool Pass".
- Set the price in Robux. New games often start at 99 or 199 Robux.
- Click Create.
Copy the game pass ID from the page. You'll need this in your script. It looks like a long number.
Create a Developer Product
Developer products are consumable and can be bought multiple times. They're ideal for boosts, currency, or one-use power-ups.
- In Monetization, select Developer Products.
- Click Create a Developer Product.
- Pick an icon and write a name and description.
- Set the price.
- Choose the product type: Consumable (can buy again) or Non-Consumable (one purchase per player).
- Click Create.
Copy the product ID as well.
Script Game Pass Purchases
When a player buys a game pass, you detect it and give them the reward. Use MarketplaceService to handle this.
Create a new Script (not LocalScript) in ServerScriptService. This script will listen for purchases across all players.
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
-- Replace with your actual game pass ID
local VIP_PASS_ID = 123456789
-- Function to give the reward
local function giveVIPReward(player)
-- Add VIP tag, give them a badge, unlock features, etc.
print(player.Name .. " bought VIP!")
-- Example: create a value to mark them as VIP
local vipTag = Instance.new("BoolValue")
vipTag.Name = "IsVIP"
vipTag.Value = true
vipTag.Parent = player
end
-- Check if player already owns the pass on join
local function onPlayerJoin(player)
local success, owns = pcall(function()
return MarketplaceService:UserOwnsGamePassAsync(player.UserId, VIP_PASS_ID)
end)
if success and owns then
giveVIPReward(player)
elseif not success then
print("Error checking game pass for " .. player.Name)
end
end
-- Listen for purchase confirmation
MarketplaceService.PromptGamePassPurchaseFinished:Connect(function(player, passId, purchased)
if passId == VIP_PASS_ID and purchased then
giveVIPReward(player)
end
end)
-- Connect to existing players
Players.PlayerAdded:Connect(onPlayerJoin)