How To Make A Roblox Gamepass Buyable Multiple Times
Roblox developers often create gamepasses to offer exclusive perks, cosmetics, or abilities. By default, a gamepass can be purchased only once per user. In some games, however, you may want a player to buy the same pass multiple times—such as when the pass grants a consumable item, a temporary boost, or a stackable upgrade. This guide walks you through the logic and scripting needed to make a gamepass purchasable repeatedly, while staying within Roblox’s marketplace rules.
Understanding the Default Gamepass Behavior
When a player buys a gamepass, Roblox records the purchase in the MarketplaceService API. The function UserOwnsGamePassAsync will then return true for that user, preventing a second transaction. To override this, you must separate the ownership check from the benefit delivery. In other words, the gamepass remains “owned,” but you treat each purchase as a distinct event that grants a new reward.
Why Allow Multiple Purchases?
- Consumable items – a pass that gives a bag of in‑game currency each time it’s bought.
- Stackable upgrades – each purchase adds another level to a player’s speed or jump boost.
- Event passes – a limited‑time pass that can be bought each season for a fresh reward.
These scenarios keep the marketplace experience smooth while giving players flexibility.
Step‑by‑Step Script to Enable Re‑Purchasing
- Set Up a Remote Event
Create a RemoteEvent named GamepassBought in ReplicatedStorage. This event will fire each time a purchase is confirmed. - Detect Purchase Completion
Use MarketplaceService.ProcessReceipt to handle the transaction. The receipt is sent for every purchase, even if the player already owns the pass. - Grant the Reward
Inside the receipt handler, check the ProductId against your gamepass ID. Then award the desired item—coins, a tool, or a stat boost—without checking ownership. - Return the Correct Enum
The receipt function must return Enum.ProductPurchaseDecision.PurchaseGranted so Roblox knows the transaction succeeded. - Optional: Store Purchase Count
If you need to track how many times a player bought the pass, create a IntValue under the player’s profile and increment it each receipt.
Below is a concise example script that you can place in ServerScriptService:
local MarketplaceService = game:GetService("MarketplaceService") local ReplicatedStorage =