What determines Android Market popularity ranking

by joshv » Thu, 18 Dec 2008 22:45:13 GMT

Sponsored Links
 I've posted this question to the Market technical support forum and
received no answer, so I will try here.

Does anyone know what metrics are used to determine an application's
popularity in the Android Market?

It does not appear to involve just the number of ratings, the download
count, or the average rating, as there are applications which are
persistently ranked lower by popularity even though they have higher
download counts, higher total ratings, and higher average ratings than
other apps that are more "popular" in the same category.

I don't want to point to specific apps in this post, but it should be
easy enough to find examples.  If a Google employee is interested in
specific examples, contact me directly.


What determines Android Market popularity ranking

by John Spurlock » Thu, 25 Dec 2008 07:15:31 GMT

 Did you ever get an answer to this?  I'm curious as well.

Perhaps they are being purposely vague to discourage gaming the system
by certain app developers.


Sponsored Links

What determines Android Market popularity ranking

by Jeff » Thu, 25 Dec 2008 09:45:59 GMT

 The real problem is kids using the rating system to write dirty
words.  Google need to help us clean this up/


What determines Android Market popularity ranking

by Chister Nordvik » Sun, 01 Feb 2009 23:56:26 GMT

 Has anyone figured out this magic formula?

I have a app that has > 15000 downloads, a rating of 4.38(600
ratings), but it is still less popular than a competing app with <
10000 downloads and a rating of 3.45. How is this possible? My guess
is that it is related to the number of uninstalls but then the rating
system is all wrong? I think I just have to make a new application
with a similar name and start all over again since the app got a lot
of uninstalls in the first version. But then I loose 600 ratings which
could potentially be very important to have if the rating system

So please, Google employees, can you give us any hints on whether you
are doing any changes to the rating system in the near future or give
us any hints on how the list is decided?



What determines Android Market popularity ranking

by brs » Mon, 02 Feb 2009 00:39:08 GMT

 There also seems to be a time aspect to it - newer apps seem to be
favored in the ranking even if they have not as many downloads or
ratings as an older one.

As a suggestion to the Market team: it would be really nice to list
the apps by multiple metrics. We already have date and this secret,
magic "popularity" metric. Sometimes I just would like to see which
are the most downloaded or most highly rated applications in a
particular category.



What determines Android Market popularity ranking

by John Spurlock » Mon, 02 Feb 2009 00:59:20 GMT

 The active install % seems to be very highly rated in this magic
formula right now.  Which means any update you release will, by
definition, kill your "popularity".  Personally, I'd rather focus on
improving the app instead of gaming the system, but I agree it would
be nice if the rating favored # of downloads a bit more.


What determines Android Market popularity ranking

by Sundog » Mon, 02 Feb 2009 23:13:21 GMT

 I don't think that's true. I released my app on day one and it's been
in the top ten ever since.


What determines Android Market popularity ranking

by Chister Nordvik » Wed, 04 Feb 2009 16:25:56 GMT

 Would you share the percentage of active installs? My app is around
40-50% and while the rating is now 4.40, the app goes lower and lower
on the popularity rating. Maybe Google doesn't like my app? :-)



Other Threads

1. Why does my racing game not work???

I have been creating a simple little racing game for my computer
science coursework and well its broken whenever I run it in the
emulator it force closes, could you please check my code to see whats
wrong with it??
heres the code if you want the entire project I put it on
http://www.anddev.org/my_racing_game_wont_work-t12492.html thanks;

public class Draw extends Activity {
        public int dx;
    public int dy;
    public double Angle;
    private float mcarWidth;
    private float mcarHeight;
    public int mcarx;
    public int mcary;
    public int mx;
    public int my;
    public int[][] TrackCords;
    public boolean cord;
    public int i;
    Bitmap mCar;
    Bitmap mTrack1;
    Bitmap mTrack2;
    public void onCreate(Bundle savedInstanceState) {
        mCar = BitmapFactory.decodeResource(getResources(),
        mTrack1 = BitmapFactory.decodeResource(getResources(),
        mTrack2 = BitmapFactory.decodeResource(getResources(),
        mcarWidth = mCar.getWidth();
        mcarHeight = mCar.getHeight();
        mx = 0;
        my = 0;
        setContentView(new Panel(this));
    class Panel extends SurfaceView implements SurfaceHolder.Callback{
        private TilterThread mthread;

        public Panel(Context context) {
            mthread = new TilterThread(getHolder(), this);
        public void onMeasure(int widthMeasureSpec, int
                dy = measureHeight(heightMeasureSpec);
                dx = measureWidth(widthMeasureSpec);
                mcarx = (int) (dx/2-mcarWidth/2);
                mcary = (int) (dy - mcarHeight);
                Angle =0;
        private int measureHeight(int Measure) {
                int specSize = MeasureSpec.getSize(Measure);
                return specSize;
        private int measureWidth(int Measure) {
                int specSize = MeasureSpec.getSize(Measure);
                return specSize;
        public void TrackPosFinder(int mx, int my){
                cord = false;
                if (my >= 0)
                                my -=100;
                                if (my >0){
                        while (cord = false);
                cord = false;
                i = 1;
                        my +=100;
                while(cord = false);
        public void onDraw(Canvas canvas) {
                my += 1;
                TrackPosFinder(mx , my);
                for( i=0; i<TrackCords.length; i+=2)
                canvas.rotate((float) Angle, (float) dy,(float) dx);
            canvas.drawBitmap(mCar, mcarx, mcary, null);
        public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
            // TODO Auto-generated method stub

        public void surfaceCreated(SurfaceHolder holder) {
        public void surfaceDestroyed(SurfaceHolder holder) {
            boolean retry = true;
            while (retry) {
                try {
                    retry = false;
                } catch (InterruptedException e) {
        public boolean onKeyDown(int keyCode, KeyEvent msg) {
                if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
                        Angle += -10;
                if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
                        Angle += 10;
                return (true);

    class TilterThread extends Thread {
        private SurfaceHolder msurfaceHolder;
        private Panel mpanel;
        private boolean mrun = false;
        public TilterThread(SurfaceHolder surfaceHolder, Panel panel)
            msurfaceHolder = surfaceHolder;
            mpanel = panel;

        public void setRunning(boolean run) {
            mrun = run;
        public void run() {
            Canvas c;
            while (mrun) {
                c = null;
                try {
                    c = msurfaceHolder.lockCanvas(null);
                    synchronized (msurfaceHolder) {
                } finally {
                    if (c != null) {
                  catch (InterruptedException e) {


2. Tanya rom magic 2.1 apps2sd

Yg masih ngoprek htc magic, numpang tanya dong, sekarang rom magic yg eclair
dan support apps2sd rom yg mana ya?

Dah lama ninggalin magic, skrg lagi mau ngoprekin lagi :-)



Lucky Sebastian

"Indonesian Android Community [id-android]" 

3. super.onResume() at beginning or end of method? Does it matter?

4. Paging androider Lampung

5. Ads in apps... How to successfully generate a larger revenue?

6. Langkah-langkah MengRoot

7. hangup outgoing call programmatically - is this even possible?