Allow refunds of individual purchases, and bulk refunds of products/ gamepasses

The problem

As a Roblox developer, it is currently impossible to refund players their money without losing 30% of the product's purchase price through marketplace fees. It's also impossible to bulk refund, you have to go through and individually refund every purchase. On top of this, you usually have to ask people to contact you to ask for a refund, and then get into contact with them to let them know the refund has been completed.

We all make mistakes, and there have been times where I’ve broken developer products, or bugs made them work to a standard which is below my expectations and what I promised the user. In these cases I would like to be able to refund them, and I usually do, but either at a loss, or as a partial refund (minus the 30%).

My proposed solution

  • Refunds should be easy, quick and automatic, and there should be no 30% marketplace fee on the original revenue, in other words, there should also be a refund of the robux removed from the total to make up the 30% taken by Roblox. It doesn’t make sense that while I have to refund a player with my own money, Roblox keeps 30% of that original payment the player made despite their expectations not being met. A very rough example of a button:

  • A great feature would be allowing ‘bulk refunds’ where you can select a specific item and a specific time period, and automatically refund all purchases in that period of time for that specific item.

  • Messages/ Notifications telling players that they have been refunded. It doesn’t need to include a message from the developer, but being able to tell the player what’s up would be helpful to make it clear what the purpose for the refund is. I made a very rough example here:

This is a feature we dearly need. Players assume we can give full refunds at no loss, but it’s not possible and that damages our brands and the trust our players put in us.

162 Likes

I would love to be able to give users refunds easily

how they would work? not sure. This seems like a good start of an idea though

6 Likes

If they go through this I hope they can let us search purchase history of players on devproducts so I can stop clogging my datastores everytime someone buys a devproduct.

6 Likes

This is a great feature that is really useful, and would benefit just about everyone who has or is making a game.

2 Likes

It’s a step I feel has been needed for some time! I would like to bring up a couple extra points…

  1. We’d need some way to access a player’s specific purchase history involving our games on the fly. Considering how long the list of sales can go, it’s not fun to dig back down months of history.

  2. The option on whether the user keeps the product after refund. Some developers may wish to refund and revoke the product, whereas others may feel it fits better with their business to let the players keep refunded items under good faith, to help build a better reputation.

8 Likes

You would still need to do this either way, to ensure that you are not awarding a purchase twice for the same receipt ID.

EDIT: Although, you can get away with just storing the receipt ID then. :slight_smile:

2 Likes

I think it would be a good idea to have a refund all button too, in case we have to remove a gamepass that we think we can’t maintain or keep anymore.

2 Likes

I support the idea, however there’s one main problem with a feature like this that would need to be worked out: What happens with the money if it’s spent? Say a group makes 100 robux, they spend it all on a badge, then they refund all of their players. That’s over 100 robux that just came out of nowhere. Maybe take robux out of group funds (or the owner’s account if there’s no group)?

1 Like

I would presume so, yes. Having Refund create additional Robux instead of taking it from the game owner’s balance would create a lot of problems.

If the game owner’s balance is too low then they cannot use Refund.

3 Likes

I think the basic method for this would be that you can’t refund unless you have 70% of the original purchase price (taking into account the 30% marketplace fee)

4 Likes

This request has been filed :slight_smile:

28 Likes

Highly agree with this :slight_smile:

4 Likes

Yes, and as seen with this years Bloxy Awards theatre issues, same as last year’s, seats have needed to be refunded. Although Roblox will probably cover these refunds, it just shows how a feature like this is so desperately needed. Please make it happen!

5 Likes

I agree with this from a players perspective but from a devs perspective it would suck.

So many more messages asking for refunds, having to roll back in game data (when currency is already spent), etc. Maybe a MarkeplaceService refund API could be created that would be called upon refunding a player. At that point you could put your datastore correction code. Still seems super complicated. If there’s a good solution to this problem I would be down, otherwise nah.

I’ve never had to refund someone… And it’s super easy to send a group payout if you use groups.

Edit: this refund API would be a good case for universe level code feature that is on the road map. Because it probably won’t run on just one gameserver.

2 Likes

I agree on that, it would probably better in the form of ‘Revoke payment’ or something similar, so that players are not actually being ‘refunded’, rather their payment is being rejected.
If as a developer, you just have a policy of not refunding on the basis of ‘i didnt like it’ then it should improve it, but I also understand where you’re coming from and have the same concerns.

1 Like

At the scale of a big game, it’s simply impossible to be customer service, game manager, AND developer. Yes it would be cool to be able to do something like this, but not really practical and a “no refunds” policy is just something we’ve all adapted to. Bugs can be fixed, and most people get what they bought if you have the proper systems for it. I personally just don’t have the time to sit through a thousand messages of players asking for refunds for whatever reasons.

5 Likes

As a developer, it’s currently hard to refund users for gamepasses they have bought because first of all it wont take away the gamepass and second of all if I was to refund a user I can only refund them 70% of what they paid so this is why I want this feature.

How it would work:
You would go on sales and find the purchase you desire, after that you would press the ‘‘Refund’’ button and it would refund the amount the person paid for the gamepass (in full).

  • It would take it away from the groups funds
  • ROBLOX Tax would not get involved

Example:

Extra:
If the group doesn’t have enough funding to refund (would only need 70% of the amount of the gamepass in funds or pending funds since ROBLOX takes 30%) then it would give an error saying ''Insufficient funds to refund."

Why this needs to be a feature:
With a refund feature it would give the possibilities if the gamepass was not getting used anymore or the developer just decided to refund the person because they didn’t want the pass anymore.

Please note:
This would NOT require developers to refund, only an optional feature that needs to be added.

8 Likes

I think that if a player is refunded and its a game pass, the gamepass should automatically be removed.
I also think that there should be a “Refund Service” or just another feature to marketplace service in order to handle refunds for successful purchases in developer products. I also think that in this new page, that refunds for successful purchases should fire a “Refunded, successful purchase” for this new service or feature to marketplace service.
To add onto the Refund Page Idea, I think that a developer can select a refund type, IE Refund for Purchase failed, Refund for Successful Purchase, or a Refund Exclusive to just give a refund and nothing else.

Example for a Refund Service

local RefundService = game:GetService("RefundService")

game.Players.PlayerAdded:Connect(function(player)
    local isRefundBeingProccessed = RefundService:IsRefundBeingProccessed(player)
    if isRefundBeingProccessed then
        local refundsToHandle = RefundService:GetRefundsToProcess(player)
        for k, v in pairs(refundsToHandle) do
            if v.RefundState == Enum.RefundState.SuccessfulPurchase then
                local productId = v.ProductId
                --remove coins etc...
                RefundService:PromptRefundSuccessful(v.RefundId)
                --Prompt Refund successful will remove this specific refund from the
                --refund to proccess list AND give the player his Robux back
            elseif v.RefundState == Enum.RefundState.PurchaseFailed then
                --Do nothing, this refund was given due to the fact that the player
                --did not recieve any item or stat boost
                --or a player can be gifted a 'were sorry, take a gift and please leave us alone' item
                RefundService:PromptRefundSuccessful(v.RefundId)
            elseif v.RefundState == Enum.RefundState.RefundExclusive then
                --still do nothing as the developer gave a Refund with the intent
                --of the player still keeping the items, hence the name
                --'Refund Exclusive'
                RefundService:PromptRefundSuccessful(v.RefundId)
            end
        end
    end
end)

Another thing to note
I think that after 10 - 30 Days, the Refund will automatically be given to the player And it will not be handled, IE he wont get anything, in order to prevent a yielding situation where a Refund is on a waiting list to process indefinitely as there is a chance that the player may not join the game he wants a refund for.

5 Likes

I manually handle refunds for my group by reading the group wall + transactions.

  • The group sale/transactions page is already tedious to navigate since you can’t search for results by username or product ID.

  • With the recent changes to eligibility for receiving group payouts, it has become significantly more difficult to handle refunds. It is not known for how long a member should be part of a group to be capable of receiving payouts, this puts a dent in my bookkeeping process.

I’ve incurred losses due to giving refunds in full, but it made players more willing to actually spend robux on my group game, so it was worth it. But all these design choices are making it far too unreasonable to keep giving out refunds. The inability to give out refunds worsens public relations with my group, affects customer loyalty and thus reduces the chances of people spending money to begin with.

6 Likes

Why is this still only a feature Roblox has the ability to do? We should be able to process refunds for our own users, for our own reasons, on our own behalf. Wherever it was for an experience-based (didn’t expect/like) or technical issue (didn’t work/glitch/double charged, etc.), for the basis being the refund, the fact of still not being able to do this is painfully annoying. Yet, Roblox can process refunds, if they have the need to.

1 Like