Monetization is a core feature of many successful Roblox games. Game Passes and Developer Products are the two main ways to earn Robux from your players. Both require setup through the Roblox website and scripting in Roblox Studio to function.

The key difference: Game Passes are one-time purchases that give permanent benefits, while Developer Products can be bought repeatedly and are great for consumables.

Game Passes vs. Developer Products

Game Passes are permanent purchases. Once a player buys one, they own it forever. Ideal for cosmetics, exclusive roles, permanent bonuses, or access to areas. You set a price once, and it doesn't change per purchase.

Developer Products are consumable purchases. Players can buy the same one multiple times. Perfect for in-game currency, power-ups, temporary boosts, or loot boxes. You decide if the product is consumable (resets after purchase) or not.

Most games use both: Game Passes for perks, Developer Products for currency or repeatable items.

Creating a Game Pass

Game Passes are created on the Roblox website, not in Studio.

  1. Go to your Create page (roblox.com/create).
  2. Find your game and click its name or thumbnail to enter the game settings.
  3. In the left menu, click Game Passes.
  4. Click the Create a Game Pass button.
  5. Upload a 512×512 icon image.
  6. Enter a name and description.
  7. Set the price in Robux (minimum 1, maximum 40,000 per Roblox's limits).
  8. Click Create Game Pass.

Once created, you'll see a Game Pass ID. Write this down—you need it for scripting.

💡 Tip — Test your Game Pass with a small price (like 1 Robux) before launching. You can change the price anytime.

Creating a Developer Product

Developer Products are also created on the website, in a similar flow.

  1. Go to your Create page.
  2. Find your game and enter its settings.
  3. In the left menu, click Developer Products.
  4. Click the Create a Developer Product button.
  5. Upload a 512×512 icon.
  6. Enter a name and description.
  7. Set the price in Robux.
  8. Choose Consumable if players can buy it repeatedly (recommended for currency), or Non-Consumable if they should only buy it once.
  9. Click Create Developer Product.

Save the Developer Product ID for scripting.

Scripting Game Pass Detection

Once a player owns a Game Pass, you detect it with the MarketplaceService and give them the benefit.

Place this script in ServerScriptService. It runs when a player joins and checks if they own a specific Game Pass.

Game Pass Detection (ServerScriptService)
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")

local GAME_PASS_ID = 12345678 -- Replace with your Game Pass ID

local function onPlayerAdded(player)
    local success, owns = pcall(function()
        return MarketplaceService:UserOwnsGamePassAsync(player.UserId, GAME_PASS_ID)
    end)
    
    if success then
        if owns then
            print(player.Name .. " owns the Game Pass!")
            -- Give them a benefit here
            -- Example: add a tool, change walkspeed, grant currency, etc.
        end
    else
        warn("Failed to check Game Pass for " .. player.Name)
    end
end

Players.PlayerAdded:Connect(onPlayerAdded)

-- Check existing players when script starts
for _, player in pairs(Players:GetPlayers()) do
    onPlayerAdded(player)
end

Replace 12345678 with your actual Game Pass ID. The pcall wraps the check in error handling—if the Roblox servers are down, it won't crash your game.

Inside the if owns then block, add your reward logic. For example:

Give a Reward for Game Pass
if owns then
    -- Add a VIP tag
    local character = player.Character
    if character then
        local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")
        if humanoidRootPart then
            local billboardGui = Instance.new("BillboardGui")
            billboardGui.Size = UDim2.new(4, 0, 2, 0)
            billboardGui.MaxDistance = 100
            billboardGui.Parent = humanoidRootPart
            
            local textLabel = Instance.new("TextLabel")
            textLabel.Text = "VIP"
            textLabel.TextScaled = true
            textLabel.BackgroundColor3 = Color3.fromRGB(255, 215, 0)
            textLabel.Size = UDim2.new(1, 0, 1, 0)
            textLabel.Parent = billboardGui
        end
    end
end

Scripting Developer Product Purchases

Developer Products require two things: a purchase prompt and handling the purchase result.

Place this in ServerScriptService:

Developer Product Purchase Handler (ServerScriptService)
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")

local DEVELOPER_PRODUCT_ID = 87654321 -- Replace with your Developer Product ID

local function onProcessReceipt(receiptInfo)
    local player = Players:GetPlayerByUserId(receiptInfo.UserId)
    
    if player then
        if receiptInfo.ProductId == DEVELOPER_PRODUCT_ID then
            print(player.Name .. " purchased the product!")
            
            -- Give them the reward
            -- Example: add currency, give items, increase stats
            local leaderstats = player:FindFirstChild("leaderstats")
            if leaderstats then
                local gold = leaderstats:FindFirstChild("Gold")
                if gold then
                    gold.Value = gold.Value + 100
                end
            end
        end
    end
    
    -- Return Enum.ProductPurchaseDecision.PurchaseGranted to confirm the purchase
    return Enum.ProductPurchaseDecision.PurchaseGranted
end

MarketplaceService.ProcessReceipt = onProcessReceipt

To let players buy the product, place this in a LocalScript inside a ClickDetector (or GUI button). This prompts the purchase dialog:

Purchase Prompt (LocalScript in ClickDetector or GUI)
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")

local DEVELOPER_PRODUCT_ID = 87654321 -- Same ID as above

local function onClicked()
    local player = Players.LocalPlayer
    if player then
        MarketplaceService:PromptProductPurchase(player, DEVELOPER_PRODUCT_ID)
    end
end

script.Parent.MouseClick:Connect(onClicked)

If using a GUI button instead, change the last line to:

Purchase Prompt for GUI Button
script.Parent.MouseButton1Click:Connect(onClicked)
💡 Tip — Always return PurchaseGranted after giving the reward, or the purchase won't be confirmed. If something fails, you can return PurchaseDeclined to refund the player.

Testing Your Setup

Test purchases locally before publishing to avoid issues.

  1. Publish your game to Roblox (even a draft is fine).
  2. In Roblox Studio, go to HomeTestRun.
  3. Open the Roblox in-game shop (if you added a purchase button) or check the server output for Game Pass detection logs.
  4. If you're the developer, purchases in Test mode are free but still trigger the script logic.

Check the Output window in Studio for debug messages. If nothing prints, verify your IDs match and the scripts are in the right places.

You can also use a test account to verify the purchase flow. Just make sure you have Robux or use a developer exchange for testing.

Best Practices for Monetization

  • Be fair to free players. Game Passes should feel optional, not mandatory. Paid cosmetics are less controversial than paid power boosts.
  • Use both types wisely. Game Passes for permanent perks, Developer Products for repeatable purchases like cosmetics or battle pass tiers.
  • Test prices carefully. Start low and increase after feedback. Most casual games price Game Passes at 50–500 Robux.
  • Update your rewards. Check that Game Pass owners get their perks even after updates. Use version control for your scripts.
  • Avoid pay-to-win. Games that let players buy stat boosts get negative reviews. Focus on cosmetics and convenience.
  • Monitor sales and feedback. Use the analytics on your game's Create page to see which products sell best.

Monetization is optional but rewarding. Many successful Roblox games earn thousands of Robux per day through thoughtful Game Pass and Developer Product design.