Is this app asking for more than it should?

Paste an app's permissions and broadcast receivers to see whether they are unusual for apps in the same Google Play genre.

Check an app

Sign in with your email to get 5 free checks. We email you a code, so there is no password to remember.

Your result appears here

You will see whether the app is flagged and which requests stood out. To try it now, load one of the example apps below.

Example apps to try

Load an app to fill the form with its genre and permissions, or copy its list to use elsewhere.

AppGenreNamesActions

Get the list from an APK

  1. Get the APK

    From a phone, print the path of the installed app, then pull the file. From your own project, use the APK in your build output.

    adb shell pm path com.example.app
    adb pull /data/app/.../base.apk app.apk
  2. Read its manifest

    With the Android SDK command-line tools installed:

    apkanalyzer manifest print app.apk > manifest.xml

    Alternatives: apktool d app.apk writes a readable AndroidManifest.xml, and aapt2 dump permissions app.apk prints the permissions only.

  3. Paste it above

    Paste the whole manifest, or one name per line, choose the app's Google Play category as the genre and press Check app. We read the uses-permission names and the actions declared inside receiver elements. Receivers that an app registers in code while it runs are not in the manifest and cannot be seen.

    Paste the complete list. A partial list can give a misleading result.

API

Accounts with extended access can run the same check from their own scripts and tools. Checks through the API count toward the same daily allowance as checks on this page.

Send a check

curl https://check.crisplab.net/api/v1/check \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"genre": "tools",
       "permissions": ["INTERNET", "CAMERA", "READ_CONTACTS"]}'

Instead of permissions you can send "manifest" with the whole AndroidManifest.xml as a string. Genres: entertainment (Entertainment), healthfitness (Health & Fitness), personalization (Personalization), photography (Photography), tools (Tools).

The answer, for example

{"verdict": "unusual", "band": 2, "top_share": 10,
 "unexpected": ["READ_CONTACTS"], "genre": "Tools",
 "n_names": 3, "n_recognized": 3, "n_unrecognized": 0,
 "plan": "monthly", "limit": 50, "remaining": 49,
 "reset_at": "2026-10-22T00:00:00Z"}

band runs from 0 (typical) to 3 (very unusual). top_share is 1, 5, 10 or 25 when the app is among that share of the most unusual apps in its genre, otherwise null. GET /api/v1/usage shows how many checks are left today. Errors come with a code: api_key (401), payment_required (402) and limit (429).

Your API keys

API keys come with extended access. Ask for it through the form below.

More checks, company use and consultation

Used your 5 free checks and need more, want access for a team, or need help applying this to your own apps or data? Tell us what you need and we will reply by email.

I am interested in