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?

These scenarios keep the marketplace experience smooth while giving players flexibility.

Step‑by‑Step Script to Enable Re‑Purchasing

  1. Set Up a Remote Event
    Create a RemoteEvent named GamepassBought in ReplicatedStorage. This event will fire each time a purchase is confirmed.
  2. 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.
  3. 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.
  4. Return the Correct Enum
    The receipt function must return Enum.ProductPurchaseDecision.PurchaseGranted so Roblox knows the transaction succeeded.
  5. 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 =