Interview with Cliff Harris (cliffski) from Positech Games

4 02 2009

Cliff Harris is a lone wolf indie developer for over 10 years. Yes, he’s been here before the whole casual gaming thing has started. I interviewed Cliff to find out what makes his site and games so special that he is able to earn over $200k a year in direct sales. If you want to know how to become portal-proof start reading.

You made almost $200k in 2008. That’s pretty impressive for indie developer. My sales are 10 times worse. What have you done to achieve such great sales?

Cliff HarrisAhahaha. I didn’t make $200k in 2008. That’s the revenue from direct sales through my main payment provider. I earn other amounts from other deals. And then to find out how much I actually *make* you’d have to subtract all the expenses, and they can be surprisingly high when you actually pay for advertising, and a dedicated server. I guess the way I achieve it is to make games that are not easily copied and cloned, and I put quite a lot of work into promoting them. I also get very into the business side of selling games. if you sell games, and you don’t know which pages on your website have the lowest bounce rates, if you don’t know what the average CPC is for your ads and do A/B testing to increase the CTR…. and much more importantly, if you have no idea WTF I’m talking about, then you are quite simply losing sales to people like me, who study this stuff :D.

Imagine that I know what CTR, A/B testing and all that stuff is… but still my ads are not efficient. Maybe I am just not patient enough? How long do you test them before you pick a winner ad?

Read the rest of this entry »

1 Star2 Stars3 Stars4 Stars5 Stars (4 votes, average: 4.50 out of 5)
Loading ... Loading ...






Advertising – is it a waste of money?

26 08 2008

Last two months has been really busy and I haven’t put much attention to advertising. Actually, I haven’t done it at all. Until yesterday.

I hate advertising because I always feel like the only one that earns money is the Ad Server.  Even if clicks or impressions are not soo expensive it is hard to turn them into profits. Why? Games are either too cheap or too expensive.

But I read a book about AdWords and it gave me some inspiration. I also noticed that Pony World has quite good visitor to download ratio – over 40% of visitors download the game. With that ratio maybe it will not to that hard to turn AdWords into profits?

I created two ad variations for selected keywords and set up a daily budget of a little over $10. And today I got the results (that’s what I love about AdWords – almost instant results).

My ads received 90 clicks total: 51 for ad variation #1and 39 for ad variation #2. CTR for those ads: 1.55% for #1 and 1.22% for #2. Not so bad,  especially one you show it by keywords: the best CTR is 10.38% and the lowest one is 0.77%. The lowest one represents most of impressions and clicks.

Because that’s just 90 clicks I don’t know if it’s profitable yet or not, but we can do some estimations. Let’s go to Google Analytics and check if those clickers download the game. This is where we face first disappointment. Only 19.48% of clickers downloads the game. It’s still much better than what I had for Runes of Avalon campaign where only 11% of visitors downloaded the game.

If Pony World Deluxe has 1% CR (download to sale) then I need 100 downloads to sell one game. And I need 513 clicks to get 100 downloads. 513 clicks will cost me over $68. And I get only $17 out of each sale, so each sale makes me a loss of $51.

Judging just by those numbers you can for sure say that advertising is a waste of money. And it is if you do it wrong. It is if you aim short term. It is if you don’t tweak your ads, your game and your game description web page. It is if you don’t increase your visitor value.

It takes time to turn advertising into profits. Most people are not patient enough.

I made some tweaks to my ads and will do for at least few more days. If I can see improvements then I’ll keep advertising until I make a profit or run out of money :D

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...






1.01% site conversion

15 04 2008

I check Google Analytics every day. I want to know what’s happening. The good thing about GA is that they update it daily (just daily), so you can’t get too addicted.

Today, for the first time my site conversion was over 1%. Site, not game. That means that 1 of each 100 visitors, not downloaders bought a game from my site, or actually… bought one of my games, since I don’t track affiliate sales in GA.

1.01% site conversion is an average for last 30 days (little update, next day it went up to 1.05%). You can see on the graph it peaks to as high as 2%. Unfortunately there are still days where I sell nothing.

ecommerce overview 

The good thing is that site conversion was not correlated with number of visitors. It means that even in peak times those were quality visits. Obviously, site conversion is correlated with your games conversion. So the better your games convert, the better your site converts.

Interesting peaks
April 1st,
Tuesday – 2.17% – well, that was April Fools day – I don’t know if that’s just coincidence but I posted a joke on that day that prices for all my games will rise 10x next day :)

March 23rd, Sunday1.96% – I send out newsletters on March 20th

April 4th, Friday – 1.75%

April 8th, Sunday1.58%

March 16th, Sunday1.39% – well, Sunday is just the day for buying stuff online.

While Sundays have usually high conversion rates it doesn’t mean that I have highest volume of sales on this day. The most busy day is usually Saturday.

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...






Track full order datails with Google Analytics and eSellerate (or Plimus, BMT, etc.)

13 11 2007

You can have Google Analytics anabled and working great, but if your e-commerce service is located on 3rd party domain, then you lose a lot of important informations, such as referral site, visits to purchase, days to purchase, etc. If you use the trick described below you will be able to track all this useful informations. I made it to work with eSellerate, but I am sure it can be done with Plimus, BMT and other e-commerce providers.

First of all, all your buy now links have to call a script that will save Google Analytics cookies to database. To match visitors with cookies we will use visitor IP. The script that will set the cookies on e-commerce domain will delete database entry right after retrieving it. It is not a perfect solution, but it will work in 99.999% (how many orders do you expect placed within few seconds from the same IP?). So instaed of calling:

store.esellerate.net/s.asp?s=STR4587075495&Cmd=BUY&SKURefnum=SKU41198308198

you call

www.yourdamain.com/buy/mygame.php

Mygame.php has to include save_GA_cookies.php script and then redirect to real e-commerce address. save_GA_cookies.php script looks like this:

<?
// this script should be called before you redirect to e-commerce shopping cart
// it saves Google Analytics cookies to database along with User IP

// include your database engine
include(“db.php”)

$dbga = new clsDBAnawiki();$IP = $_ENV[‘REMOTE_ADDR’];

$utma = mysql_escape_string($_COOKIE[‘__utma’]);
$utmb = mysql_escape_string($_COOKIE[‘__utmb’]);
$utmc = mysql_escape_string($_COOKIE[‘__utmc’]);
$utmx = mysql_escape_string($_COOKIE[‘__utmx’]);
$utmz = mysql_escape_string($_COOKIE[‘__utmz’]);
$utmv = mysql_escape_string($_COOKIE[‘__utmv’]);
$utmk = mysql_escape_string($_COOKIE[‘__utmk’]);

$dbga->query(“INSERT INTO an_ga_cookies(ga_ip, ga_utma, ga_utmb, ga_utmc, ga_utmx, ga_utmz, ga_utmv, ga_utmk) VALUES(‘$IP’, ‘$utma’, ‘$utmb’, ‘$utmc’, ‘$utmx’, ‘$utmz’, ‘$utmv’, ‘$utmk’)”);
$dbga->close();

?>

Then you need to insert into your e-commerce html template following line:

<script TYPE=”text/javascript” src=”https://www.yourSSLdomain.com/buy/set_GA_cookies.php” mce_src=”https://www.yourSSLdomain.com/buy/set_GA_cookies.php”>
</script>

set_GA_cookies.php reads GA cookies from database and sets them on e-commerce domain via JavaScript. The problem is that you need a SSL domain address otherwise your shopping cart will show unsecure site message. The good news is that this domain doesn’t have to be on your server or your own domain, though you will need to tweak my code to make it work on 3rd party server.

Here is the code for set_GA_cookies.php:

<?
// script generates JavaScript code that sets Google Analytic cookies on eSellerate.net

// include your own database library
include(“db.php”);

$IP = $_ENV[‘REMOTE_ADDR’];
$db = new DB();

$db->query(“SELECT * FROM an_ga_cookies WHERE ga_ip=’$IP’ LIMIT 0, 1″);

$jscode = ”;
while ($db->next_record()) {
$utma = $db->f(‘ga_utma’);
$utmb = $db->f(‘ga_utmb’);
$utmc = $db->f(‘ga_utmc’);
$utmx = $db->f(‘ga_utmx’);
$utmz = $db->f(‘ga_utmz’);
$utmv = $db->f(‘ga_utmv’);
$utmk = $db->f(‘ga_utmk’);
$id = $db->f(‘ga_id’);

$jscode = “setCookie(‘__utma’, ‘”.htmlspecialchars($utma).”‘, 30, ‘/’, ‘.esellerate.net’, false) \n”;
$jscode .= “setCookie(‘__utmb’, ‘”.htmlspecialchars($utmb).”‘, 30, ‘/’, ‘.esellerate.net’, false) \n”;
$jscode .= “setCookie(‘__utmc’, ‘”.htmlspecialchars($utmc).”‘, 30, ‘/’, ‘.esellerate.net’, false) \n”;
$jscode .= “setCookie(‘__utmx’, ‘”.htmlspecialchars($utmx).”‘, 30, ‘/’, ‘.esellerate.net’, false) \n”;
$jscode .= “setCookie(‘__utmz’, ‘”.htmlspecialchars($utmz).”‘, 30, ‘/’, ‘.esellerate.net’, false) \n”;
$jscode .= “setCookie(‘__utmv’, ‘”.htmlspecialchars($utmv).”‘, 30, ‘/’, ‘.esellerate.net’, false) \n”;
$jscode .= “setCookie(‘__utmk’, ‘”.htmlspecialchars($utmk).”‘, 30, ‘/’, ‘.esellerate.net’, false) \n”;

}

if (!empty($id)) $db->query(“DELETE FROM an_ga_cookies WHERE ga_id=$id”);

?>

function setCookie(name, value, expires, path, domain, secure){
document.cookie=name+’=’+unescape(value||”)+
(expires?';expires=’+new Date(+new Date()+expires*864e5).toGMTString():”)+
(path?';path=’+path:”)+
(domain?';domain=’+domain:”)+
(secure?';secure':”);
}
<? echo $jscode; ?>

That’s it. I used PHP, but you can use any other web language to do that. Commands are self-explanatory, so I am sure you’ll be fine. Just in case you don’t want to copy the code from this page you can download zipped scripts.

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...