View Full Version : How many people download/install? Looking for some stats...
anothersomething
09-30-2004, 09:24 PM
Hello,
I'm wondering how many unique visitors download games once they get to your website. Would anyone be willing to please give me some stats?
Also, how many people that start downloads finish them? How much does the size of the game have to do with this?
James C. Smith
10-01-2004, 07:00 AM
Sorry. I don’t have data handy for the relationship between number of visitors and number of downloads. But I do have info on stared downloads compared to completed downloads. Overall, we see about 54% of the initiated downloads result in a completed down. In other words, almost half the time the download is canceled or interrupted. There is a correlation between the size of the download and the likelihood it will be canceled. But it isn’t a huge factor. 60% of the smaller downloads get finished rather the 48% completion rate of the larger downloads.
Here is some raw data for the 30 most downloaded games I have data for.
MB %Fn Download Rank
1.88 47% 25
2.27 59% 15
2.68 61% 26
3.03 60% 23
3.09 57% 7
3.13 62% 8
4.35 56% 19
4.41 60% 29
4.61 58% 22
4.81 55% 13
4.81 59% 18
5.78 51% 27
5.92 59% 28
6.12 56% 14
6.68 57% 24
6.70 51% 2
7.25 47% 3
8.20 55% 16
8.34 58% 4
8.59 50% 12
8.84 53% 9
8.86 50% 6
9.50 52% 30
9.52 52% 21
9.61 57% 20
12.02 52% 17
12.85 43% 1
13.50 51% 5
14.72 48% 11
22.39 43% 10
MB Is the size of the download in megabytes
%Fn is the percentage of started downloads that were finished
Download Rank is where that games ranks in the list of top downloaded games (based on completed downloads)
In other words, the first item in the list is the smallest download, 47% of the initiated download are completed, and it is ranked #25 of the list of popular downloads. This is not a typical example.
The second item the list is more typical with the small download size resulting in 59% of the downloads being completed but it is only the 15th most popular download.
The most popular download is way down at the large download size end of the list. Only 43% of the started downloads are completed but it still have more completed downloads than any other game.
FYI: This data is based on 2,763,580 requested downloads resulting in 1,432,376 completed downloads. The least downloaded game had 14,808 completed downloads
A couple of the games were not available during the entire sample period and are therefore ranked artificially low on the download rank.
MirekCz
10-01-2004, 07:21 AM
Interesting fact emerges from this data:
All high-ranked downloads are 6.7+MB and the highest download count has got a nearly 13mb game.
Roulette
10-01-2004, 09:12 AM
James, can you give me an idea (in terms of the technology you are using) of how you determine whether or not a download completes?
- Roulette
Trixx
10-01-2004, 09:23 AM
James, are you taking into account download managers? They usually create more than one connection resulting in more than one "broken" downloads instead of one complete download.
anothersomething
10-01-2004, 10:52 AM
Wow, those are great stats. Thanks very much. I'm assuming that 12.85mb game happens to be RLW.
Does anyone have stats on how many visitors actually download?
Jack Norton
10-01-2004, 11:20 AM
A stat like that is very difficult to obtain.
You should have those very accurate statistics... they must match the PATH of the visitors.
If a user get your file directly from download sites with the directlink like:
www.winterwolves.com/games/GKTrial.exe
this in my opinion doesn't count as a visitor. Instead a visitor with the path:
www.winterwolves.com->pc_mac_games5.htm->GKTrial.exe
means that has come to the homepage, has seen The Goalkeeper game, then clicked on his page and then started download... :)
Chris Evans
10-01-2004, 12:13 PM
Interesting...
Going by James' data, I think it's safe to say the "< 5MB" rule no longer applies. Games with a lower file size get slightly better completed download percentages, however it comes down to how well the actual game converts, regardless of size.
It's nice to see larger sized demos do well. In fact looking at James' numbers, the majority of the higher MB games did better than the lower MB games. This should tell Indies not to get so caught up on file size and instead just concentrate on making the game good.
anothersomething
10-01-2004, 01:20 PM
A stat like that is very difficult to obtain.
You should have those very accurate statistics... they must match the PATH of the visitors.
If a user get your file directly from download sites with the directlink like:
www.winterwolves.com/games/GKTrial.exe
this in my opinion doesn't count as a visitor. Instead a visitor with the path:
www.winterwolves.com->pc_mac_games5.htm->GKTrial.exe
means that has come to the homepage, has seen The Goalkeeper game, then clicked on his page and then started download... :)
Can't you just use a PHP script and mod_rewrite?
.htaccess:
RewriteEngine on
RewriteRule ^([A-Za-z]+)\.exe$ stats.php?game=$1
stats.php
$game=$_GET["game"];
$ref=$_SERVER["HTTP_REFERER"];
// connect to sql
mysql_query("INSERT INTO `downloads` (`gamename`,`ref`)
VALUES (
'".$game,"','".$ref."')");
// I think this line is wrong... I'm too lazy to look up the mime type info
header('MIME-Type: application/octet-stream')
echo file_get_contents($game.'real'.exe);
// the actual file name of the game must be yourgamereal.exe. On your website you should link to yourgame.exe
edit: I forgot about actually checking the stats...
checkstats.php:
// connect to mysql, etc (duh)
$result=mysql_query('SELECT * FROM downloads WHERE gamename="'.$yourgame.'" AND (ref="yoursite.com" OR ref="yoursite.com/page.html" OR ref="anotherpageinyoursite")');
$numrows=mysql_numrows($result);
echo "This download has been requested ".$numrows." times";
Jack Norton
10-01-2004, 02:02 PM
Heh, I'm not so good in PHP ;)
Anyway you should also take into account download actually completed or if a user uses download managers (even if with DSL connection those are being less popular I think).
Personally I'm not so maniac about stats... at end of month I count sales and if they're good, I'm happy ;)
anothersomething
10-01-2004, 04:04 PM
Heh, I'm not so good in PHP ;)
Anyway you should also take into account download actually completed or if a user uses download managers (even if with DSL connection those are being less popular I think).
Personally I'm not so maniac about stats... at end of month I count sales and if they're good, I'm happy ;)
I'm not a PHP expert either, but it's still really simple and something everyone should learn.
And why use web server stats to see if a game was downloaded? What really matters is if it was installed a played. So just use a URLDownloadToFile(... firstrunofgamename.html ...) on the first run of a game and see how many hits that firstrunofgamename.html gets.
James C. Smith
10-01-2004, 04:24 PM
James, can you give me an idea (in terms of the technology you are using) of how you determine whether or not a download completes?
- Roulette
All downloads are managed by a PHP script. It doesn’t just start the download, it actual send each byte of the game’s installer.exe. After it sends the last byte it adds a record to the database to say that a download was completed.
It does not have any special consideration for download managers. They may skew the overall completion percentage a bit.
James C. Smith
10-01-2004, 04:33 PM
I'm assuming that 12.85mb game happens to be RLW.
Yes. Ricochet Lost worlds is the most downloaded and the best seller. To some extent, this proves a game can be successful even if it is more than 5 (or even 10) MB. But I think it would sell even better if it was smaller.
The stats I posted are skewed to larges sized games because we have developed a loyal customer base who is accustomed to games this big. When you put these same games in other channels, the download size starts to matter more. I also think Ricochet Lost Worlds has an advantage because it is a sequel to a very successful game. If people had never heard of Ricochet they may not be willing to download the 13 MB file. But since they loved Ricochet 1, they are willing to download Ricochet 2 (and other games made by the same company) even though they download rather large.
My goal for my next game is 7 MB. (My goal for Ricochet Lost Worlds was 10 MB)
Kai Backman
10-01-2004, 11:35 PM
All downloads are managed by a PHP script. It doesn’t just start the download, it actual send each byte of the game’s installer.exe. After it sends the last byte it adds a record to the database to say that a download was completed.
What function do you use to push the bytes? Does the script handle partial downloads (like resuming download managers create)? I have a similar script going and would love to see how you do it...
I can only find one thread on the old Dexterity board, but I remember asking this question myself at one point:
http://www.indiegamer.com/archives/t-611.html
NuriumGames
10-01-2004, 11:38 PM
Well, I have not launched the game yet, but I can give you the Beta version statistics for September from Webalizer.
Hits: 2408
Kb: 6745892
File size is 7943Kb, so it gives 849 complete downloads, but some of the traffic is from incomplete downloads. Real total downloads from my website are 650-750.
Hope someone else gives some numbers too. :)
tolik
10-01-2004, 11:39 PM
All downloads are managed by a PHP script. It doesn’t just start the download, it actual send each byte of the game’s installer.exe. After it sends the last byte it adds a record to the database to say that a download was completed.
It does not have any special consideration for download managers. They may skew the overall completion percentage a bit.
Does your PHP "fpassthru" script support resume of the specific file part?
James C. Smith
10-02-2004, 06:26 AM
The PHP download script used on my web site does support resuming downloads. The initial version did not but we added that recently. It was written by my partner and I have never seen the source code to it so I don’t know the specific of how it works.
Aggrav8d
10-05-2004, 07:34 PM
I'm using ProFTPd through Apache/PHP/MySQL. What does this mean? It means that I can easily count how many people have visited the site, and how many people downloaded the game. But apparently ProFTPd does not come with a nice way to tell how many times a download was completed. Does anyone know of a way to make this happen? Something like weekly stats mailed to root would be perfect.
For anyone interested, Mei's Cube Puzzles (http://freakin.no-ip.com/content?content.8) was visited 52000 times since opening a few weeks ago and the poor little server has been hit with a slashdot-esque effect at least once. Unfortunately, only 70 people downloaded through the Downloads page. I suspect that stats are not being counted for some of the other links to the game, something I intend to correct very soon. The game download size is about 5MB.
anothersomething
10-05-2004, 07:43 PM
I'm using ProFTPd through Apache/PHP/MySQL. What does this mean? It means that I can easily count how many people have visited the site, and how many people downloaded the game. But apparently ProFTPd does not come with a nice way to tell how many times a download was completed. Does anyone know of a way to make this happen? Something like weekly stats mailed to root would be perfect.
For anyone interested, Mei's Cube Puzzles (http://freakin.no-ip.com/content?content.8) was visited 52000 times since opening a few weeks ago and the poor little server has been hit with a slashdot-esque effect at least once. Unfortunately, only 70 people downloaded through the Downloads page. I suspect that stats are not being counted for some of the other links to the game, something I intend to correct very soon. The game download size is about 5MB.
Check your web server logs. Like James said, you could always write a PHP script that counts how many times a download was completed. And also... for the outside people linking to your game, you can use mod_rewrite to rewrite URLs, so download.exe becomes download.php?q=download.exe
Nutter
10-07-2004, 10:33 PM
The PHP download script used on my web site does support resuming downloads. The initial version did not but we added that recently. It was written by my partner and I have never seen the source code to it so I don’t know the specific of how it works.
Call it boredom, but I was interested in ways to tell if a download was "probably" completed, as well as how to resume/support GetRight. And.. here we are. Enjoy everyone.
Notes:
- I haven't really tested it heavily, and the testing I did do was locally on my Win32 install of Apache/PHP/MySQL. I was finding that Apache would not send any data (including headers) until the entire file had been sent and the connection closed - and apparently this is an "issue" with many Win32 servers. Having not tested on any of my real servers, I don't know if this will still happen or not. Hey, it's free - I'll call it a member project to get it fine tuned & perfected.
- As a result of this, when GetRight was used it was counting downloads twice, since initially the server transmitted the entire file, and then GetRight would assume that it only had the headers and start (and finish) downloading all the files parts - resulting in effectively 2 transfers.
- In summary: don't use this on Win32 servers, and you should also do testing on Linux/BSD servers to make sure that it works as advertised.
- As it's free and I'm not asking for anything like credit, I would really appreciate it if any improvements/fixes to this code are posted to these forums for everyones benefit.
- Disclaimer: I'm sure it's buggy, it's not that well tested, and hey, it may make your entire server catch fire - I make no claims that it'll work as claimed, and give no warranty what-so-ever. You use it, you live with it. :)
<?
// Startup stuff (DB connection, etc)
require_once("inc_php/header.inc.php");
/////////////////////////////////////////////////
// Begin Configuration
//
// In bytes, 51200 = 50k/sec. Set to 0 for no speed limit
// ****************** IMPORTANT NOTE ******************
// * This has to be 0 for most Windows based servers, *
// * as they will not actually send any data until *
// * the connection is closed - ie the file has been *
// * completely transmitted! Very crappy.. *
$speedLimit = 51200;
// Also in bytes, 8192 = 8kb. Don't set to 0, or too small.
$maxTransferChunkSize = 8192;
// This is the path to the file we are going to transfer.
$fileToTransfer = $GLOBALS['k_RootDir'] ."data/game1234.rar";
// This is the filename that will be saved to the users computer.
// It doesn't need to be the same filename as the filename on
// the server.
$destFileName = "my_game_installer.rar";
/////////////////////////////////////////////////
// End Configuration
//
// We don't want this script to abort when the connection is
// prematurely closed, or has been running for more than 30
// seconds (the default PHP timeout period)!
ignore_user_abort();
set_time_limit(0);
//
$fileSize = filesize($fileToTransfer);
if ($fileSize === FALSE)
die("Unable to determine file size!");
//
$startByte = 0;
$lastByte = $fileSize-1;
// Check if the user is trying to resume or download in chunks (ala GetRight)
if (isset($_SERVER['HTTP_RANGE']))
{
// $_SERVER['HTTP_RANGE'] is something like: bytes=10-
if (preg_match("/^bytes=([0-9]+)-([0-9]*)$/", $_SERVER['HTTP_RANGE'], $matches))
{
$startByte = $matches[1];
if ($matches[2])
$lastByte = $matches[2];
if (($startByte < 0) || ($startByte >= $fileSize))
{
// Ack! Invalid range specified for the file.
header('HTTP/1.1 416 Requested Range Not Satisfiable');
header('Accept-Ranges: bytes');
header('Content-Range: bytes */'. $fileSize);
exit;
}
}
}
// We open the output to get the file handle instead of using
// print/echo - this way we can check the return code of fwrite()
// to see how many bytes were written to the output.
$outFile = fopen("php://output", "wb");
if (!$outFile)
die("Unable to open output stream!");
// File that is being downloaded
$inFile = fopen($fileToTransfer, "rb");
if (!$inFile)
die("Unable to open file to be downloaded!");
// Send the required headers
if (($startByte != 0) || ($lastByte != ($fileSize-1)))
header('HTTP/1.1 206 Partial Content');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'. $destFileName .'"');
header('Accept-Ranges: bytes');
if (($startByte != 0) || ($lastByte != ($fileSize-1)))
header('Content-Range: bytes '. $startByte .'-'. $lastByte .'/'. $fileSize);
header('Content-Length: '. (($lastByte+1) - $startByte));
header('Pragma: ');
header('Cache-Control: private'); // Don't store the file on public caches!
header('Connection: close');
if (strcmp($_SERVER['REQUEST_METHOD'], "HEAD") != 0)
{
// Number of bytes to transfer in each chunk
$transferChunkSize = $maxTransferChunkSize;
if ($speedLimit != 0)
$transferChunkSize = $speedLimit;
// If resuming (or using something like GetRight),
// seek to the requested position in the file.
if ($startByte != 0)
fseek($inFile, $startByte);
// Make sure the headers have been sent to the client.
ob_end_clean();
$bytesWritten = 0;
while (!feof($inFile) && ($bytesWritten <= $lastByte) && (connection_status() == 0))
{
$thisChunkSize = $transferChunkSize;
// $lastByte+1 since it is always 1 less than the transfer size as it is 0-based
if (($bytesWritten + $thisChunkSize) > ($lastByte+1))
$thisChunkSize = ($lastByte+1) - $bytesWritten;
$data = fread($inFile, $thisChunkSize);
// Write out the data, and flush the output streams
// to make sure that it isn't being cached locally
$res = fwrite($outFile, $data, $thisChunkSize);
fflush($outFile);
flush();
if ($res !== FALSE)
$bytesWritten += $res;
if ($speedLimit != 0)
sleep(1);
}
if (($startByte + $bytesWritten) == $fileSize)
{
// Download completed!
$SQL = 'INSERT INTO downloads (fileName,completed) VALUES ("Complete: '. $fileToTransfer .'; ('.$startByte.'-'.$lastByte.') : '.$bytesWritten.'/'.$fileSize.'",1)';
$db->execSQL($SQL);
}
else
{
// Download either failed, or the user is using a download manager that
// is downloading the file in chunks - but if this is the case, we will
// eventually send the last byte (and hence the above statement will be
// true), and the download will be correctly registered as completed.
}
}
fclose($inFile);
fclose($outFile);
?>
I think James' point about customer perception BEFORE the download even begins is a real important one. If they have a very high interest, they will wait. I have been very surprised at how some absolutely insane big MB games have a pretty decent completion percentage because the visitor is real interested.
All things being equal, I do think smaller size does give an advantage. But as broadband increases, the difference between 5mb and 12mb will get less and less.
Diodor Bitan
10-25-2004, 09:38 PM
But as broadband increases, the difference between 5mb and 12mb will get less and less.
What about the difference between 1 MB and 5MB?
princec
10-26-2004, 01:12 AM
Almost irrelevant even now surely?
I'm quite looking forward to being able to deploy 1MB applets.
Cas :)
Our applets currently clock in at around 600k for the biggest.
20k stub loader displays a loding screen, then loads the main game jar (100 - 200k)
This then loads the zipped resources while showing a loading bar. It seems to be enough to keep 90% of players happy while it loads.
However, modem users still complain :(
princec
10-26-2004, 05:30 AM
Complain they might but they're a dying breed :)
Cas :)
simonh
10-26-2004, 05:55 AM
You wish :D
Powered by vBulletin™ Version 4.1.3 Copyright © 2013 vBulletin Solutions, Inc. All rights reserved.