Skip to content
BloxIQ
Guides

Game passes vs developer products on Roblox: which to use

The difference between Roblox game passes and developer products, when to use each, how ProcessReceipt works, and the mistakes that lose players' Robux.

By BloxIQ Research · · 8 min read

Roblox gives you two main ways to sell things inside your experience: game passes and developer products. They look similar in the Creator Hub, but they behave differently, they're scripted differently, and picking the wrong one causes real problems, from players paying twice for the same thing to purchases that never arrive.

Here's how to choose, and how to script each one safely.

The short answer

Game passDeveloper product
BoughtOnce, owned foreverAs many times as the player likes
Good forVIP, permanent multipliers, extra slots, cosmetics bundlesCurrency packs, boosts, revives, skips
Roblox remembers itYes, ownership is stored by RobloxNo, you must save what was granted
Main script callUserOwnsGamePassAsyncProcessReceipt callback

If the player should only ever buy it once, it's a game pass. If they can buy it again, it's a developer product.

When to use a game pass

Game passes suit permanent upgrades a player would be annoyed to lose: a VIP area, a 2x coins multiplier, an extra pet equip slot, a radio, a special trail. Because Roblox stores ownership, you don't need your own save data to know whether someone has one. That makes them simpler and harder to break.

Good game passes:

  • Improve play rather than replace it. 2x coins speeds up a loop the player already enjoys. "Skip the whole game" removes the reason to play.
  • Are visible to other players. A VIP tag or a cosmetic trail advertises itself.
  • Have a cheap first option. A low-priced pass is often a player's first purchase in your game, and first purchases matter more than price. See monetising without driving players away.

When to use a developer product

Developer products suit anything consumable: a bag of coins, a 30-minute luck boost, a revive after dying, skipping a stage in an obby. The player can buy them repeatedly, so they're how most games earn ongoing revenue from engaged players.

The catch is that Roblox only tells your server that a purchase happened. Granting the item and saving it is your job, and if your code fails at the wrong moment the player loses Robux and gets nothing.

Scripting a game pass

Check ownership when the player joins, and listen for purchases made during the session:

local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")

local VIP_PASS_ID = 0 -- your pass ID from the Creator Hub

local function grantVip(player)
	player:SetAttribute("VIP", true)
end

Players.PlayerAdded:Connect(function(player)
	local ok, owns = pcall(MarketplaceService.UserOwnsGamePassAsync, MarketplaceService, player.UserId, VIP_PASS_ID)
	if ok and owns then
		grantVip(player)
	end
end)

MarketplaceService.PromptGamePassPurchaseFinished:Connect(function(player, passId, purchased)
	if purchased and passId == VIP_PASS_ID then
		grantVip(player)
	end
end)

Two things to note. UserOwnsGamePassAsync is a web call, so wrap it in pcall and decide what happens if it fails (retrying is better than silently treating a paying player as a non-owner). And always grant the benefit on the server; a pass checked only in a LocalScript can be faked.

Scripting a developer product

Developer products are handled through a single ProcessReceipt callback per server. Roblox calls it with a receipt, and you must return PurchaseGranted only once the item has been granted and saved. If you return NotProcessedYet, Roblox will try again later, for example when the player next joins.

The rules that keep it safe:

  1. Set the callback once, in one server Script. A second assignment replaces the first.
  2. Record each receipt's PurchaseId in your saved data. If the same receipt arrives again, return PurchaseGranted without granting twice.
  3. Grant and save before returning PurchaseGranted. If saving fails, return NotProcessedYet so Roblox retries.
  4. Handle players who left. If the player isn't in this server any more, return NotProcessedYet.

Roblox's documentation for MarketplaceService.ProcessReceipt has a full sample you should start from rather than writing your own from scratch.

Pricing and what you actually earn

Both are priced in Robux, and Roblox keeps a share of each sale, so you receive less than the sticker price. The Robux you keep are earned Robux, which can be cashed out through DevEx once you meet the requirements. Our DevEx calculator converts earned Robux into dollars at the current rate, and how much Roblox games make explains the rest of the maths.

Prices can be changed later, but changing a game pass price after many players bought it at a higher one tends to upset them. Changing developer product prices is less sensitive because each purchase is separate.

Common mistakes

  • Selling a permanent upgrade as a developer product. Players expect "2x coins forever" to survive a rejoin. If your save fails, they've lost it.
  • Selling something consumable as a game pass. A "100 coins" pass can only be bought once, which caps your revenue for no reason.
  • Granting on the client. Anything that matters must be granted by the server.
  • Ignoring failed saves. Returning PurchaseGranted before data saves is the classic cause of "I paid and got nothing" reports.
  • Selling random rewards without showing odds. If a purchase gives a random item, Roblox's policies require you to show the odds, and some regions restrict paid random items entirely. Check PolicyService before you show those offers.

Checklist

  • Permanent benefit → game pass; repeatable → developer product
  • Ownership and grants checked on the server
  • Web calls wrapped in pcall with a retry plan
  • One ProcessReceipt callback, receipts recorded, saved before PurchaseGranted
  • A cheap first purchase available
  • Odds shown for any paid random reward

If you want to see how games in your genre structure their store, BloxIQ's competitor tracking shows their public changes over time, and the AI Coach can suggest a pass and product ladder for your loop.

Spotted an error? Tell us and we'll correct it. BloxIQ is not affiliated with Roblox Corporation.

Keep reading

Put the habits into practice

BloxIQ tracks medians, coverage and baselines for you.

Game passes vs developer products on Roblox: which to use · BloxIQ