Special offers and two alternative ways to add them to your game (JSON vs Balancy)

An in-game shop is an essential part of any free-to-play game. It is the place that makes money for you. I know a lot of stories when a developer was able to increase their revenue multiple times only by applying different changes to the store, without changing the game itself.

What to sell in the shop?

The in-game shop of Clash Royale.

This is a very popular question with no specific answer. To answer it, you need to know your audience first. There are many factors you need to take into account: age, gender, geo, playing habits, and much more. If you are making a new game I would recommend taking a look at your competitors. Using their experience is the best starting point, and once you start getting some traction from the market you might be able to understand where to move next.

You are going to sell what your players need. Don’t overwhelm your supply with useless stuff which no one buys. If a player wants to buy something in your shop, they most likely have been studying all the products you offer. If there are too many products, you are risking getting into the ‘paradox of choice’ — a situation when a customer leaves without buying anything. The good rule of thumb is — the more complex your game is, the more products you should be selling. 

An example of a typical in-game bank with six positions may look like this:

  • $0,99
  • $4,99
  • $9.99
  • $19.99
  • $49.99
  • $99.99

It’s very important to give a discount for higher tiers. Such discounts can go as high as 50% for the most expensive tier.

Key elements of any in-game shop

Usually, the shop contains several categories:

  1. Hard currency. Here you sell gems or gold for real-life money.
  2. Soft currency. Other currencies or items are being sold for gems or gold.
  3. Special offers. This is the sweetest purchase for all players. Offers change from time to time depending on the player’s progress, in-game events, etc. They can be sold for hard or soft currencies, but usually, they are sold for real-life money. 
2ndPotion - Level Up #3
Give some free items on a daily basis to your players. If players enter your shop at least once a day, the chances they will make a purchase grow dramatically.

Zooming into special offers

Special offers (aka personalized offers) can make the most money for your company and bring the biggest value to your customers. Besides making money, they can serve other purposes as well, such as motivating players to make their first purchase or retaining a player who is about to churn.

Here are some examples:

  1. A new player completes the first level -> offer them a ‘starter pack’.
  2. A player is active for 3 days and doesn’t make a single purchase -> offer them a ‘limited-time offer’ with a huge discount to convert them into paying users.
  3. A player lost 3 matches in a row -> offer them a power booster.
  4. A player pays a lot -> hide all cheap offers and show more expensive ones.

Such a list is limited only by your imagination. You should be constantly testing a lot of such offers. Personalized offers are very hard to implement and require a lot of knowledge from the team, but this is the future of the gaming industry.

Implementation of special offers

There are 2 main approaches to creating a system of special offers: JSONs and Balancy.

Imagine you want to create a personalized offer, which is available for players who reached Level 5 and have made at least 10 purchases.


Conditional JSON will look something like this:

  1. Create such a JSON in a notepad.
  2. Upload it to some CDN.
  3. Download a JSON file from the CDN on the client or server.
  4. Read the file.
  5. Implement the logic.


There is an open-source example, where you can find the implementation of such logic. As a result, such conditions will take one cell and look like this:

With Balancy, you can skip steps 1–4 from the JSON section and get straight to the implementation. It’s a great time saver.


Both approaches are workable while having pros & cons.

Balancy’s pros:

  1. Scalable. Within the time you’ll be creating new conditions and your logic will expand. 
  2. Readable. You don’t need to have advanced programming skills – any game designer or analyst can read and work with it.

JSON’s cons:

  1. Not secure. It’s very easy to mess up and break a JSON file.
  2. Hard to read complex data. Imagine that you have 10 conditions for one offer.
  3. Always requires to have documentation for all the possible parameters and operators.
  4. A lot of manual work to read and map a JSON file.

After trying out Balancy’s example, you will see that Balancy is solving all those cons for you. The only advantage JSON has over Balancy is that it’s free.


The conditional system described above can be used anywhere in the game. You can test it for your personalized offers, but I’m sure you’ll keep using it for your quests, tutorials, cutscenes, etc. You just need to make it once and then apply it everywhere else.

Try to think about all the conditions you’ll need beforehand so that after the release, your game designers and analysts can operate the game without disturbing programmers too much 🙂