Home » How to search the Play Store by permissions?

How to search the Play Store by permissions?


How it currently CAN be done

During my morning routine reading my RSS feeds, I stumbled on a review at N-Droid, discussing an app named APEFS. This app is developed by German students (hence its description on the Playstore is in German, even if you set the language to English). But for our non-German readers, a short description here:

Basically, APEFS is an alternative front-end to the Google Playstore. You browse the playstore as you do with the original app, and search it the same. But when on the results list1, an advanced filter2 comes into play:

APEFS search results APEFS filter

As the second screenshot shows, you can select what permissions your wanted app is permitted to have (checkbox marked), and what permission it should not have (checkbox unchecked).

However: While this can be used to filter out apps with unwanted permissions (e.g. show only apps whitout the Internet permission), you can not restrict your results to the opposite (e.g. show only apps with Internet permission). The app clearly targets at users concerned about their privacy/security — and according to the review (I just found it a couple of minutes ago, so I could not test it yet) it does a very good job.


As it’s already a year ago, and the promise on the APEFS Homepage (GTransed to English, as their own English version doesn’t have that statement in the first paragraph) seems not to be fulfilled anytime soon (the app is still offline): Please consider the web-based solution from my other answer as an alternative meanwhile.

More than two years have passed since this question was asked. Still, there’s no „official solution” available. Despite its promises, APEFS (introduced in my previous answer over a year ago) has not returned. So I decided to create my own solution:

For almost 4 years now, I maintain listings of „Android apps by purpose”, i.e. grouped by their use cases. In march, I started moving them to my own server. All MetaData are stored in a database on that server, and so finally I was able to setup a search by permissions.

Search Mask to find “apps by category and permission” (click image for larger variant)

You can select between 1 and 5 categories here (note that selecting a „parent category” automatically includes all its „children”), plus one or more permissions. Default presets are for finding „permission-friendly apps” – so if you’re after such a candidate, you can simply submit the form after having made described selections. This should make it easy to e.g. find a PIM app which does not request the Internet permission (to keep your personal data on your device).

However, the opposite is possible as well: If you e.g. want to investigate what good NFC can do for you, select the up to 5 categories you’re interested in, then the NFC permission, switch the „Permissions” dropbox to „include”, and optionally the sorting to „by rating, descending” (to get the best-rated apps first).

When in doubt, there’s that little question-mark icon in the top-right corner, providing you with some „online help”.

But that’s not all. As I’ve explained in the second paragraph, apps in my lists are grouped by their „purpose”, i.e. what you need them for. So apps with comparable functionality should appear next to each other:

App List
Category with app details (source: the help page (hence the „red numbers”); click image for larger variant)

So you can compare them not only by rating, but also pick the one requesting less permissions (number in the box; in above image indicated by a „red 6”) or, if possible, without any concerns (no red border around the box). Clicking the app’s name reveals some more details, as shown. And there are many „easter-eggs” (i.e. MouseOver events) – again, be pointed to the help page.

Full disclosure: As initially indicated, the described site was designed by me, built by me, filled by me with its content, and is further maintained by me. It’s available bi-lingual (English/German), free of any charge (this includes: no cookies, Flash-cookies, whatever), etc. This question here at Android.SE was one of the reasons I’ve set it up.

Further be aware of the fact that this doesn’t cover the entire „playstore collection”. As of today, there are a little over 10,000 apps recorded in the database (which is probably a little less than 1% of what’s on Play – unless you don’t count the crap, fakes, and useless apps on Play, then my records might cover about 10% ☺). Still I hope (and think) it’s already a useful resource you’ll enjoy.

Why currently  this can’t be done

When a developer performs the upload of his application to Google Play, the application manifest file gets read to a database, from where the search for apps is performed.

To allow searching for applications based on their permissions, one would have to access the database and collect data that concerns the application manifest node <uses-permission>, previously read from the AndroidManifest.xml file, where the developer has declared his application permissions.

While this seems quite straightforward, Google API does not provide means to this end:

Strictly, Google Play does not filter based on <uses-permission> elements.

From the Filters on Google Play Filtering based on Manifest Elements – <uses-permission>.


Essentially, Google Play Store uses the application manifest file to automatically apply filters based on the user’s device, hardware specifications, country, carrier, etc.

All of this is done silently without the intervention of any search parameters.

A user either from Google Play or third party search engines, can limit the results after they get automatically filtered by Google, based on personal preferences like excluding paid apps; limit the results to apps that are compatible with the user devices, among others. But there’s no way to interfere with the filters applied by Google. Even if, some how, we get to that part, the API essentially isn’t prepared/designed to filter based on permissions as mentioned above.

Related Solutions

Extract file from docker image?

You can extract files from an image with the following commands: docker create $image # returns container ID docker cp $container_id:$source_path $destination_path docker rm $container_id According to the docker create documentation, this doesn't run the...

Transfer files using scp: permission denied

Your commands are trying to put the new Document to the root (/) of your machine. What you want to do is to transfer them to your home directory (since you have no permissions to write to /). If path to your home is something like /home/erez try the following:...

What’s the purpose of DH Parameters?

What exactly is the purpose of these DH Parameters? These parameters define how OpenSSL performs the Diffie-Hellman (DH) key-exchange. As you stated correctly they include a field prime p and a generator g. The purpose of the availability to customize these...

How to rsync multiple source folders

You can pass multiple source arguments. rsync -a /etc/fstab /home/user/download bkp This creates bkp/fstab and bkp/download, like the separate commands you gave. It may be desirable to preserve the source structure instead. To do this, use / as the source and...

Benefits of Structured Logging vs basic logging

There are two fundamental advances with the structured approach that can't be emulated using text logs without (sometimes extreme levels of) additional effort. Event Types When you write two events with log4net like: log.Debug("Disk quota {0} exceeded by user...

Interfaces vs Types in TypeScript

2019 Update The current answers and the official documentation are outdated. And for those new to TypeScript, the terminology used isn't clear without examples. Below is a list of up-to-date differences. 1. Objects / Functions Both can be used to describe the...

Get total as you type with added column (append) using jQuery

One issue if that the newly-added column id's are missing the id number. If you look at the id, it only shows "price-", when it should probably be "price-2-1", since the original ones are "price-1", and the original ones should probably be something like...

Determining if a file is a hard link or symbolic link?

Jim's answer explains how to test for a symlink: by using test's -L test. But testing for a "hard link" is, well, strictly speaking not what you want. Hard links work because of how Unix handles files: each file is represented by a single inode. Then a single...

How to restrict a Google search to results of a specific language?

You can do that using the advanced search options: http://www.googleguide.com/sharpening_queries.html I also found this, which might work for you: http://www.searchenginejournal.com/how-to-see-google-search-results-for-other-locations/25203/ Just wanted to add...

Random map generation

Among the many other related questions on the site, there's an often linked article for map generation: Polygonal Map Generation for Games you can glean some good strategies from that article, but it can't really be used as is. While not a tutorial, there's an...

How to prettyprint a JSON file?

The json module already implements some basic pretty printing in the dump and dumps functions, with the indent parameter that specifies how many spaces to indent by: >>> import json >>> >>> your_json = '["foo", {"bar":["baz", null,...

How can I avoid the battery charging when connected via USB?

I have an Android 4.0.3 phone without root access so can't test any of this but let me point you to /sys/class/power_supply/battery/ which gives some info/control over charging issues. In particular there is charging_enabled which gives the current state (0 not...

How to transform given dataset in python? [closed]

From your expected result, it appears that each "group" is based on contiguous id values. For this, you can use the compare-cumsum-groupby pattern, and then use agg to get the min and max values. # Sample data. df = pd.DataFrame( {'id': [1, 2, 2, 2, 2, 2, 1, 1,...

Output of the following C++ Program [closed]

It works exactly like this non-recursive translation: int func_0() { return 2; } int func_1() { return 3; } int func_2() { return func_1() + func_0(); } // Returns 3 + 2 = 5 int func_3() { return func_2() + func_1(); } // Returns 5 + 3 = 8 int func_4() { return...

Making a circle out of . (periods) [closed]

Here's the maths and even an example program in C: http://pixwiki.bafsoft.com/mags/5/articles/circle/sincos.htm (link no longer exists). And position: absolute, left and top will let you draw: http://www.w3.org/TR/CSS2/visuren.html#choose-position Any further...

Should I use a code converter (Python to C++)?

Generally it's an awful way to write code, and does not guarantee that it will be any faster. Things which are simple and fast in one language can be complex and slow in another. You're better off either learning how to write fast Python code or learning C++...

tkinter: cannot concatenate ‘str’ and ‘float’ objects

This one line is more than enough to cause the problem: text="რეგულარი >> "+2.23+ 'GEL' 2.23 is a floating-point value; 'GEL' is a string. What does it mean to add an arithmetic value and a string of letters? If you want the string label 'რეგულარი...