Hi Creators,
Starting today, you can offer Regional Pricing for your developer products. We have previously launched Regional Pricing for passes, and avatar items. By offering region-specific pricing, creators will give users pricing that reflects their local economy. In turn, users outside your region will be more likely to spend Robux inside your experience, helping you earn more.
Experiences that have adopted Regional Pricing have seen a business impact. For instance, Regional Pricing for Passes has led to an 22.4% increase in paying users in Brazil, 44.8% increase in the Philippines, and 13.8% increase in Mexico.
Creators decide which passes and developer products they would like to be opted-in and set a “default price”. Roblox then updates those prices in each region periodically. Region-specific prices are determined using a variety of signals, including a region’s purchasing power, currency exchange rates, and local spending behavior on Roblox.
From top to bottom: An in-experience store shown to a user in the US, and that in-experience store with Regional Pricing enabled shown to a user in Brazil.
For example, let’s say you’ve priced a developer product at 1,000 Robux in the United States. Without Regional Pricing, that developer product would be priced at 1,000 Robux in all countries, with you having to balance between their local pricing preference and the global market. 1,000 Robux may be an accessible price for users to pay in the United States, but that same price would be considered a premium in other regions.
Once that creator enables Regional Pricing, they can more easily align prices to their local markets. In this example, users in Brazil would be able to purchase that developer product for 700 Robux and users in India would be able to purchase for 500 Robux. As a result, more users are likely to buy the developer product, leading to higher overall sales volume and increased total earnings from that developer product despite the lower price points in some regions.
When Regional Pricing is enabled, the prices users see will depend on the region where they are located. To prevent users from taking advantage of lower prices outside their region, we use a variety of signals to determine a user’s location. Users cannot manually update their location to take advantage of lower prices. Users accessing Roblox through a VPN may not receive region-specific pricing. Similarly, users traveling abroad for a short duration will continue to see prices from their home country.
Protecting Your Trades and Gifts
If your experience has trading or gifting, you should use the User Price Level API, which checks whether two users are compatible for trading or gifting.
The API allows creators to pass in the user IDs of users attempting to do any in-experience gifts or trades, and will return a number (1-1000) that indicates a user’s pricing level. A higher value implies the user pays a higher price than someone with a lower price level. Creators can use this API to determine which users are allowed to trade or gift with one another. For example, creators can limit whether users in low-cost regions can gift or trade with users in high-cost countries. Additionally, creators can use this API to tailor their offerings to users in high or low cost regions.
For more details on how to implement User Price Level API, you can review our documentation.
Make Sure Prices Are Updating Dynamically
To ensure the best experience for users, creators must ensure the prices of their developer products are dynamically scripted through the MarketplaceService API. You can do this by using GetProductInfo() or GetDeveloperProductsAsync() on the client to retrieve and display current prices. The API should be called from the client for every user.
We’ve created a dynamic price check tool to help you identify which of your prices are dynamically updated. To do this, it updates all products for sale with a mock price to identify which of your product prices are hard-coded and which are scripted with the MarketplaceService API inside your experience. If a product price updates to the mock Robux price, that price has been scripted correctly. If it remains the same, it’s been hard-coded or the price is not fetched using a client script. The price will need to be dynamically scripted for regional prices to be accurately reflected inside the experience. For further instructions on how to properly script product prices, see Selling Passes, Selling Developer Products and Developer Products | Documentation - Roblox Creator Hub.
- Go to Monetization > Developer Products
- Click … and select Dynamic Price Check
- Under Add test accounts, enter up to five Roblox users to check for hard-coded prices
- Select a testing type
- Price pinned updates all dynamically-scripted prices with a set fake Robux amount
- Location pinned updates all dynamically-scripted prices with a region-specific price for a fake location
- Click Enable. After a few minutes, you can enter your experience to identify the hard-coded prices
To disable the dynamic price check tool, go to the Dynamic Price Check page and click Disable.
How to Set Up Regional Pricing for Developer Products
Once you’ve checked that your Developer Products are set up correctly, you can turn on Regional Pricing for some or all of your Developer Products on Creator Hub. Here’s how to do this:
- Once you’ve set up dynamic pricing, go to Creations and select an experience
- For experiences that have trading or gifting, you should use the User Price Level API to check the price compatibility of trade/gift.
- Go to Monetization > Developer Products
- Enable Regional Pricing for multiple items at once by selecting Developer Products > Enable Regional Pricing:
- Alternatively, select an existing Developer Products or create a new Developer Product to regionalize one Developer Product
- Click Sales
- Turn on Enable Regional Pricing. The Top Countries/Regions list updates to show the adjusted regional price per country or region based on the default price of the Developer Product. To view regional prices for all countries and regions, click View all.
- Click Save Changess and regions, click View all.
- Click Save Changes
- Click Sales
- Regional prices will be adjusted periodically to reflect shifting economic conditions around the world and on the Roblox platform. If a user’s location cannot be determined or they are using a VPN, they will be given the default price
- Track changes to payer conversion by region, as well as revenue and average revenue per daily active user (ARPDAU) by going to Creator Hub > Monetization > Overview. Then, scroll down to Payer Conversion Rate
Additional Resources
- Documentation - Regional Pricing
FAQs
Can I turn Regional Pricing on or off at any time?
- Yes. Creators can opt-in and opt-out of Regional Pricing for Passes at any time.
Can I customize the price for each region?
- No. Creators can select the default price for each Pass. Roblox then sets region-specific pricing for each Pass that is opted-in for Regional Pricing automatically.
How do I track the impact of regional pricing on my experience?
- Creators can key metrics across regions in Creator Hub.
- For a breakdown of active users by country, go to Creator Hub > Analytics > Demographics.
For monetization, creators can track revenue, payer conversion rate, average revenue per paying user (ARPU), and average revenue per daily active user (ARPDAU) by navigating to Creator Hub > Monetization > Overview.
Can users gift or trade regionally-priced developer products?
- If your experience has gifting or trading, before opting in to Regional Pricing for Developer Products, you will need to use the User Price Level API to configure which users are eligible to gift or trade with one another. For example, you may want to prevent users in low-cost regions from gifting or trading with users in high-cost regions. For more details, you can review our documentation.
Do I need to use the Dynamic Price Check before enabling Regional Pricing? What happens if prices are not scripted dynamically?
- If your products are hard-coded, users inside your experience may not see the correct region-specific price for that developer product or pass, which could cause confusion. To prevent this, you can use our dynamic price check tool to identify which developer product(s) or pass(es) use hard-coded prices. From there, you should use the
MarketplaceServiceAPI to set up prices correctly. Instructions for doing so can be found here.
How are you preventing users from changing locations to take advantage of lower prices?
- Ensuring fairness and preventing misuse are our top priorities for this tool. By using a variety of signals to determine a user’s location, we are mitigating the ability of users to manually update their location to take advantage of lower prices. Until we have high confidence in a user’s location, users will get the default (highest) price. That includes users who access Roblox from a VPN.
What is the maximum price difference for a product once regional pricing is enabled?
- Currently, regional prices will not be discounted by more than 70% of your default price, and they will never exceed the default price you set for your item. For example, in-experience items with a default global price of 100 Robux can be as low as 30 Robux in some regions, depending on local economies.
How do I preview the price of my developer product in each country?
- On Monetization > Products > Regional Pricing, select Enable Regional Pricing. The Top Countries/Regions list updates to show the adjusted regional price per country or region based on the default price of the product or pass. To view regional prices for all countries and regions, click View all.
How can I check the price a user is shown as a result of Regional Pricing?
- Developers can call GetProductInfo from a client script to fetch the price the user sees for a particular product or pass. This works for prices that have been regionalized as well as prices that are dynamic during a price optimization test.
local gamePassId = 1234567890
local MarketplaceService = game:GetService("MarketplaceService")
local product = MarketplaceService:GetProductInfo(productId, Enum.InfoType.GamePass)
local priceInRobux = product.PriceInRobux



