blog master mode
back to index

Adding ads to TETR.IO, six months later

by osk at 2021/05/10 (Mon) 10:50:14 pm (last edited at 2021/05/10 (Mon) 11:43:56 pm)

A little over 6 months ago, I added display advertisements into TETR.IO. This blog post, I want to reflect on these first 6 months, both from the perspective of a player, and that of a developer. I'll be going over the questions most commonly asked by the community, the questions I had, as well as the lessons I learned.

A little background

Back on the first of November 2020, I started a partnership with AdinPlay, to display banner ads in the game's menus. While I was (and still am) very grateful for all the players supporting the game through Patreon, 99.97% of players did not support. While running the game is not incredibly expensive (since a lot of my work in the past year has been on performance), I wanted to be able to go full-time on TETR.IO, as well as build a budget to be able to work on the Character System update. The game was popular, but I was not quite ready to jump onto larger monetization schemes. So, a perfect solution is simply monetizing that 99.97%, the "freeloaders" in a sense.

Just like most players, I don't particularly enjoy ads, though. And to be quite honest, this extends to almost all monetization. Monetizing a game is very much a balance, where you must balance out a good experience with revenue. Looking around the .io game space, the balance seems tipped in revenue's favor. A worryingly large amount of .io games copy eachother, finding more and more ways to sneakily insert ads into the game, get you to click ads, drive in-game purchases, run video ads, and whatever else. This video covers just how much these games are willing to compromise just to drive the best bottom line. I wanted (and still want) to stay away from that side. My drive has always been to make a game I can be proud of, as opposed to a wallet to be proud of. This complicates matters a lot, though.

The Implementation

How do you implement worthwhile ads, without ruining the player experience? This was a question I did not want to avoid (like most .io games do). I ended up settling on the simplest type of advertising: banner advertisements. Technically, I had already been running banner ads for months — those banners above the main menu that announce new features and tournaments are, by all definitions, ads after all. I decided to simply place some ads in the menus, never ingame. Ingame ads, after all, could interfere with the game. No video ads either, everyone hates those.

The next question was getting an advertising partner to partner with. Google AdSense is generally seen as a relatively badly paying partner, so I wanted to find a partner who would both help me more with implementation, and give a fairer price for my ads. Sadly, the world of advertising is pretty hard to understand. I ended up going with AdinPlay. The main reason I went with them, is since AdinPlay specializes in ads on webgames, like .io games, so they would be able to help me kickstart my setup.

Setup of ads is relatively easy. In general, all you'll need to do is tell the library that your partner gives you to load an ad in a specific HTML element, and it will load one. I set up TETR.IO ads to only load the ad currently visible, and to reload an ad after showing it for 30 seconds. All ads also immediately unload when the menu UI hides. Ads are pretty heavy after all, both on the network and in rendering. In fact, when playing about with them, I found it almost worrying how incredibly unoptimized many ads are. Hence, it is vital to make sure the ads are inactive while ingame, especially since TETR.IO requires quick and reliable inputs. Even a millisecond off can cause the game to feel sluggish or slippery.

Deciding on positioning, sizes, etc. is also relatively easy for the most part. In general, you want to be in the way of the player. ...of course, that isn't the plan I am going with. So, I tried to put the ads near the places people will look (near important buttons), but not particularly in the way, either. Obviously, this lowers my click rates, but remember the balance! I would like to stay on the good side of said balance. The Online Advertising Guide is a great source for information on advertising, both for publishers like me, and for advertisers. Some data on there may be slightly out of date, though.

What to Expect

AdinPlay, like most partners, will sell your ads in many different schemes. This is generally not very visible to us publishers, so all we really get to know is a few key performance indicators (or KPIs): ad requests, impressions, clicks (and click rate), and RPM. An ad request is when your site (or in my case, the client) requests an ad, and an impression is counted when said ad is displayed on screen for at least a full second (we can say with certainty that the ad has been seen by the user). Then finally, if the user clicks the ad, we count that as a click.

The magic number here is the last: the RPM. RPM stands for Revenue per 1000 (usually impressions). It's often also called CPM (cost per 1000). CPM is what the advertisers pay to advertise on your site, and RPM is what you receive as publisher. Your RPM is generally controlled by three things: the click-through rate (the percentage of impressions that lead to a click), the kind of content you publish, and the day of the year.

Since I don't let my ads get in the way, my click-through rate is well... abysmal. The average click-through rate around the internet for display ads is about 1‰ (that's 1 in 1000, which lines up neatly with the RPM/CPM metric!). Mine is about 0.2‰. Not so good. This is mostly caused by the fact that the ads are both not in your way, and that most internet users nowadays have become accustomed to ads (also called "banner blindness"). Games also tend to not get super-high RPMs to begin with, compared to say, car rental sites or accountants.

Furthermore, your RPM will almost always start off low. After a few weeks, your RPMs will start normalizing to their normal levels. From then on, your RPM can mainly be changed by the time of year, and the type (and placement) of ads you serve. For example, things like Black Friday will see a spike in RPM, as there will be more advertisers competing for the same ad space. Simply put, advertisers are always bidding on ad spaces, and if there's more competition, ad prices will go up. This also means your RPM will generally go up through the year slowly, go down at the start of every month and quarter (as ad campaigns tend to end at those times), and that January will be by far your worst month.

The Results

Most importantly, community response was far, far better than I expected. Even after taking a step into the dark side, you still trusted me to steer this ship into the right path, and not just a little bit, either — only half a year later, TETR.IO's active userbase has tripled! I'm incredibly grateful for that.

From about 12K users daily to easily hitting 46K users daily!

A bit more on-topic though, RPM was as expected. Since my click-through rate is not particularly high, nor is the RPM. Especially in games, and even more so when trying to avoid invasive ads, revenue is driven by the amount of players you have (and as such, the amount of impressions you serve). Nowadays, TETR.IO gets between 600K and 750K impressions daily, which is the driver for its ad revenue. That way, players who cannot or do not want to support the game otherwise, can support just by playing the game normally, without impacting their experience too much. Of course, a growing amount of internet users use adblock, usually between 33% and 50%, or even worse, they use a browser like Brave which replaces your ads with its own. But remember, that's their decision. I never ask people to turn off their ad blockers. The balance between revenue and a good experience is easy to tip.

In Conclusion

Above all, I am very thankful for everyone's support of me adding ads to TETR.IO. While they don't make me six digits or anything right now, ads together with Xsolla integration allow me to create a budget for future experiences like the Character System update. I hope this post has shed some light and insight on the world of advertising, and, if you happen to be a publisher, has helped you around the more confusing parts of advertising. (Perhaps I could even persuade a publisher to think about the balance between between revenue and a good experience!)

I hope you'll keep trust in me in the future too. I'm interested in seeing in what other ways I can monetize, in such a way that it improves the game, as opposed to simply trying to be a cash-grab. When the Character System update comes out, it could be nice to let users unlock skins (skins for their pieces, as well as other skinnable elements) both by playing, but let there be soft monetization as well (nothing requiring a purchase, but if there's something specific you want, and want it fast, you can get it).

Please, let me know what you think about my current strategy (ads + Xsolla for monthly supporter), as well as future endeavors (be it skinnable game elements, or anything else) in the comments. I read all of them!

15 comments sorted by age

Niwa Atsumi

at 2021/06/02 (Wed) 3:27:45 pm


Nonaka Shōko

at 2021/05/28 (Fri) 5:52:09 am

Hello everyone? My username was CATMONSTER2018 I will no longer be online as much due to: was blocked on school computers. (A proxy-Site would be wonderful :) ) 5/5 is the end of the school year in my district. and the only Gaming PC in my family's house is a crappy 2016 laptop that my mom almost never lets me use. To all people I played with in Good games, thanks for the experience. s, and will always be my favorite .IO game. Thanks for the community Thanks for the fun Thanks for the games :) Goodbye From -CATMONSTER2018

Nonaka Shōko

at 2021/05/28 (Fri) 5:53:45 am

Thanks OSK for making such a wonderful game... Maybe in a long time... Weeks/months/years, ill return to Tetr :)

Miike Yuika

at 2021/05/21 (Fri) 9:38:26 am

i love you osk

Matsuzaka Sachie

at 2021/05/16 (Sun) 12:35:22 am

I joined around the time when you first put ads up. It already been 6 months since that point and the game got 3x bigger. They never really annoyed me since it never was in the way as described in this post. You stayed with your word and am very grateful of that. Thanks for sharing Just wondering if the applications for the INFDEV-like testing phase for the character update already happened? Just very interested for what is shown so far for what I can find around on the preview site/Discord.


at 2021/05/16 (Sun) 3:08:36 pm

Glad you've been enjoying the game! The Character Update testing phase isn't open yet, but I'll write about it when it opens!

Ōmori Chikako

at 2021/06/04 (Fri) 1:53:18 pm

Look great. hope I can play this update early.

Matsuzaka Sachie

at 2021/05/16 (Sun) 4:44:36 pm

thanks for responding (hope same name displays)

Kanazono Rumiko

at 2021/05/13 (Thu) 11:32:54 pm

Tetrio very cool

Mitsumori Momoe

at 2021/05/11 (Tue) 4:58:29 am

Hello my name is Val, I like otters. I'm single. Hi zap and Jon :bounce:. osk good post, I almost read half of it, very interesting, I liked the graphics, very colorful and intuitive. You're allowed to _suggest_ the user to disable adblocks, otherwise we wouldn't know it helps you. I don't think that would interfere with the use experience too much.


at 2021/05/11 (Tue) 12:32:21 pm

I find asking to disable adblockers kind of unethical. I am of the belief that it's an honor to be installed or even opened on someone else's system, so I find it kind of rude to act like you own the place. It's similar to how I don't want to add client-side anti-cheat (you know, the Valorant type). I don't own your computer.

Morihashi Shiina

at 2021/05/11 (Tue) 3:08:27 am

I 100% support soft-monetization of skinnable game elements. It's great for players less well off as they can still obtain them freely, and another means for players who can and want to support you to do so. Character/skin system hype!!

Morihara Tamami

at 2021/05/11 (Tue) 1:57:37 am

Osk lowkey emptying my bank account

Ayukawa Mami

at 2021/05/18 (Tue) 5:52:01 am

no u

Yaginuma Maho

at 2021/05/10 (Mon) 10:54:04 pm

it's been so long since the last post thanks osk