Game Design, Programming and running a one-man games business…

Cliffski’s 2012 guide to advertising your indie PC game online.

I get asked about this stuff a lot, so thought I’d do an updated guide…

Pre-advertising considerations:

Have you got a game that is priced at a level that will give you a decent return-on-investment for a site visitor? If your game is <$10 in price, and you do not have multiple titles to cross-promote to a visitor, then stop right now, because you are probably wasting your money.

Have you got a game that people cannot buy right now? Are you hoping they will remember and come back later? If you don’t have some way of capturing them with an email signup or alpha-funding etc, then also probably stop right now. You will do much better if you can get your site visitor to click a few buttons and hand you some money right now.

Are you sure your website runs fairly solidly and fast? Have you used online tools to measure load speeds, and possibly used a CDN to host demos or large screenshot images? Make sure your site is worth visiting before you pay for people to visit it.

Preparation and timing

Open an account with google adwords, or your other ad service of choice. google’s is the biggest, and the most complex. Setting up an account and putting ads together will take a while, so don’t wait until release day for your game. Have everything in place at least a week in advance. Google sometimes take a while to approve ads.

Install google analytics on your website. It is 100% free. Almost every site uses it. Basically you need an account (ideally the same username as a google adwords account, and *link* the two of them), and a small bit of javascript on every page of your site. Put it on EVERY page of your site, not just the landing page. If you host your own sales pages and thankyou pages, you will want to set these up as tracking ‘conversions’ which will let you track sales ‘fairly’ accurately (but see below…). That just means a different snippet of javascript on those pages.

Setting up an adwords campaign

90% of the effort is telling google NOT to advertise to people. Here are some tips. If you know where your sales come from, through sales reports, pick the top 10 countries, and geographically limit your adwords campaign to those. I limit mine to less than 10. for example Australia, Canada, Germany, Ireland, New Zealand, UK, USA.

If your game is PC only I strongly recommend limiting ‘devices’ for the campaign to desktop and laptop computers. Not mobile phones and tablets.

Also limit your language to English, unless you really are getting a lot of non-english sales.

I recommend focusing on clicks, with manual CPC (cost-per-click) bidding. Not impressions.

I set an impression cap per user per day to 8. Letting it be higher reduces your click-through-rate and thus your ads ranking.

Now it’s time to add a bunch of keywords and targeted websites so that google knows where to show your ads. Don’t blindly accept google’s suggestions, they suck. They always add ‘free’ and ‘cheats’ and so on. In fact, unless you are making a F2P game, I’d add ‘free’ ‘crack’ ‘torrent’ etc as negative keywords for your campaign. Only advertise to people who might be looking to actually buy…

It definitely helps to add as many sites as possible to the ‘managed’ part of a campaign. if you just let google choose, not only will you get a lot of really obscure and crappy sites, but you will not be able to effectively analyse the behavior of individual domains later…

Add a bunch of different ads. You might want to try text ads, but I recommend banners too. And different sizes and shapes, to get as much coverage as you can. Some games look better in skyscraper ads, some as rectangles or banners. I never bother with animation (my tests show no effect), but do add lots of variety. Google will auto-sort the best performing ad for you. It costs nothing to have a dozen ads.

I recommend setting a higher CPC for your ‘managed’ placements and a lower one for googles automatic placements. I try to stay under £0.30 CPC as a maximum, which means an average CPC for me of about £0.19.  In some cases, you will have a max CPC way higher than the average. This is fine. Googl;e uses your max CPC as a vote from you showing your faith in your ad. You won’t get charged the max unless someone competes with you at the same bid, so you can sometimes push the max higher, knowing it won’t make any difference :D

You need to set a budget that actually has some impact. This isn’t a plan for people with $50 to spend. Spending less than $500 will probably not give enough data to properly analyze, although you might want to trickle that in over a few weeks. My yearly adwords bill was about $16,000, but it’s been higher than that before.

Running the campaign

Don’t just hit ‘go’ and then forget about it. You will want to check your campaign daily. You can analyze what is going on in the adwords interface, especially the display network tab. Sort by clicks so you can see where all those clicks are coming from. If you set up sales-page ‘conversions’ you might want to look at the cost-per-conversions column, and pause (or even exclude) any domain where the conversion cost is getting much too high. If you are letting google manage your placements on it’s own check they aren’t all taking place on some awful inappropriate site you don’t want to support, or suspect will give poor traffic.

Also.. check the ‘dimensions’ tab, which will show traffic by country. Ensure that including Croatia was not a mistake as it is eating 99% of your budget…

Analyzing the results

If you control your buy/thanks page, and can place javascript on it, you might be successfully tracking sales from it through adwords itself, which makes life easier, but cross-domain tracking is hard, so it may not be working. Even if it *is* working, it isn’t reporting correctly due to people buying the next day from a different PC, buying at home after clicking the ad at work, buying with javascript turned off, or buying after trying the demo at a friends house, or buying after reading a review you only got because someone else saw the ad and…etc etc. So what we need is another non-purchase way to judge the quality of our ad traffic…

Enter google analytics.

some menu items worth investigating…

If your analytics is set up right, and linked to google adwords you will have a button on the left of the ‘standard reporting’ GUI for analytics that says advertising. You want the adwords, then placements sub menu to list where your ads are showing. This will show up a few howlers immediately, where site ‘A’ will give you ten times the average visit duration than site B. You might want to compare bounce rates too. When you do all this, make sure your landing page has some darned content! If it’s just a logo saying ‘click to enter site!!!’ then these stats are meaningless and your site needs changing.

You can manually go through all the ad placements here and note the ones with decent traffic, and then go back to adwords and pause/exclude the poor performing ones, which will hone your campaign to be more effective. If you do this, you might be able to afford to raise your CPC, knowing it’s only going to traffic that is actually seriously interested. Over time, your CPC bids should rise, and your targeted audience should narrow more and more.

One tip I employ to make things easier, and less cluttered is to set up an ‘advanced segment’. You will find the button just above the chart at the left. Click it, and follow the instructions to build up a segment called ‘likely buyers’. I use the fairly crude metric of ‘visit duration > 60 seconds’, but you can build up complex filters and exclusions here if you like, and know your audience well. Once set up, click that segment so that it filters the traffic for you. You will then be able to look at the lists of placements purely filtered through that segment.

Analytics is scarily complex. I recall another indie dev having hysterics when I demonstrated the animated graphs over time feature :D

You might want to  try looking at ‘campaigns’ then pick an ad group and then change the ‘explorer’ setting at the top from site usage to ‘clicks’. You then see all the adwords CPC  data, and even ROI and margin data (if you have the sales tracking working). This is also very handy, but always be aware that this is only listing directly-trackable income

Remember it’s all about narrowing where you show your ads so it works FOR YOU. Every game sells differently. You MUST get your own data.

Tracking non-sales events

Say you want to get people to download your demo / sign up your newsletter or signup for an account…whatever, and track that rather than sales. This can be done too. You probably want to set those events up as ‘conversions’ in analytics and assign them a value. That will then get tracked just like sales and those charts will show you your ROI etc.

Remember… it’s very hard to be 100% sure you know if your ads are really working. You *do* need a bit of faith. If in doubt, ask yourself why coca cola spend so much if ads don’t really work. or read ‘the advertised mind’ if you want further convincing. 95% of indie game developers seem to do no advertising. Of the 5% who try it, 90% seem to put no effort into doing it right, so they give up. You can do everything I’ve described in one day, and it *does* work, if you pay attention to it all.

I’ve described google adwords, but many other ad services are available, but ANALYZE THE RESULTS. Don’t just ‘trust’ them to work. I found facebook ads to not work, and stumbleupon to be a waste of money. You may find the exact opposite.  Adwords will give you a good baseline to compare against other ads. I’d definitely try them first, before you talk to websites that quote you hilarious costs for impression based ads. In the last 365 days, my adwords spend was about $16,000 and I got 30 million impressions and 73,000 clicks. So $0.21 CPC and $0.53 CPM. That’s just as a point of reference for when you are quoted $10 CPM for untargeted traffic  :D

If you found this post helpful, please tweet about it. I want small indie developers to have a fighting chance against the big boys, and this is the best help I can be :D

 

The GSB cruiser decoy projector!

Here is a short video showing where I am with a new unit (the cruiser decoy projector) for GSB, which will be a race-specific capability for a new race (The Outcasts). Enjoy (it’s in HD BTW).

The death of honest advertising

I was watching a video a few days ago, linked from some very popular site, to an in-flight safety video filled with wizards and hobbits. Sounds fun? it is. It’s actually rather cool. And just before I went to share it,. I noticed the millions of views and realized it was probably already seen by everyone, and then the really obvious point bashed into my head… I was working as a viral marketer for air new zealand.

It was perfect. I am as cynical as anything when it comes to marketing and PR and the various ways companies manipulate customers (even down to the shape of floor tiles in supermarkets…oh yes), and yet here I was, cynical old cliff about to dutifully send out some free viral PR for an international airline. They had caught be, hooked me in, and very cleverly, in a way that would make the best NLP practitioners smile whispered in my ear “why not tell everyone how cool a company we are”.

The cost of the video was probably non trivial, but it was money well spent. And I’m sure they will pore over the figures and declare it a business and marketing triumph. Why bother paying for adverts which people ignore or actively block, when you can get people to promote your brand for free?

It’s a work of sheer amazing human ingenuity that not only got people to embrace having a company logo on the clothing you wear, but actually got you to pay money for the clothing at the same time. We actually pay to advertise Nike and Adidas to people around us. I don’t think there is a single brand of car in existence that doesn’t have a big phat logo on the front of it.

anyway…

What occurs to me, is that as this stuff works, and works so darned well, the need to engage in actual honest ‘here is an advert’ advertising is probably dwindling. It’s clearly not as effective as the viral/subtle stuff. I find this a bit worrying because I am acutely aware of how powerful advertising is, and if this stuff is even better, than we really are all just pawns in the hands of martin sorrel.

Worse, I can ‘strike a deal’ with advertisers. Generally I have adblock turned off for sites I visit, only toggling it on for strobing nightmare crap, but I can’t opt out of, or even recognize the viral and real subtle stuff. Next time you are annoyed by an advert, remind yourself that you at least know what you are watching. You KNOW someone is trying to sell you something. It’s an honest transaction of time/attention/money. The times you really should be wary is everywhere else, where you are being marketed to and promoted to, and you don’t even realize it.

Big project code architecture

I actually wrote some new code for Gratuitous Space Battles today, and in doing so, I had to do a bit of chin-stroking and thinking about the general code structure of the game. GSB is not my latest game, so the code I write now for new stuff is more polished and better designed, but even so, I’ve coded about a dozen games from scratch before GSB, so it should be fairly good.

..and yet…

One of the best lessons you learn, mostly from experience, is how to arrange classes and objects in your code so that its fairly modular and not ‘closely-coupled’. In C++, what this amounts to is you shouldn’t have a lot of classes constantly using get() and set() calls to talk to the private members of other classes. Separate objects and basically separate for a reason. The hardest decisions to make in code are the big architectural decisions about what objects sit inside others, and who inherits from what. I’ve been coding in C++ for decades now, and I still know I often get it wrong. This stuff is really important.

For example, there is a class is GSB called SIM_Ship, which contains all the gameplay related stuff for a ship (totally separate from the visual representation of the ship which is entirely different and in a totally separate class). In an ideal world, that ship class would be pretty self-contained, without a ton of connections to other objects.

The problem is, over time, I’ve ended up adding stuff to that class that bloats it and makes the code messy. For example, it has a function in there to shake off limpet mines. This is a bad idea. The limpet mine code should all be within SIM_LimpetMine. SIM_Ship not only shouldn’t get involved with the limpet code directly, it shouldn’t even be aware that the concept of a limpet mine exists. That stuff should be modular, residing elsewhere and making use of generic functions and hooks within the ship code from a distance…

Sometimes that doesn’t work in practice because of optimisation and speed considerations, but often, the reason stuff ends up in the wrong place and the code gets confused and messy is that the coder is just adding ‘one more thing’ and doesn’t think its worth going to the trouble right now…

But when you are starting a big new project, its good to keep these issues in mind. Assume you will have 5x the code you think you will have, and then plan the code architecture accordingly.